Autor | Zpráva | ||
---|---|---|---|
bodan Profil * |
#1 · Zasláno: 4. 5. 2012, 16:54:33
Zdravím, na webu mám novinky a chci abych je mohl mazat a upravovat (zatím řešim mazání, upravení potom dokážu udělat podle toho). Každá novinka ma přiřazeno nějaké ID (to funguje dobře), ale teď si nijak nevybavuju jak to id zjistit a pak ho použít v SQL příkazu. Kod:
$mysql=mysql_query("select datum,text,id from novinky order by id desc"); while ($vysledek=mysql_fetch_array($mysql)){ echo(' <tr> <td><b>'.$vysledek["datum"].' - </b></td> <td>'.$vysledek["text"].'</td> <td>ID: '.$vysledek["id"].'</td> <td> <form name="upravy" method="POST"> <input type="submit" value="Smazat" name="snd"> </td> </tr> </br>'); } if($_POST["snd"]){ mysql_query("DELETE * FROM novinky WHERE ???) or die(mysql_error()); } ?> </form> Díky za radu. |
||
Pan X Profil |
tak v proměnné $vysledek["id"] máš to id ne? Tak si zavolej
DELETE * FROM "table_name" WHERE id = $vysledek["id"] |
||
bodan Profil * |
#3 · Zasláno: 4. 5. 2012, 18:41:53
Díky, to jsem zkoušel:
mysql_query('DELETE * FROM novinky WHERE id = $vysledek["id"]') or die(mysql_error()); Ale píše error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM novinky WHERE id = $vysledek["id"]' at line 1 |
||
abc Profil |
bodan:
Prohoď uvozovky na: mysql_query("DELETE * FROM novinky WHERE id = $vysledek['id']") or die(mysql_error()); |
||
NouF Profil |
#5 · Zasláno: 4. 5. 2012, 19:37:00
Jestli mohu poradit. Novinky nemažte. Lepší volba bude taková vytvořit nový sloupec např "smazano"
A zapisovat 0 nebo 1. Když uživatel vstoupí na novinku kterou jste smazal jen udělat podminku a vypsat test novinky byla smazána + např vyhledavač jak se dostat jinam. |
||
Bertram Profil |
#6 · Zasláno: 4. 5. 2012, 19:44:47
bodan:
Ahoj, v cyklu vypisuješ novinky a ke každé jednotlivé novince přidáváš formulářové tlačítko pro smazání, ale s formulářem již neodesíláš identifikátor záznamu, který vlastně chceš mazat. Doplnil bych hidden input, který by byl identifikátorem záznamu pro delete a také ti tam chybí atribut action a ukončení </form> |
||
bodan Profil * |
#7 · Zasláno: 4. 5. 2012, 20:21:37
abc:
Nejde ani to: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING NouF: Díky za tip, později vyzkouším. Bertram: Ahoj, aha, ale pořád mi to nějak nejde. |
||
Bertram Profil |
#8 · Zasláno: 4. 5. 2012, 20:51:48
bodan:
„Ahoj, aha, ale pořád mi to nějak nejde.“ Tak ukaž upravený kód. |
||
bodan Profil * |
#9 · Zasláno: 4. 5. 2012, 20:58:35
Bertram:
To právě nejde, protože je chyba někde v těch závorkách. Jinak, proč action, když se to vše nastaví hnen na té samé stránce? Hidden input jsem moc nepochopil. |
||
Bertram Profil |
#10 · Zasláno: 4. 5. 2012, 21:20:52
bodan:
"DELETE FROM novinky WHERE id = $vysledek['id']" <input type="hidden" name="id" value="$vysledek['id']"> $delId = intval($_POST['id']); "DELETE FROM novinky WHERE id = $delId" |
||
bodan Profil * |
#11 · Zasláno: 4. 5. 2012, 21:30:35
Bertram:
Díky moc :) Ještě je chyba v tom inputu syntax error, unexpected T_STRING. |
||
Someone Profil |
#12 · Zasláno: 4. 5. 2012, 21:32:12
bodan:
Napiš prosím stávající kód. |
||
bodan Profil * |
#13 · Zasláno: 4. 5. 2012, 21:36:23
$mysql=mysql_query("select datum,text,id from novinky order by id desc"); while ($vysledek=mysql_fetch_array($mysql)){ echo(' <tr> <td><b>'.$vysledek["datum"].' - </b></td> <td>'.$vysledek["text"].'</td> <td>ID: '.$vysledek["id"].'</td> <td> <form name="upravy" method="POST"> <input type="hidden" name="id" value="$vysledek['id']"> </form> </td> </tr> </br>'); if($_POST["snd"]) { $delId = intval($_POST['id']); mysql_query("DELETE FROM novinky WHERE id = $delId") or die(mysql_error()); } } ?> |
||
David Klouček Profil |
bodan:
echo(' <tr> <td><b>'.$vysledek["datum"].' - </b></td> <td>'.$vysledek["text"].'</td> <td>ID: '.$vysledek["id"].'</td> <td> <form name="upravy" method="POST"> <input type="hidden" name="id" value="'.$vysledek['id'].'"> </form> </td> </tr> </br>'); |
||
bodan Profil * |
#15 · Zasláno: 4. 5. 2012, 21:40:07 · Upravil/a: bodan
David Klouček:
Nepomohlo, ale asi by tam mělo by tam být to co psal Bertram, ale i tak pořádný stejný error. David Klouček: David Klouček příspěvek editoval ... díky, teď už to funguje, ale ani u jednoho nemám button. Jsem blbec, zapomněl jsem na input se sumbit. Už to funguje, díííky moc všem. |
||
Someone Profil |
Nezkoumal jsem ty kódy podrobně, ale já to třeba řeším pomocí metody GET
if (isset($_GET['odstranit'])) { mysql_query("DELETE FROM novinky WHERE novinky.id=".intval($_GET['odstranit'])); Header("Location: index.php"); } $mysql=mysql_query("select datum,text,id from novinky order by id desc"); while ($vysledek=mysql_fetch_array($mysql)){ echo(' <tr> <td><b>'.$vysledek["datum"].' - </b></td> <td>'.$vysledek["text"].'</td> <td>ID: '.$vysledek["id"].'</td> <td><a href="?odstranit='.$vysledek['id'].'">Odstranit</a></td> </tr>'); } ?> |
||
Bertram Profil |
#17 · Zasláno: 4. 5. 2012, 21:57:30
bodan:
Protože jsi ho smazal. echo"<form name='upravy' method='POST'> <input type='hidden' name='id' value='{$vysledek["id"]}'> <input type='submit' value='Smazat' name='snd'> </form>"; |
||
bodan Profil * |
#18 · Zasláno: 5. 5. 2012, 17:41:11 · Upravil/a: bodan
Ještě mám jeden problém ohledně upravování novinek. Udělal jsem to pro jednoduchost na jinou stránku. Vypadá to,že vše funguje, ID si to zjistí asi dobře, ale už to neupraví.
while ($vysledek=mysql_fetch_array($mysql)) { echo(' <tr> <td><textarea name="text" cols="40" rows="3">'.$vysledek["text"].'</textarea> </td> <td> <form name="upravy" method="POST"> <input type="hidden" name="id" value="'.$vysledek['id'].'"> <input type="submit" value="Potvrdit" name="snd"> </form> </td> </tr> </br>'); if($_POST["snd"]) { $delId = intval($_POST['id']); $text2 = $vysledek2["text"]; mysql_query("UPDATE novinky SET text = $text2 WHERE id = $delId") or die(mysql_error()); } } Chyba: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 10' at line 1 Aha, nevšiml jsem si té dvojky u vysledku. Stejně ten UPDATE ale nějak nefunguje, ten text v textaree to bere asi jako řádek v mysql. |
||
Casero Profil |
#19 · Zasláno: 5. 5. 2012, 18:00:30
bodan:
„Aha, nevšiml jsem si té dvojky u vysledku. Stejně ten UPDATE ale nějak nefunguje, ten text v textaree to bere asi jako řádek v mysql.“ Po odeslaní formuláře máš ten text v proměnné $_POST["text"]. |
||
Bertram Profil |
#20 · Zasláno: 5. 5. 2012, 18:06:43
Ahoj, a také dej $text2 do apostrofů a název proměnné $delId se tu už nehodí.
|
||
bodan Profil * |
#21 · Zasláno: 5. 5. 2012, 18:42:56
Ahoj, ale vždyť to je správně ne? Ten mysql příkaz nastaví do databáze to co je v text area. Teď jsem se do toho docela zamotal.
|
||
Bertram Profil |
Tak se vymotej :) a uvědom si, že vše co odešleš formulářem najdeš v poli $_POST pod indexem, který je totožný s atributem name příslušného prvku formuláře.
|
||
bodan Profil * |
#23 · Zasláno: 5. 5. 2012, 20:13:05 · Upravil/a: bodan
Jasně, musim použít proměnnou POST, akorát mám zas nějaký problém s uvozovkama.
Tak závorky už jsem vyřešil, ale pořád to nějak nejde, píše stejnou chybu. mysql_query("UPDATE novinky SET text = ".$_POST['text']." WHERE id = $delId") or die(mysql_error()); |
||
Han Profil |
#24 · Zasláno: 5. 5. 2012, 21:36:55
čo skúsiť
„Ahoj, a také dej $text2 do apostrofů“ a použiť to takto: mysql_query("UPDATE novinky SET text = '".$_POST['text']."' WHERE id = $delId") or die(mysql_error()); |
||
David Klouček Profil |
Chybu ti to může házet taky v případě, že text bude obsahovat apostrof - viz SQL injekce.
mysql_query("UPDATE novinky SET text = '".mysql_real_escape_string($_POST['text'])."' WHERE id = $delId") or die(mysql_error()); |
||
bodan Profil * |
#26 · Zasláno: 5. 5. 2012, 21:56:51 · Upravil/a: bodan
Tak už to chybu neháže.. díky. Bohužel je to, ale jiný problém. V podstatě se text do databáze vůbec nezapíše, ale error žádný.
Teda abych byl přesný.. vůbec se ten řádek se sloupcem text neupraví. |
||
David Klouček Profil |
bodan:
Tak si vypiš, co obsahuje $delId. Případně po SQL dotazu zavolej funkci mysql_affected_rows(), která vrací počet ovlivněnejch řádků. |
||
Časová prodleva: 13 let
|
0