Autor Zpráva
Ghosting
Profil
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
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
Připojení k databázi je voláno někde jinde?
Ghosting
Profil
Mastodont
Ano, je.

Watchick
Dobře změním to.
Ghosting
Profil
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
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
Ghosting:
mysql_query ("DELETE FROM `" . _mysql_prefix . "-emaily` WHERE `id` = " . intval($_POST['mazat']));
AM_
Profil
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
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
Jan Tvrdík
AM_
Díky moc kluci.
Ghosting
Profil
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: