Avatar billede nwn Nybegynder
28. maj 2007 - 10:03 Der 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_besked.php
---------------------------------------
<?php
session_start();

mysql_connect('host', 'bruger', 'pass');
mysql_select_db("xhero_dk");

$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.

Nogle der kan hjælpe ?
Avatar billede 0xffff Nybegynder
28. maj 2007 - 10:36 #1
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 ?
Avatar billede nwn Nybegynder
28. maj 2007 - 10:40 #2
Jo det er det.
Avatar billede 0xffff Nybegynder
28. maj 2007 - 11:03 #3
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å.
Avatar billede nwn Nybegynder
28. maj 2007 - 11:19 #4
Nu får jeg følgende fejl:

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)!
Avatar billede dkfire Nybegynder
28. maj 2007 - 12:29 #5
Det er vel heller ikke sådan at alle beskeder at den samme modtager, det er vel forskellige modtagere til de forskellige id's?
Avatar billede dkfire Nybegynder
28. maj 2007 - 12:30 #6
Hmm jeg skal vist bruge et kursus i at læse kode rigtig, drop lige min første besked.
Avatar billede nwn Nybegynder
28. maj 2007 - 12:31 #7
Hehe q:

Tror du at du kan hjælpe ?
Avatar billede dkfire Nybegynder
28. maj 2007 - 12:35 #8
Prøv at udskrive din $_POST['slet'] med print_r(), så kan du se om den virkelig indeholder det du forventer.
Avatar billede nwn Nybegynder
28. maj 2007 - 12:46 #9
Det kan jeg ikke, hvor skulle jeg placerer print_r($_POST['slet']);
Avatar billede dkfire Nybegynder
28. maj 2007 - 13:43 #10
Lige inden din foreach løkke.

Eller hvis du har brugt implode, lige inden denne.
Avatar billede dkfire Nybegynder
28. maj 2007 - 13:45 #11
Et eller andet siger mig at der er noget galt med din $_POST['slet'].
Hvordan kan din form se ud ??
Avatar billede nwn Nybegynder
28. maj 2007 - 14:06 #12
Ved at skrive: print_r($_POST['slet']); får jeg følgende resultat: 3

Min form: <form action=\"slet_besked.php\" method=\"post\" name=\"sletform\">

Jeg tror du har ret, burde action ikke være slet_besked.php?id=$row[id]
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:13 #13
Jo, og som du kan se så er $_POST['slet'] ikke et array som du havde håbet på.
Det er bare et tal.

Hvordan har du lavet dine checkboxes ??
Avatar billede nwn Nybegynder
28. maj 2007 - 14:15 #14
<input type='checkbox' name='slet' value='$row[id]'>

Jeg er virkelig glad for du hjælper, du aner ikke hvor mange dage jeg har siddet med dette (: !
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:18 #15
Se der har vi den første fejl :-)
For at dine checkboxes skal give et array i $_POST['slet'] skal du ændre lidt på dine navne.

<input type='checkbox' name='slet[]' value='$row[id]'>

sådan.
Avatar billede nwn Nybegynder
28. maj 2007 - 14:19 #16
Okay (:

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.
Avatar billede nwn Nybegynder
28. maj 2007 - 14:21 #17
Og nu når jeg sætter kryds i nogle checkbokse, og trykker slet valgte, så står der:

Array ( [0] => 5 [1] => 3 )

så det går vel fremad :D ?
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:21 #18
Det er helt fin
Avatar billede nwn Nybegynder
28. maj 2007 - 14:23 #19
Okay, hvad nu, den sletter stadig ikke beskederne ?
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:25 #20
hvad siger print_r() ??
Avatar billede nwn Nybegynder
28. maj 2007 - 14:29 #21
Array ( [0] => 5 [1] => 3 )
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:32 #22
Sådan, så har vi fået en array over.
Bruger du implode eller foreach lige nu ??
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:34 #23
Prøv at ændre lidt på din die():

die("Kunne ikke slette besked(erne)!<br /> Mysql errror: ".mysql_error());
Avatar billede nwn Nybegynder
28. maj 2007 - 14:38 #24
Siden er blank.. den udskriver ingen fejl meddelse. Koden:

<?php
session_start();

mysql_connect('localhost', 'xhero_dk', 'pass');
mysql_select_db("xhero_dk");

$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());
   
    return true;

echo "Beskeden/erne blev slettet";
  }
?>
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:45 #25
Hvis siden er blank har den nok slettet beskederne. :-)
Prøv med:

<?php
session_start();

mysql_connect('localhost', 'xhero_dk', 'pass');
mysql_select_db("xhero_dk");

$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());
     
      echo "Beskeden blev slettet";
}
?>
Avatar billede dkfire Nybegynder
28. maj 2007 - 14:46 #26
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());

Gik lige lidt hurtigt
Avatar billede nwn Nybegynder
28. maj 2007 - 17:35 #27
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

Men beskederne bliver ikke slettet ?
Avatar billede nwn Nybegynder
28. maj 2007 - 17:39 #28
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

Så der sgu stadig en fejl :b
Avatar billede dkfire Nybegynder
28. maj 2007 - 17:54 #29
Hmmm.
Hvordan kan du se at beskederne ikke bliver slettet ??

Prøv denne her:
<?php
session_start();

mysql_connect('localhost', 'xhero_dk', 'pass');
mysql_select_db("xhero_dk");

$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";
?>
Avatar billede dkfire Nybegynder
28. maj 2007 - 18:01 #30
Hvornår lærer jeg at lave det rigtigt første gang, he he
prøv denne her:
<?php
session_start();

mysql_connect('localhost', 'xhero_dk', 'pass');
mysql_select_db("xhero_dk");

$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";
?>
Avatar billede nwn Nybegynder
28. maj 2007 - 18:36 #31
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...
Avatar billede showsource Seniormester
28. maj 2007 - 18:45 #32
hvis du som dkfire tidligere skrev, bruger [] som navn på felt,
<input type='checkbox' name='slet[]' value='$row[id]'>

ville jeg gøre så'n: (ca.....)


<?php
session_start();

if(isset($_POST["slet"],$_SESSION["user"]) && is_array($_POST["slet"])) // Er user sat, og er post slet sat, og er post slet et array?
{

mysql_connect('localhost', 'xhero_dk', 'pass');
mysql_select_db("xhero_dk");

    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

}

?>
Avatar billede nwn Nybegynder
28. maj 2007 - 18:53 #33
Virker ikke. Siden er blank.
Avatar billede dkfire Nybegynder
28. maj 2007 - 19:03 #34
Kom med din kode.
Avatar billede dkfire Nybegynder
28. maj 2007 - 19:08 #35
Ligger din side hos one.com ??
Avatar billede showsource Seniormester
28. maj 2007 - 19:09 #36
Hvis flg. ikke er opfyldt i mit ex.

if(isset($_POST["slet"],$_SESSION["user"]) && is_array($_POST["slet"]))

så får du en blank side! :O)
Avatar billede nwn Nybegynder
28. maj 2007 - 19:16 #37
Ja, min side ligger hos one.com

<?php
session_start();

mysql_connect('localhost', 'xhero_dk', 'pass');
mysql_select_db("xhero_dk");

$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";
?>
Avatar billede nwn Nybegynder
28. maj 2007 - 19:18 #38
Sådan nu virker det. Jeg ændrede $modtager = $_SESSION["user"]; til $modtager = $_SESSION["data"];
Avatar billede nwn Nybegynder
28. maj 2007 - 19:23 #39
Vil du smide et svar dkfire (: ?
Avatar billede dkfire Nybegynder
28. maj 2007 - 19:50 #40
Det var godt det virkede.
Avatar billede nwn Nybegynder
28. maj 2007 - 19:57 #41
Jeg takker mange gange for hjælpen.

Jeg har også en andet spørgsmål, om at læse de modtagede beskeder, som heller ikke virker. Det er det sidste jeg mangler i mit postsystem q:

Hvis du er interesserede: http://www.eksperten.dk/spm/774987 (Men kun hvis du er intersserede)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester