28. maj 2007 - 10:03Der er
40 kommentarer og 1 løsning
Slet modtagene beskeder, fra post system
Mit community indeholder et post system, hvor brugere kan sende beskeder til hinanden. Jeg har derfor prøvet at lave en slet funktion, dog uden held :(
Filen skal både kunne slette enkelte beskeder, og flere (hvis man har sat kryds i nogle checkbokse)
$slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { foreach ($slet as $val) { mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!"); } } else { mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked!");
return true;
echo "Beskeden/erne blev slettet"; } ?> -------------------------------------
Hvis jeg læser en besked, og trykker slet, dvs slet enkelt besked, så får jeg fejlen: Kunne ikke slette besked!
Og hvis jeg sætter kryds i nogle checkbokse, og trykker slet valgte, så får jeg fejlen: Kunne ikke slette besked/erne.
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Altså det første der springer i øjenene er at du for at slette det ene sted bruger $slet as $val og det andet sted bruger $id. Det er vel den samme variabel du bruger når du sender slet kommando ikke ?
det andet jeg kunne foreslå var at du implodede din array istedet for at lave en masse kald til db.
foreach ($slet as $val) { mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!"); }
istedet
$slet = implode(",",$_POST['slet']);
$query = "DELETE FROM post WHERE `modtager` = '$modtager' and id in ($slet)";
//echo $query; // Check lige at du har den rigtige query.
mysql_query($query) or die("Kunne ikke slette besked(erne)!");
har ikke lige testet da det ikke er min udviklingsmaskine jeg skriver fra p.t. Men ca. den måde skulle det kunne lade sig gøre på.
Warning: implode() [function.implode]: Bad arguments. in /customers/xhero.dk/xhero.dk/httpd.www/skole/slet_besked.php on line 11 Kunne ikke slette besked(erne)!
Men formen <form action=\"slet_besked.php\" method=\"post\" name=\"sletform\"> er vist rigtig nok, fordi det er formen på den side, hvor man markerer de poster man vil have slettet.
$slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { foreach ($slet as $val) { mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error()); } } else { mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
$slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { print_r($slet); foreach ($slet as $val) { $reuult = mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error()); if($result){ echo "Beskeden med id: $val blev slettet<br />"; }else echo "Beskeden med id: $val blev IKKE slettet<br />"; } }else{ mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
ret lige: $reuult = mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
til
$result = mysql_query("DELETE FROM `post` WHERE `id` = $val AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
Nu når jeg vælger feks 4 beskeder, og trykker Slet valgte, så skriver den:
Array ( [0] => 5 [1] => 3 [2] => 2 [3] => 1 ) Beskeden med id: 5 blev slettet Beskeden med id: 3 blev slettet Beskeden med id: 2 blev slettet Beskeden med id: 1 blev slettet
Og hvis jeg ikke vælger nogle beskeder, men trykker Slet valgte, så får jeg fejl meddelsen:
Kunne ikke slette besked(erne)! Mysql errror: 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 'AND `modtager` = ''' at line 1
$slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { print_r($slet); echo "<br />Modtager: $modtager<br />"; foreach ($slet as $val) { $reuult = mysql_query("DELETE FROM `post` WHERE `id`=$val AND `modtager`='$modtager' ") or die(" Kunne ikke slette besked(erne)! <br />Mysql errror: ".mysql_error()); if( mysql_affected_rows > 0 ){ echo "Beskeden med id: $val blev slettet<br />"; }else echo "Beskeden med id: $val blev IKKE slettet<br />"; } }elseif( isset($_GET['id']) ){ mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
echo "Beskeden blev slettet"; }else echo "Du har ikke valgt nogle beskeder at slette"; ?>
$slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { print_r($slet); echo "<br />Modtager: $modtager<br />"; foreach ($slet as $val) { $result = mysql_query("DELETE FROM `post` WHERE `id`=$val AND `modtager`='$modtager' ") or die(" Kunne ikke slette besked(erne)! <br />Mysql errror: ".mysql_error()); if( mysql_affected_rows() > 0 ){ echo "Beskeden med id: $val blev slettet<br />"; }else echo "Beskeden med id: $val blev IKKE slettet<br />"; } }elseif( isset($_GET['id']) ){ mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
echo "Beskeden blev slettet"; }else echo "Du har ikke valgt nogle beskeder at slette"; ?>
Det der "Du har ikke valgt nogle beskeder at slette" skal ikke være der, da man også kan slette enkelte beskeder, hvis man læser en. Den sletter ikke beskederne, men det skyldes nok, den ikke har fundet modtager. For der står intet ud for modtager...
echo "<br />\r\nSletning af post, ". count($_POST["slet"]) ." ialt,<br />\r\n"; mysql_query("DELETE FROM `post` WHERE `modtager`='". $_SESSION["user"] ."' AND `id` IN (". implode(",", $_POST["slet"]) .")") or die(mysql_error()); $ialt = mysql_affected_rows();
if(count($_POST["slet"]) != $ialt) { echo"Ups, alle beskeder blev IKKE slettet!!! ???"; } else { echo"Alle beskeder er slettet"; }
// og så ville jeg sætte en session og lave en header i stedet for div. echo
$slet = $_POST["slet"]; $id = $_GET["id"]; $modtager = $_SESSION["user"]; if ($slet) { print_r($slet); echo "<br />Modtager: $modtager<br />"; foreach ($slet as $val) { $result = mysql_query("DELETE FROM `post` WHERE `id`=$val AND `modtager`='$modtager' ") or die(" Kunne ikke slette besked(erne)! <br />Mysql errror: ".mysql_error()); if( mysql_affected_rows() > 0 ){ echo "Beskeden med id: $val blev slettet<br />"; }else echo "Beskeden med id: $val blev IKKE slettet<br />"; } }elseif( isset($_GET['id']) ){ mysql_query("DELETE FROM `post` WHERE `id` = $id AND `modtager` = '$modtager'") or die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
echo "Beskeden blev slettet"; }else echo "Du har ikke valgt nogle beskeder at slette"; ?>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.