mehmet: datensatz läst sich nicht löschen

hallo forum,
warum läst sich der angeklickte datensatz nicht löschen

hier mal zum testen

dank im voraus
und herzliche grüsse
mehmet

  
  
<html>  
<head><title></title></head>  
<body>  
  
<?  
// Die Datenbank-Tabelle "test_tab" hat folgende Felder:  
//Nr: int(11) auto_increment, primary  
//a1: varchar(50)  
//b1: varchar(50)  
//c1: varchar(50)  
//d1: varchar(50)  
//e1: varchar(50)  
  
include ('dbpass.php');  
  
// ms_sqlconnect verbindet mit der Datenbank  
@mysql_connect($dbhost, $dbuser, $dbpass);  
  
// Auswahl der Datenbank  
@$x=mysql_select_db($dbdata);  
if (empty($x)) {  
echo "Fehler beim Verbinden mit dem Datenbankserver<br>";  
exit;  
}  
  
if ( isset($nr)) {  
$sql = "DELETE FROM test_tab WHERE Nr=$nr;";  
$result = mysql_query($sql);  
if(!$result) {  
echo "fehler: ",mysql_error(),"<br>";  
}  
}  
  
// SQL-Statement zur Anzeige aller Datensaetze  
$sql = "SELECT * FROM test_tab;";  
$result = mysql_query($sql);  
if ($result) {  
  
// Tabellenfoermige Anzeige  
echo "<TABLE>\n";  
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {  
  
// Tabelle ausgeben  
echo "<tr>  
<td>",$row["a1"],"</td>  
<td>",$row["b1"],"</td>  
<td>";  
// Links erzeugen  
echo "<a href='auswahl-loeschen.php?nr=",$row[nr],"'>L&ouml;schen</a></td>";  
echo "</tr>";  
}  
echo "</TABLE>\n";  
}  
else  
echo "Fehler<br>";  
  
?>  
  
</body>  
</html>  
  
  

  1. Moin mehmet,

    $sql = "DELETE FROM test_tab WHERE Nr=$nr;";

    was macht denn das Semikolon hinter $nr?

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Hi Mike©,

      $sql = "DELETE FROM test_tab WHERE Nr=$nr;";

      was macht denn das Semikolon hinter $nr?

      Das dient eigentlich als Trenner mehrere SQL-Befehle, auch wenn mehrere SQL-Befehle hinterinander zumindest in der Standard-Konfiguration nicht interpretiert werden (aus Sicherheitsgründen).

      Das Problem ist, dass die Variable $nr nicht existiert - Mehmed, du hast sie nirgendwo definiert! Wenn du die Get-Variable $nr verwenden willst, greife auf $_GET['nr'] zu, den Grund dafür hat dir Juan schon gesagt.

      Weiterhin ist wichtig, dass du, Mehmed, noch mysql_real_escape_string() auf $_GET['nr'] anwendest, sonst kann dir nacher jemand beliebige Datensätze oder gar die ganze Datenbank löschen ;-)

      MfG, Dennis.

      1. echo $begrüßung;

        $sql = "DELETE FROM test_tab WHERE Nr=$nr;";

        Weiterhin ist wichtig, dass du, Mehmed, noch mysql_real_escape_string() auf $_GET['nr'] anwendest, sonst kann dir nacher jemand beliebige Datensätze oder gar die ganze Datenbank löschen ;-)

        Das Entschärfen mit mysql_real_escape_string() ist zwar prinzipiell angebracht, aber vorzugsweise bei Strings anzuwenden. In diesem Fall nützt es ihm nicht viel, wenn der Wert für den Nr-Vergleich nicht als Zeichenkette gekennzeichnet ist. Man kann nun entweder $nr testen, ob ein Integerwert enthalten ist, oder den Vergleichswert für Nr als String notieren: ("... WHERE Nr='$nr'").

        echo "$verabschiedung $name";

    2. hallo mike
      dank für dein feedback
      habe den ; weggemacht
      daran lag es wohl nicht
      obwohl du recht hast (stillistig)
      gruss
      mehmet

  2. Moin!

    Ich tippe mal, dass register_globals das Problem ist.

    Versuch in diesem Teil mal, statt $nr die richtige Variable $_GET['nr'] zu verwenden:

    if ( isset($nr)) {
    $sql = "DELETE FROM test_tab WHERE Nr=$nr;";
    $result = mysql_query($sql);

      
    MfG,  
      Juan
    
    1. hallo juan
      dank für deine rückmeldung
      nun bekomme ich folgende fehlermeldung

      fehler: 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 '' at line 1

      geändert habe ich folgendes

      ...

      if ( isset($_GET['nr'])) {
      $sql = "DELETE FROM test_tab WHERE Nr=$nr";
      $result = mysql_query($sql);
      if(!$result) {
      echo "fehler: ",mysql_error(),"<br>";
      }
      }
      ...

      gruss
      mehmet

      1. Hallo!

        Du hast also in der IF Abfrage $nr durch $_GET['nr'] ersetzt.
        In $sql="..." verwendest du es aber trotzdem noch. Warum?

        mfg
          frafu

        1. hallo frafu
          dank dir für den hinweis
          habe es korrigiert
          trotzdem ohne erfolg
          gruss
          mehmet

          1. Hallo!

            hallo frafu
            dank dir für den hinweis
            habe es korrigiert
            trotzdem ohne erfolg

            Ist die Fehlermeldung die gleiche?
            Gib mal das SQL Statement aus und schau was wirklich drinnen steht.

            mfg
              frafu

            1. hallo
              hier die meldung:

              Parse error: syntax error, unexpected T_VARIABLE in /is/htdocs/wp1039260_KHZRA42SRQ/www/www/ok/v1/auswahl-loeschen.php on line 28

              hier der code:

              ..
              var_dump(isset($_GET['nr']))       // statt if(isset($nr)); UND {entfernt
              $sql = "DELETE FROM test_tab WHERE nr=$_GET['nr']";  // ;entfernt
              $result = mysql_query($sql);
              if(!$result) {
              echo "fehler: ",mysql_error(),"<br>";
                        // }entfent
              }
              ..

              wobei zeile 28 diese ist:
              $sql = "....

              gruss
              mehmet

              1. hi,

                Parse error: syntax error, unexpected T_VARIABLE

                Von einem Syntaxfehler zum nächsten ... meinst du nicht, dass es sinnvoll wäre, wenn du dich erstmal mit den Grundlagen der Syntax beschäftigst?

                var_dump(isset($_GET['nr']))       // statt if(isset($nr)); UND {entfernt
                $sql = "DELETE FROM test_tab WHERE nr=$_GET['nr']";  // ;entfernt

                Am Ende der ersten Zeile fehlt was, weshalb die Variable $sql in der nächsten Zeile "unerwartet" auftaucht.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. hallo wahsaga,

                  Am Ende der ersten Zeile fehlt was, weshalb die Variable $sql in der nächsten Zeile "unerwartet" auftaucht.

                  was könnte fehlen?
                  ich habe alle klammern und semikolons überprüft!

                  gruss
                  mehmet

                  1. Hallo!

                    was könnte fehlen?
                    ich habe alle klammern und semikolons überprüft!

                    Überprüfe nicht nur vorhandene, sondern überprüfe auch auf nicht vorhandene! :-)

                    mfg
                      frafu

                    1. hi frafu

                      habe alles gecheckt!

                      das kann doch nicht so schwer sein!

                      das einlesen lesen eigendlich ganz gut
                      warum will das delete nicht funktionieren

                      sch...

                      ich lese seit tagen über php/mysql delete
                      überall steht das gleiche

                      ich habe auch das versucht ohne links mit direktem löschen
                      wie sollte es auch sein  -> ohne erfolg

                      $sql = "DELETE FROM test_tab WHERE 'a5';

                      gruss
                      mehmet

                      1. hi,

                        ich lese seit tagen über php/mysql delete
                        überall steht das gleiche

                        Na sowas.

                        ich habe auch das versucht ohne links mit direktem löschen
                        wie sollte es auch sein  -> ohne erfolg

                        $sql = "DELETE FROM test_tab WHERE 'a5';

                        Hältst du "Hey Kollege, schmeiß mal alle Stifte weg, wo grün!" für eine sinnvolle Anweisung?

                        Nein, du würdest deinem Kollegen sicher auch sagen, _was_ grün sein soll - "Hey Kollege, schmeiß mal alle Stifte weg, wo Farbe = grün!"

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. echo $begrüßung;

    warum läst sich der angeklickte datensatz nicht löschen

    @mysql_connect($dbhost, $dbuser, $dbpass);

    Dieser Befehl kann auch einen Fehlerstatus signalisieren. Ignoriere dies nicht, ansonsten bekommst du Folgefehler im weiteren Scriptverlauf.

    if ( isset($nr)) {

    Hast du mal geprüft, ob diese Bedingung erfüllt wird? Zum prüfen eignet sich am besten var_dump(). Als Argument übergibst du den zu prüfenden Ausdruck, also: var_dump(isset($nr));
    Prüfe erst einmal das, dann sehen wir weiter.

    $sql = "DELETE FROM test_tab WHERE Nr=$nr;";

    Als nächstes solltest du dir den generierten Befehl ansehen, indem du dir den Inhalt von $sql zur Kontrolle ausgeben lässt. Das abschließende ; ist nicht erforderlich. Außerdem ist es ein leichtes, statt der Nr etwas wie '0 or true' zu übergeben, was dann zu "DELETE FROM test_tab WHERE Nr=0 or true" führt und sicher nicht gewünscht ist. Prüfe übergebenen Parameter auf den von dir vorgesehenen Wertebereich. Bei Integerwerten bietet sich beispielsweise intval() an.

    echo "$verabschiedung $name";

    1. hallo ech $name";
      dank für deine nachrricht
      alles upgedatet
      allerding bekomme ich gehlermeldung

      Parse error: syntax error, unexpected '{' in /is/htdocs/wp1039260_KHZRA42SRQ/www/www/ok/v1/auswahl-loeschen.php on line 27

      geändert habe ich folgendes

      ..

      include ('dbpass.php');

      // ms_sqlconnect verbindet mit der Datenbank
      @mysql_connect($dbhost, $dbuser, $dbpass);
      if (!@mysql_connect) die ("Keine Verbindung zu MySQL");  // FEHLERMELDUNG

      // Auswahl der Datenbank
      @$x=mysql_select_db($dbdata);
      if (empty($x)) {
      echo "Fehler beim Verbinden mit dem Datenbankserver<br>";
      exit;
      }

      var_dump( isset($_GET['nr'])) {      // statt if    var_dump(isset($nr));
      $sql = "DELETE FROM test_tab WHERE Nr=$nr";    // ; entfernt
      $result = mysql_query($sql);
      if(!$result) {
      echo "fehler: ",mysql_error(),"<br>";
      }
      }
      ..

      gruss
      mehmet

      1. hi,

        alles upgedatet
        allerding bekomme ich gehlermeldung

        Also simple parse errors solltest du schon selber finden können ...!

        Parse error: syntax error, unexpected '{'

        var_dump( isset($_GET['nr'])) {      // statt if    var_dump(isset

        Was will die { denn da ...?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. echo $begrüßung;

        alles upgedatet
        allerding bekomme ich gehlermeldung

        Parse error: syntax error, unexpected '{' in /is/htdocs/wp1039260_KHZRA42SRQ/www/www/ok/v1/auswahl-loeschen.php on line 27

        // ms_sqlconnect verbindet mit der Datenbank
        @mysql_connect($dbhost, $dbuser, $dbpass);
        if (!@mysql_connect) die ("Keine Verbindung zu MySQL");  // FEHLERMELDUNG

        Schau dir bitte einmal an, wie eine Datenbankabfrage prinzipiell aussehen kann: http://de.php.net/manual/en/ref.mysql.php. So wie du das machst ist es nicht richtig.

        var_dump( isset($_GET['nr'])) {      // statt if    var_dump(isset($nr));

        Wenn dir jemand einen Tipp gibt, irgendwelche Funktionen zu verwenden, lies bitte erst nach, was diese Funktion macht und wie sie zu verwenden ist.

        var_dump() ist eine Funktion, die man zum Fehlersuchen einfügt. Man kann sich damit Inhalt und Typ einer Variablen oder Ergebnis und Typ eines Ausdrucks anzeigen lassen. Man fügt es zusätzlich ein. Nach Anzeige des gewünschten Ergebnisses kann man die var_dump()-Zeile wieder entfernen.
        In deinem Fall wäre es vor dem if einzufügen, danach hätte es keinen gesteigerten Sinn, da ja die zu prüfende Bedingung nicht unbedingt erfüllt sein muss.

        echo "$verabschiedung $name";

        1. hallo echo $name";
          ok, werde es rückgängig machen
          gruss
          mehmet