Autor | Zpráva | ||
---|---|---|---|
Ghosting Profil |
#1 · Zasláno: 27. 3. 2009, 16:24:42
Zdravím zkouším rozjet mazání dat metodou _post, poskládal jsem si tento kód:
<? $output.="<form action='' method='post' name='mazat'>\n"; //Mazání if(isset($_POST['mazat'])) { $delete=Mysql_query ('DELETE FROM `"._mysql_prefix."-emaily` WHERE id = "' .$_POST['mazat']. '"; '); } //Výpis $dotaz="SELECT * FROM `"._mysql_prefix."-emaily`"; $vysledek = MySQL_Query($dotaz); while ($zaznam = MySQL_Fetch_Array($vysledek)) { $email_smellter = $zaznam["email_smellter"]; $id = $zaznam["id"]; $output.="<input type='checkbox' name='".$id."' /> ".$email_smellter."<br />\n"; } $output.="<input type='submit' name='mazat' value='Smazat'>\n"; $output.="</form>\n"; ?> Data se nesmažou, nevíte ke by mohl být problém? |
||
Watchick Profil |
#2 · Zasláno: 27. 3. 2009, 16:37:12
Nejsem si tedy jist, ale vy pouze nastavite promennou $delete, ale nikde ji neprovedete, pokud s tim delete prikazem nehodlate nadale pracovat, tak doporucuji dat misto
$delete=Mysql_query ('DELETE FROM `"._mysql_prefix."-emaily` WHERE id = "' .$_POST['mazat']. '"; '); Mysql_query ('DELETE FROM `"._mysql_prefix."-emaily` WHERE id = "' .$_POST['mazat']. '"; '); |
||
Mastodont Profil |
#3 · Zasláno: 27. 3. 2009, 16:41:32
Připojení k databázi je voláno někde jinde?
|
||
Ghosting Profil |
#4 · Zasláno: 27. 3. 2009, 16:42:41
Mastodont
Ano, je. Watchick Dobře změním to. |
||
Ghosting Profil |
#5 · Zasláno: 27. 3. 2009, 16:50:34
Watchick
Když tak bych potom udělal podmínky $delete=Mysql_query ('DELETE FROM `"._mysql_prefix."-emaily` WHERE id = "' .$_POST['mazat']. '"; '); if(isset($_POST['mazat'])) if ($delete) { $output.="Ne\n"; } else { $output.="Ano\n"; } Ale jde o to že se to nemaže. |
||
AM_ Profil |
#6 · Zasláno: 27. 3. 2009, 17:04:32
Hodnota $_POST['mazat'] je 'Smazat', vždyť to je název toho inputu, co to má co dělat v sql dotazu?
|
||
Jan Tvrdík Profil |
#7 · Zasláno: 27. 3. 2009, 17:05:29 · Upravil/a: Jan Tvrdík
Ghosting:
mysql_query ("DELETE FROM `" . _mysql_prefix . "-emaily` WHERE `id` = " . intval($_POST['mazat'])); |
||
AM_ Profil |
#8 · Zasláno: 27. 3. 2009, 17:12:03
Jan Tvrdík
Promiň, to myslíš vážně? kolik tak může být intval("Smazat")? Výstup bych trochu upravil: $output.="<input type='checkbox' name='todel-".$id."' /> ".$email_smellter."<br />\n"; A následně kód: $delete_id = array(); foreach ($_POST as $key=>$val){ if (substr($key, 0, 6) === 'todel-'){ $delete_id[] = "`id`='".substr($key, 6)."'"; } } $delete_condition = implode(' OR ', $delete_id); mysql_query ("DELETE FROM `" . _mysql_prefix . "-emaily` WHERE $delete_condition"); |
||
Jan Tvrdík Profil |
#9 · Zasláno: 27. 3. 2009, 17:16:00 · Upravil/a: Jan Tvrdík
AM_:
„Promiň, to myslíš vážně?“ Moje chyba, přehlédl jsem se. Jinak bych použil spíš: $output .= "<input type='checkbox' name='selected[$id]' /> " . $email_smellter . "<br />\n"; a následně $selected = array_keys($_POST['selected']); Výsledný kód <?php $output .= "<form action='' method='post' name='mazat'>\n"; //Mazání if (isset($_POST['mazat'], $_POST['selected'])) { $selected = array_keys($_POST['selected']); $conditions = array(); foreach ($selected as $id) { if (!is_numeric($id)) continue; $conditions[] = "`id` = $id"; } $condition = implode(' OR ', $conditions); MySQL_Query ("DELETE FROM `" . _mysql_prefix . "-emaily` WHERE " . $condition); } //Výpis $vysledek = MySQL_Query("SELECT * FROM `" . _mysql_prefix . "-emaily`"); while ($zaznam = MySQL_Fetch_Array($vysledek)) { $email_smellter = $zaznam["email_smellter"]; $id = $zaznam["id"]; $output .= "<input type='checkbox' name='selected[$id]' /> " . $email_smellter . "<br />\n"; } $output .= "<input type='submit' name='mazat' value='Smazat'>\n"; $output .= "</form>\n"; ?> |
||
Ghosting Profil |
#10 · Zasláno: 27. 3. 2009, 17:22:21
Jan Tvrdík
AM_ Díky moc kluci. |
||
Ghosting Profil |
#11 · Zasláno: 27. 3. 2009, 17:24:44
Ještě se zeptám jakej je rozdíl mezi tím co napsal AM_ a Jan Tvrdík? Fungují oba dva.
|
||
Jan Tvrdík Profil |
#12 · Zasláno: 27. 3. 2009, 17:34:00
Ghosting:
To moje je mírně vylepšená verze toho kódu od AM_. Základní rozdíl je ten, že já posílám vybrané checkboxy jako pole + jsem přidal jednoduchou ochranu proti SQL injection. |
||
Časová prodleva: 15 let
|
0