Autor | Zpráva | ||
---|---|---|---|
noby Profil |
#1 · Zasláno: 28. 8. 2011, 19:12:15
Dobrý den.
Již pár dní řeším funkci update. Jenže tato funkce mi nechce fungovat. Nevíte kde by v následujícím kódu mohl být problém? <?php include("../../connecting.php"); $id = $_POST['id']; $nazev = $_POST['nazev']; $popis = $_POST['popis']; $clanek = $_POST['clanek']; $vlozen = $_POST['vlozen']; $query = ("UPDATE clanky SET id = '$id', nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'"); mysql_query($query); header("location: ../admin.php?page=edit&id=$id") ?> |
||
panther Profil |
#2 · Zasláno: 28. 8. 2011, 19:21:40
noby:
co píše mysql_error()? Připojení k DB proběhne (aneb je správně cesta k připojovacímu souboru)? |
||
noby Profil |
#3 · Zasláno: 28. 8. 2011, 19:24:20
panther:
mysql_query nevypsal vůbec nic, když jsem ho v kódu měl. Spojení s databázi je správné protože to vypíše článek který chci editovat |
||
panther Profil |
#4 · Zasláno: 28. 8. 2011, 19:29:37
noby:
„mysql_query nevypsal vůbec nic“ ne mysql_query, mysql_error. Kde jsi ho v kódu měl? Pole $_POST , jsou v něm data, která očekáváš, neprovádíš - nesnažíš se provádět - tenhle kód před odesláním fomruláře?
V uvedeném kousku (syntaktický) problém nevidím. |
||
noby Profil |
#5 · Zasláno: 28. 8. 2011, 19:32:38 · Upravil/a: noby
panther:
Pardon chtěl jsem napsat mysql_error ale místo toho jsem napsal mysql_query. V kódu byl umístěn zde: <?php $query = ("UPDATE clanky SET id = '$id', nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'") or die(mysql_error()); mysql_query($query); ?> Pro jistotu jsem do kodu mysql_error vložil i teď a opět nic nevypsal. |
||
Alphard Profil |
#6 · Zasláno: 28. 8. 2011, 19:41:01
[#5] noby
V tomto kódu jste vynechal mysql_query(). Za používání neošetřených vstupů do databázových dotazů by se mělo stříelet (kolega DoubleThink říká bez soudu). |
||
noby Profil |
#7 · Zasláno: 28. 8. 2011, 19:49:47
Alphard:
„V tomto kódu jste vynechal mysql_query().“ Jsem ho prostě jen nepřipsal v minulem postu ale jinak tam byl a je |
||
jenikkozak Profil |
#8 · Zasláno: 28. 8. 2011, 20:00:36
noby:
Vypisuješ si error MySQL dotazu před tím, než může vůbec vzniknout. (Dotaz se předává až na 3. řádku, výpis chyby máš na druhém.) Dost dobře nerozumím ještě jedné věci: UPDATE clanky SET id = '$id', nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id' |
||
noby Profil |
#9 · Zasláno: 28. 8. 2011, 20:09:24
jenikkozak:
I když to upravím do této podoby: <?php $query = ("UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'"); mysql_query($query) or die(mysql_error()); ?> Tak nic nevypíše ani se nic neprovede. |
||
Alphard Profil |
#10 · Zasláno: 28. 8. 2011, 20:34:55
Existuje to id? Co říká mysql_affected_rows()?
|
||
noby Profil |
#11 · Zasláno: 28. 8. 2011, 21:11:23
Alphard:
Jasně že to id existuje už samotná url napovídá že se jedna o editaci článku s id číslo 2 A tento článek o jehož editaci se pokouším je id číslo 2. mysql_affected_rows jsem ještě nezkoumal takže ani nevím k čemu slouží. |
||
Tori Profil |
#12 · Zasláno: 28. 8. 2011, 21:24:29
noby:
A neměnil jste ve formuláři to ID článku? |
||
noby Profil |
#13 · Zasláno: 28. 8. 2011, 21:33:32 · Upravil/a: noby
Tori:
Neměnil, id se určuje automaticky u odkazu viz můj předchozí příspěvek kde je uveden odkaz pro editaci v této podobě. <a href="admin.php?page=edit&id='.$id['id'].'"><img src="images/edit.png" title="Editovat článek '.$id['nazev'].'"></a> Kde '.$id['id'].' vypíše url v této podobě: admin/admin.php?page=edit&id=2 |
||
Marek88 Profil |
#14 · Zasláno: 28. 8. 2011, 21:48:21
Když si vypíšeš proměnnou $query, tak je tam opravdu to, co očekáváš?
$query = "UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'"; echo $query; |
||
noby Profil |
#15 · Zasláno: 28. 8. 2011, 21:59:03
Marek88:
Tam nemám jak vypisovat to pouze zpracuje změny v článku který změním ve formuláři |
||
Alphard Profil |
#16 · Zasláno: 28. 8. 2011, 22:03:09
noby:
Samozřejmě, že to můžete vypsat. Znáte aspoň základy PHP, nebo jen lepíte kód, který jste někde našel? [#14] Marek88 dal jasnou ukázku kódu, možná za to můžete dát ještě exit. Když jsem se vás ptal na mysql_affected_rows(), kterou neznáte, tak se máte podívat do manuálu, ne sem psát, že jste to ještě neviděl. Více vlastní snahy. |
||
noby Profil |
#17 · Zasláno: 28. 8. 2011, 22:23:12
Alphard:
PHP se učím postupně. Po cca jednom roce jsem se rozhodl že si něco zkusím a však vše mi fungovalo až do te doby než jsem začal měnit kody v souborech apod. I tato funkce UPDATE fungovala ale od te doby co jsem začal měnit obshay souboru a pozměnil pár indexu atd. tak nefunguje. Přitom chyba je sto procentně tady jelikož mi vše ostatní funguje. Například tohle je verze předchozího kódu, která fungovala: <?php // Připojení k databázi include("../../connect.php"); // Zjištění id článku $id = $_POST['idx']; $nazev = $_POST['nazev']; $popis = $_POST['popis']; $clanek = $_POST['clanek']; // Příkaz update $query = ("UPDATE clanky SET nazev='$nazev', popis='$popis', clanek='$clanek' WHERE id = '$id' "); mysql_query($query); header("location: ../prihlasen.php?page=edit_article&;id='.$id.'"); ?> Přitom tento kod je téměř stejný pouze přidán další řádek do databáze navíc . Jinak ano uznávám v PHP jsem amatér ale ne zas až tako velký abych nedokázal dát dohromady 1+1. No nic k tématu. Marek88 dal sice ukázku, ale tento script pouze zpracuje tzv. vypsal by to co jsem změnil po odeslání změn ve formuláři |
||
DoubleThink Profil * |
#18 · Zasláno: 28. 8. 2011, 22:30:03
Neznáme podobu ani data tabulky. Nevíme, jaká data přišly v POST datech. A tak dále.
Není ti pomoci. Vypiš si query a vyzkoušej ji v PMA/Admineru. V PHP přímá chyba není, pokud vynechám (ne)zpracování uživatelských dat, za což bys měl dostat pár facek. |
||
jenikkozak Profil |
#19 · Zasláno: 28. 8. 2011, 23:19:14
noby:
„No nic k tématu. Marek88 dal sice ukázku, ale tento script pouze zpracuje tzv. vypsal by to co jsem změnil po odeslání změn ve formuláři“ Vypsal by? Měls to zkusit. Jde totiž třeba o to, jestli ti to vypisuje to id, které očekáváš. header("location: ../prihlasen.php?page=edit_article&;id='.$id.'"); Máš tam trochu zmatek ve znaménkách; location by mělo být absolutní adresou. |
||
noby Profil |
#20 · Zasláno: 29. 8. 2011, 00:13:00 · Upravil/a: noby
jenikkozak:
Tenhle script se nemusí řešit ten byl jen pro ukázku který jsem měl před tím. Jinak ano $query = "UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'"; echo $query; Vypíše id které očekávám. A takhle vypadá struktura tabulky: CREATE TABLE IF NOT EXISTS `clanky` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nazev` varchar(255) NOT NULL, `popis` text NOT NULL, `clanek` text NOT NULL, `vlozen` int(11) NOT NULL, `hit` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; // Edit Už funguje chyběl středník za header("location: ../admin.php?page=edit&id=$id"); Takže chyba byla jen ve středníku |
||
Marek88 Profil |
#21 · Zasláno: 29. 8. 2011, 18:37:24 · Upravil/a: Marek88
Zkus upravit tvůj script z příspěvku [#1] takto:
<?php include("../../connecting.php"); $id = $_POST['id']; $nazev = $_POST['nazev']; $popis = $_POST['popis']; $clanek = $_POST['clanek']; $vlozen = $_POST['vlozen']; $query = ("UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = $vlozen WHERE id = $id"); // odstraň uvozovky u číslných hodnot echo $query . "<br>"; // vypiš si ještě jednou pro jistotu dotaz, který se bude provádět mysql_query($query) or die(mysql_error()); echo "<br>Změněno řádků: " . mysql_affected_rows(); // tohle by ti mělo ukázat počet ovlivněných řádků předchozím dotazem // Přesměrování tam pro testovací účely nedávej //header("location: ../admin.php?page=edit&id=$id"); ?> Napiš sem pak, co ti to vypíše. |
||
Kajman_ Profil * |
#22 · Zasláno: 29. 8. 2011, 20:29:25
noby:
Ve funkční verzi používáte $_POST['idx']; v nefunkční $_POST['id']; |
||
jenikkozak Profil |
#23 · Zasláno: 29. 8. 2011, 20:35:39 · Upravil/a: jenikkozak
Kajman_:
Také jsem si toho všimnul, ale: „Vypíše id které očekávám. A takhle vypadá struktura tabulky“ noby: > Už funguje chyběl středník za header("location: ../admin.php?page=edit&id=$id"); > Takže chyba byla jen ve středníku Z tohoto usuzuji, že téma je uzavřené a chybu jsi našel. Nebo se mýlím? |
||
Časová prodleva: 6 dní
|
|||
noby Profil |
#24 · Zasláno: 4. 9. 2011, 18:00:46
jenikkozak:
Nepletete téma je uzavřeno a chyba nalezena |
||
Časová prodleva: 13 let
|
0