bjb: liste und einträge löschen

hallo zusammen
ich hab ein kleines problem
ich hab mir ein gästebuch gemacht und jetzt würde ich gerne ein "admin-tool" machen und zwar in form einer php-seite
das sollte so aussehen: alle einträge werden aufgelistet und neben jedem ist eine checkbox und am ende ein button mit dem alle markierten einträge gelöscht werden
das sieht bei mir dann so aus (nur der betroffene teil)

...
echo" <form action="admin.php" method="post" target=""> ";
if(!empty($daten)){
  $i=0;
  while ($zeile = mysql_fetch_array($daten)){
    $i++ ;
    echo"
      <table width= "100%">
        <tr>
          <td width="5%"><input type="Checkbox" name="chckbx" value="".$i.""></td>
          <td width="20%"><nobr>".$zeile['autor']."</nobr></td>
          <td width="20%"><nobr>".$zeile['datum']."</nobr></td>
          <td width="55%"><nobr>".$zeile['inhalt']."</nobr></td>
        </tr>
      </table>";
    $chckbx=$_POST['chckbx'];
    if($chckbx==true){
      mysql_query("DELETE * FROM ".$table."WHERE datum=".$zeile['datum']."AND autor=".$zeile['autor']."AND inhalt=".$zeile['inhalt']."LIMIT 1");
    }
  }
  echo"<br><br><br><input type="Submit" name="loesch" value="Markierte Einträge löschen"><br><br><br>";}
...

sieht jemand was da falsch ist bzw fehlt?
danke und frohe ostern
              bjb

  1. Hallo,
    Welche Fehlermeldung kommt?
    Kannst Du die betroffene Zeile kennzeichnen?
    Würde die Sache ziemlich erleichtern.
    Viel grüße tom

    1. Hallo,
      Welche Fehlermeldung kommt?
      Kannst Du die betroffene Zeile kennzeichnen?
      Würde die Sache ziemlich erleichtern.
      Viel grüße tom

      hi thx für die schnelle antwort

      fehlermeldung:keine

      wenn ich hinter dem
      ...if($chckbx==true){
      noch ein echo"abc"; einfügesteht neben jeder(!!) checkbox abc aber gelöscht wird keine

      könnte es sein dass es nur ein algemeines $chckbx gibt??
      ich probiers mal mit nem array
      ($chckbx[$i]= $_POST['chckbx'];)

      meinst du das geht

      thx und tschüss
                   bjb

      1. könnte es sein dass es nur ein algemeines $chckbx gibt??
        ich probiers mal mit nem array
        ($chckbx[$i]= $_POST['chckbx'];)

        hi
        geht auch nicht
        wieder überall abc und keins gelöscht
        bye

        1. Jo den mal,
          Grundsätzlich willst Du ja löschen wenn Du Submit drückst, und nicht nur dann wenn eine Variable vorhanden ist.

          Dann probiere dass mal!
          Dann bau mal eine Fehlerabfrage ein!
          Gucke doch erst mal welche Variablen überhaupt vorhanden sind, dann kann man mal gucken wo der Fehler liegt.

          1. Jo den mal,
            Grundsätzlich willst Du ja löschen wenn Du Submit drückst, und nicht nur dann wenn eine Variable vorhanden ist.

            Dann probiere dass mal!
            Dann bau mal eine Fehlerabfrage ein!
            Gucke doch erst mal welche Variablen überhaupt vorhanden sind, dann kann man mal gucken wo der Fehler liegt.

            ich glaub das ist nicht das problem
            das mit den variablen funktioniert jetzt glaub ich
            das DELETE... -teil ist mein problem

            thx&bye           bjb

            1. Richtig:
              Hallo
              Bei mir ist der DELETE so definiert:
              DELETE FROM "Tabellenname" WHERE Spaltenenmae=inhalt

              Und im günstigsten Fall nimmst du den Primärschlüssel also Datensatznummer zur identifizierung (Also "Inhalt"=Primärschlüssel) und vergleichst nicht 100 Informationen.
              Der Primaärschlüssel sollte denn auch möglichst ne zahl sein.
              Hoffe es hilft!

        2. hi nochmal
           so funktioniert jetzt das echo"abc";  :
           ...
           <td width="5%"><input type="Checkbox" name="chckbx".$i."" value="".$i.""></td>
                    <td width="20%"><nobr>".$zeile['autor']."</nobr></td>
                    <td width="20%"><nobr>".$zeile['datum']."</nobr></td>
                    <td width="55%"><nobr>".$zeile['inhalt']."</nobr></td>
                  </tr>
                </table>";
              $chckbx[$i]=$_POST['chckbx'.$i];
              if($chckbx[$i]==true)
          das mit dem löschen geht aber immer noch nicht

          ist da ein fehler drin?
          (...  mysql_query("DELETE * FROM ".$table."WHERE datum=".$zeile['datum']."AND autor=".$zeile['autor']."AND inhalt=".$zeile['inhalt']."LIMIT 1");...)

          danke und tschüss
                   bjb

          1. Hallo
            Bei mir ist der DELETE so definiert:
            DELETE FROM "Tabellenname" WHERE Spaltenenmae=inhalt

            Und im günstigsten Fall nimmst du den Primärschlüssel zur identifizierung (Also "Inhalt"=Primärschlüssel) und vergleichst nicht 100 Informationen.
            Der Primaärschlüssel sollte denn auch möglichst ne zahl sein.
            Hoffe es hilft!

            1. Hallo
              Bei mir ist der DELETE so definiert:
              DELETE FROM "Tabellenname" WHERE Spaltenenmae=inhalt

              Und im günstigsten Fall nimmst du den Primärschlüssel zur identifizierung (Also "Inhalt"=Primärschlüssel) und vergleichst nicht 100 Informationen.
              Der Primaärschlüssel sollte denn auch möglichst ne zahl sein.
              Hoffe es hilft!

              so siehts bei mir aus:
              "DELETE FROM ".$table." WHERE datum=".$zeile['datum']." AND autor=".$zeile['autor']." AND inhalt=".$zeile['inhalt']." LIMIT 1"

              ich habs halt versäumt eine id-spalte einzufügen :-(
              deshalb vergleiche ich jetzt drei spalten um verwechslungen auszuschliesen (dürfte doch eigentlich kein problem sein oder?

              1. Hallo
                Bei mir ist der DELETE so definiert:
                DELETE FROM "Tabellenname" WHERE Spaltenenmae=inhalt

                Und im günstigsten Fall nimmst du den Primärschlüssel zur identifizierung (Also "Inhalt"=Primärschlüssel) und vergleichst nicht 100 Informationen.
                Der Primaärschlüssel sollte denn auch möglichst ne zahl sein.
                Hoffe es hilft!

                so siehts bei mir aus:
                "DELETE FROM ".$table." WHERE datum=".$zeile['datum']." AND autor=".$zeile['autor']." AND inhalt=".$zeile['inhalt']." LIMIT 1"

                ich habs halt versäumt eine id-spalte einzufügen :-(
                deshalb vergleiche ich jetzt drei spalten um verwechslungen auszuschliesen (dürfte doch eigentlich kein problem sein oder?

                Doch du brauchst doch einen Primärschlüssel?!!

                1. Doch du brauchst doch einen Primärschlüssel?!!

                  sicher?
                  warum?

                  1. klar sicher!
                    Jeder Datensatz in einer Tabelle muß eindeutig zu identifizieren sein!
                    Zur Einführung empfehle ich Dir das Tutorial auf http://ffm.junetz.de/members/reeg/

                    Na dann mal viel Spaß!

                    1. ok jetzt gehts
                      allerdings kann nicht alle zeilen löschen
                      wenn nur noch eine zeile übrig ist kann ich diese nicht löschen
                      woran könnte das liegen?
                      thx
                            bjb

                      1. Wenn Dein Limit 1 noch steht dann daran!

                        1. Wenn Dein Limit 1 noch steht dann daran!

                          habs weggemacht aber es geht immer noch nicht

                        2. Wenn Dein Limit 1 noch steht dann daran!

                          steht nicht mehr aber es geht trotzdem nicht
                          noch ne idee??
                          btw: TomIRL oder TomIRI??:-)
                          bye   bjb

  2. Hallo bjb,

    if(!empty($daten)){

    ich nehme mal an, $daten ist das Ergebnis von mysql_query(), richtig? dann dürfte es imho etwas sinnlos sein auf empty zu prüfen, sinnvoller wäre if(mysql_num_rows()!=0)[1] (ich gehe mal davon aus, das in mysql_query() irgendwas mit SELECT... drinsteht)

    echo"
          <table width= "100%">

    du tust dir einfacher, wenn du den php-Bereich vorher schließst, oder den Heredoc Syntax[2] verwendest.

    <td width="5%"><input type="Checkbox" name="chckbx" value="".$i.""></td>

    was bringt es wenn du einen willkürliche Zahl als Wert der checkbox mitlieferst? so ist es nicht eindeutig, welcher Datensatz gelöscht werden soll. am sinnvollsten wäre es, wenn du zum erkennen des Datensatzes eine eindeutige id nimmst (wenn es die Spalte noch nicht gibt, kannst du sie ja noch anlegen).

    <td width="20%"><nobr>".$zeile['autor']."</nobr></td>

    <nobr> gibt es im html-Standard nicht. (du brauchst css - white-space:nowrap;[3] sollte helfen)

    $chckbx=$_POST['chckbx'];

    du bekommst nur eine Nummer, geliefert, auch wenn du mehrere Checkboxen "ankreuzt" - hierzu dürfte dich [4] interressieren.

    if($chckbx==true){

    mhh... wohl eher if(!empty($chckbx))

    mysql_query("DELETE * FROM ".$table."WHERE datum=".$zeile['datum']."AND autor=".$zeile['autor']."AND inhalt=".$zeile['inhalt']."LIMIT 1");

    mhh... wo kommt $zeile['datum'] usw. her?
    Außerdem solltest du dir den Query ausgeben lassen, um zu sehen, was da eigentlich drinsteht (da fehlen einige Leer- und Anführungszeichen)

    Grüße aus Nürnberg
    Tobias

    [1] http://www.php.net/manual/de/function.mysql-num-rows.php
    [2] http://www.php.net/manual/de/language.types.string.php#language.types.string.syntax.heredoc
    [3] http://selfhtml.teamone.de/css/eigenschaften/ausrichtung.htm#white_space
    [4] http://aktuell.de.selfhtml.org/tippstricks/php/checkboxen/index.htm

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|