Cooky: Delete befehl mit inputfield eingabe !!!

Hallo an alle,

habe kürzlich eine Mitarbeiter Datenbank angelegt mit apache (phpmyadmin). Also Name, Adresse, Telefonnummer usw. ... .
Für jeden Mitarbeiter (Datensatz) wird eine mitarbeiterID angelegt (auto increment), die zugleich primary key ist.

Nun habe ich mit PHP eine seite gebastelt mit der ich tabellarisch alle Mitarbeiter ausgeben kann. --> Funktioniert.

Jetzt möchte ich aber über eine weitere Seite einen Mitarbeiter auch löschen können. Und zwar soll es so funktionieren dass man in ein Texteingabefeld die mitarbeiterID eingibt, dann auf den Button löschen klickt und dadurch der Datensatz gelöscht wird wo die mitarbeiterID mit der Eingabe übereinstimmt.

Mein Ansatz:

if ($_GET['action'] == "mdel") {
  if($_GET['mloe'] =="") {

$sql = "DELETE FROM links [WHERE mitarbeiterID ="$_GET[mloe]" ";
      mysql_query($sql);
    }
  }

?>

<form method="POST" action="start.php?action=mdel&id=loeschen">

<table border="0">

<tr>
<td><font color="#ffffff">Mitarbeiter ID:</font></td>
<td><input size="10" type="text" name="mloe"/></td>
</tr>
<tr>
<td valign="middle"><br><input title="Absenden" width="75" type="sUBMIT"  name="Submit" value="L&ouml;schen" class="inputfields"/></td><td><br><input type="reset" value="Zur&uuml;cksetzen" name="reset" class="inputfields"></td></tr>
<tr><td height="15px"></td><tr>
</table>
</form>

Könnte hierbei echt Hilfe gebrauchen ... ist ziehmlich dringend. Danke!!!

Cooky

  1. Hallo Cooky,
    es wäre vieleicht ganz hilfreich wenn du dein Problem beschreiben würdest. Was geht denn nicht bzw. wie weit kommt denn dein Script ehe etwas unerwartetes passiert?

    Ein paar Dinge sind mir jedoch schon aufgefallen:
    1. Die Query wird nur ausgeführt wenn $_GET['mloe']== "" aber in dem Where Teil deiner Querry wird festgelegt das alle einträge in denen mitarbeiterID gleich $_GET['mloe'] ist gelöscht werden sollen!

    2. Im WHERE Teil der Abfrage fehlen in der Variablen $_GET[mloe] die Hochkommas

    3. Wird eine Verbindung mit der Datenbank aufgebaut?

    4. In deinem <form> Tag legst du als Übertragungsmethode POST fest. Du "schaust" jedoch in das $_GET Array um deine Daten zu finden. Ich denke das $_POST Array sollte dir hier bei der suche helfen.

    Viele Grüße,
    Ska4ever

    1. Hallo Ska4ever,

      vielen Dank für die schnell Antwort.

      Also mein script funktioniert soweit ohne Fehler, dass einzige ist dass die Datensätze nicht gelöscht werden.

      Ich gebe in das Eingabefeld mit dem name="mloe" die mitarbeiterID ein z.B. 5.

      Und ich verstehe meinen Where- Teil so, dass er die tabelle links durchsucht, und den Datensatz löscht bei dem die mitarbeiterID gleich der Eingabe in mloe ist.

      Gruß

      Cooky

      1. Also mein script funktioniert soweit ohne Fehler, dass einzige ist dass die Datensätze nicht gelöscht werden.

        Ich gebe in das Eingabefeld mit dem name="mloe" die mitarbeiterID ein z.B. 5.

        Und ich verstehe meinen Where- Teil so, dass er die tabelle links durchsucht, und den Datensatz löscht bei dem die mitarbeiterID gleich der Eingabe in mloe ist.

        du schreibst:
        if ($_GET['action'] == "mdel")
        {
          if($_GET['mloe'] =="")
          {
              $sql = "DELETE FROM links [WHERE mitarbeiterID ="$_GET[mloe]" ";
              mysql_query($sql);
          }
        }

        $_GET['mloe'] =="" liefert aber false zurueck, wenn du eine 5 eingibst. das heisst der if-teil wird nie ausgefuehrt. du musst schreiben $_GET['mloe'] !="" (weiss nicht genau ob != ungleich ist).
        du kannst ja mit einem echo-Befehl dann mal ueberpruefen, welche passagen durchlaufen werden und welche nicht. Kann auch sein, dass $_GET['mloe'] =="" schon false zurueckgibt, wenn du das Forumular mit post abschickst.

        mfG,
        steckl

        1. Also ich hab jetzt die Abfrage in $_GET['mloe'] != ""; geändert dass ist natürlich richtig. Ich habe auch bei der form die action auf GET geändert. Trotzdem funktioniert dass ganze nicht.

          Cooky

          1. Also ich hab jetzt die Abfrage in $_GET['mloe'] != ""; geändert dass ist natürlich richtig. Ich habe auch bei der form die action auf GET geändert. Trotzdem funktioniert dass ganze nicht.

            Hast auch die beiden input type="hidden" eingebaut, wie in meinem Post weiter oben? ansonsten kommt hier wohl bei mloe und action nix an.

            Nochmal mein tipp: lass dir ausgeben, was in den einzelnen Variablen steht (mit echo).

            1. Danke Danke Danke .....

              hahaha es geht es geht es geht ..... :P

              Das mit dem form method="GET" war richtig und alle anderen sachen auch.

              Aber der letzt kleine fehler lag am doofen kleinen [ vor dem where .....

              So kanns laufen ...
              Hundert mal hinschauen und trotzdem keinen Fehler entdecken ...

              Tausend Dank.....

              Viele Grüße (vielleicht bis zum nächsten Probl. :-)

              Cooky

              1. echo $begrüßung;

                Hundert mal hinschauen und trotzdem keinen Fehler entdecken ...

                Wenn du auch darauf verzichtest, Fehlermeldungen auszugeben, musst du dich nicht wundern, wenn du die dazugehörigen Fehler nicht findest.

                Da wäre als erstes, sämtliche PHP-Fehlermeldungen auszugeben. Dazu setzt man das error_reporting auf E_ALL, und display_errors auf einen Wert ungleich 0. Das E_ALL sogt dafür, dass bei Zugriffen auf nicht vorhandene Variablen eine Meldung ausgegeben wird. Damit tritt der "POST senden aber GET abfragen"-Fehler zu Tage.

                Die mysql_*-Funktionen liefern ein Ergebnis zurück, das entweder eine Ressource für nachfolgende mysql_*-Funktionen benötigt wird oder einen Fehlerstatus anzeigt. Werte dieses Ergebnis aus. Nähere Informationen über diesen Rückgabewert liefert die jeweilige Handbuchseite. Im Allgemeinen ist auch noch ein Meldungstext mit mysql_error() abrufbar.

                Es ist keine Seltenheit, dass ein Programm etwas anderes macht als man sich so gedacht hatte. Inhalte von Variablen abzufragen, und die Ergebnisse der verwendeten Ausdrücke anzeigen zu lassen, hilft, solchen Fehlern auf die Spur zu kommen. Hilfsmittel sind neben echo und print() Funktionen wie var_dump() und print_r().

                echo "$verabschiedung $name";

          2. Hallo,

            deine Abfrage sieht in meinen Augen auch noch nicht ganz korrekt aus.

            $sql = "DELETE FROM links [WHERE mitarbeiterID ="$_GET[mloe]" ";

            Wofür ist die öffnende eckige Klammer da? Die kann eigentlich gelöscht werden. Wenn das alles nichts hilft kannst du die Abfrage auch mal ausgeben lassen ("echo $sql") und die Ausgabe in den Abfrageeditor des phpMyAdmins kopieren und ausführen. PhpMyAdmin gibt meist einen konkreten Fehlertext aus wenn etwas nicht stimmt.

            Viele Grüße,
            Ska4ever

  2. hi,

    Nun habe ich mit PHP eine seite gebastelt mit der ich tabellarisch alle Mitarbeiter ausgeben kann. --> Funktioniert.

    Mein Ansatz:

    if ($_GET['action'] == "mdel") {
      if($_GET['mloe'] =="") {

    sollte hier nicht ungleich "" stehen?

    $sql = "DELETE FROM links [WHERE mitarbeiterID ="$_GET[mloe]" ";
          mysql_query($sql);

    kann sein, dass das so funktioniert, aber du brauchst wohl irgendwo noch ein DB-Handle

    }
      }

    ?>

    hier verwendest du $_GET, aber im Forumlar steht method="POST". Denke nicht, dass das so funktionieren kann.

    <form method="POST" action="start.php?action=mdel&id=loeschen">

    mach daraus:
    <form method="GET" action="start.php?action=mdel&id=loeschen">
    <input type="hidden" name="action" value="mdel">
    <input type="hidden" name="id" value="loeschen">

    <table border="0">

    <tr>
    <td><font color="#ffffff">Mitarbeiter ID:</font></td>
    <td><input size="10" type="text" name="mloe"/></td>
    </tr>
    <tr>
    <td valign="middle"><br><input title="Absenden" width="75" type="sUBMIT"  name="Submit" value="L&ouml;schen" class="inputfields"/></td><td><br><input type="reset" value="Zur&uuml;cksetzen" name="reset" class="inputfields"></td></tr>
    <tr><td height="15px"></td><tr>
    </table>
    </form>

    Könnte hierbei echt Hilfe gebrauchen ... ist ziehmlich dringend. Danke!!!

    viel mehr kann ich dir leider auch nicht weiterhelfen, da ich mich mit PHP zu wenig auskenne.

    mfG,
    steckl