Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler finden

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • spacedone
    hat ein Thema erstellt Fehler finden.

    Fehler finden

    Ok, ich habe hier noch ein Problem an die Ehrfahreneren unter uns

    PHP gibt hier keine Fehlermeldung raus, sond löscht die Daten einfach nicht .. Wie könnte ich das anders machen, oder was muss ich anders machen damit dieses Programm funktioniert :

    <?php
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', '');
    define('MYSQL_DB', 'test');

    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) OR die("Fehler: ".mysql_error());
    mysql_select_db(MYSQL_DB) OR die("Fehler: ".mysql_error());

    $anzahl = 1;
    $alles = "SELECT ID, Name, Alteer, Hobby, Beruf FROM auslesen";
    $weiter = mysql_query($alles);

    echo "<form action=schmeiss.php method=post>";

    echo "<table border=2><tr><td><b> Nr. </b></td><td><b> Name </b></td><td><b> Alter </b></td><td><b> Hobby </b></td><td><b> Beruf </b></td><td><b>löschen</b></td></tr>";

    while($fertig = mysql_fetch_assoc($weiter))
    {
    $id = $fertig['ID'];
    echo "<tr><td>&nbsp;";
    echo $anzahl;
    echo "&nbsp;</td><td>&nbsp;";
    echo $fertig['Name'];
    echo "&nbsp;</td><td>&nbsp;";
    echo $fertig['Alteer'];
    echo "&nbsp;</td><td>&nbsp;";
    echo $fertig['Hobby'];
    echo "&nbsp;</td><td>&nbsp;";
    echo $fertig['Beruf'];
    echo "&nbsp;</td><td>&nbsp;";
    echo "<input type=checkbox name=$id>";
    echo "&nbsp;</td></tr>&nbsp;";

    $anzahl++;
    }

    echo "</table>";

    echo "<input type=submit value='entgültig löschen'>";
    echo "</form>";

    echo "<a href=start.html>Zurück zum Formular</a>";



    ?>
    Das ist die Auswahl

    <?php
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', '');
    define('MYSQL_DB', 'test');

    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) OR die("Fehler: ".mysql_error());
    mysql_select_db(MYSQL_DB) OR die("Fehler: ".mysql_error());


    $löschen = "DELETE FROM auslesen WHERE ID = $_POST[$id]";

    mysql_query($löschen);

    echo "<p align=center>";
    echo "Datensätze gelöscht!<br>";
    echo "<a href=start.html>Zurück zum Formular</a>";

    ?>
    Und hier sollte es gelöscht werden .. Er führt alles aus ind ich habs auch schon mit get probiert, er schickt die Daten .. DAher vermute ich mal so, das der FEhler in schmeiss.php, dem zweiten liegt vermutlich bei $löschen weil mit $_POST[] keine variabe empfangen werden kann oder so ... ICh hab aber keine Ahnung, deswegen frag ich euch

    Danke Spacedone

  • fragnicht
    antwortet
    //EDIT
    SRY aber ...
    Ähm wo is der löschen knopf?

    Einen Kommentar schreiben:


  • spacedone
    antwortet
    Ok, danke. Jetzt funktioniert es!!

    Einen Kommentar schreiben:


  • Nendrew
    antwortet
    Und wo liegt das problem?
    Vielleicht ist die id des besagten Eintrags ja 15???

    Edit:
    Hast du die Zeile komplett übernommen so wie ich sie geschrieben habe, oder hast du nur die beiden punkte hinzugefügt?
    Bei mir ist es: "'.$id.'" man achte auf die Hochkomma.

    Einen Kommentar schreiben:


  • spacedone
    antwortet
    WEnn ich das mit .%id. schreibe kommt da aber z.B. als Ergebniss .15. ...

    Einen Kommentar schreiben:


  • Nendrew
    antwortet
    Ups...
    sollte natürlich so lauten:
    PHP-Code:
    echo '<input type="checkbox" name="id[]" value="'.$id.'" />'
    @agrajag:
    Da hast du natürlich recht. is_numeric() (PHP: is_numeric - Manual) ist hier die Funktion...

    Einen Kommentar schreiben:


  • spacedone
    antwortet
    Hab das mal genau so abgeschrieben und krieg dann die Fehlermeldung :

    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\schmeiss.php on line 13

    Einen Kommentar schreiben:


  • agrajag
    antwortet
    Zitat von Nendrew Beitrag anzeigen
    PHP-Code:
    <?php
            $weg 
    "DELETE FROM auslesen WHERE ID = " .mysql_real_escape_string($c_id);
            echo 
    $weg ."<br>";
            
    mysql_query($weg) OR die(mysql_error());
    ?>
    Hoffe du kommst damit klar.

    P.S.: Die funktion mysql_real_escape_string soll verhindern, dass du Opfer einer MySQL Injection wirst.
    Bringt aber so überhauptnichts. Ich kann jetzt trotzdem noch $c_id = "5 OR 1=1" setzen und du fängst das nicht ab.

    Sinnvoller wäre es an der stelle einfach für $c_id sicherzustellen, dass sie nur einen Integer enthalten kann bspw. indem du $c_id nach int castest: $c_id = (int) $c_id;...

    Einen Kommentar schreiben:


  • Nendrew
    antwortet
    Deine schmeiss.php so wie sie jetzt da steht, funktioniert nur, wenn nur eine checkbox aktiviert ist.
    Andererseits muss wie gesagt ein Array durchlaufen werden:
    PHP-Code:
     <?php
        define
    ('MYSQL_HOST''localhost');
        
    define('MYSQL_USER''root');
        
    define('MYSQL_PASS''');
        
    define('MYSQL_DB',   'test');

        
    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) OR die("Fehler: ".mysql_error());
        
    mysql_select_db(MYSQL_DB) OR die("Fehler: ".mysql_error());
        
        
        foreach(
    $_POST['id'] as $c_id) {
            
    $weg "DELETE FROM auslesen WHERE ID = " .mysql_real_escape_string($c_id);
            echo 
    $weg ."<br>";
            
    mysql_query($weg) OR die(mysql_error());
        }
            
        echo 
    "<p align=center>";
        echo 
    "Datensätze gelöscht!<br>"
        echo 
    "<a href=start.html>Zurück zum Formular</a>";

    ?>
    Hoffe du kommst damit klar.

    P.S.: Die funktion mysql_real_escape_string soll verhindern, dass du Opfer einer MySQL Injection wirst.

    Einen Kommentar schreiben:


  • spacedone
    antwortet
    Und iwe würdest du dir dann den Array vorstellen, dem man die $_POST variable laufen lassen müsste

    Einen Kommentar schreiben:


  • spacedone
    antwortet
    DANKE!!! ES HAT GEKLAPPT!!

    Hier noch ein mal den ganzen Queltext wei es richtig war :

    schmeiss.php :
    PHP-Code:
    <?php
        define
    ('MYSQL_HOST''localhost');
        
    define('MYSQL_USER''root');
        
    define('MYSQL_PASS''');
        
    define('MYSQL_DB',   'test');

        
    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) OR die("Fehler: ".mysql_error());
        
    mysql_select_db(MYSQL_DB) OR die("Fehler: ".mysql_error());
        
        
        
    $weg "DELETE FROM auslesen WHERE ID = " .$_POST['id'];

        echo 
    $weg ."<br>";

        
    mysql_query($weg) OR die(mysql_error());
            
        echo 
    "<p align=center>";
        echo 
    "Datensätze gelöscht!<br>"
        echo 
    "<a href=start.html>Zurück zum Formular</a>";

    ?>
    weg.php :
    PHP-Code:
    <?php
        define
    ('MYSQL_HOST''localhost');
        
    define('MYSQL_USER''root');
        
    define('MYSQL_PASS''');
        
    define('MYSQL_DB',   'test');

        
    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) OR die("Fehler: ".mysql_error());
        
    mysql_select_db(MYSQL_DB) OR die("Fehler: ".mysql_error());
        
        
    $anzahl 1;
        
    $alles "SELECT ID, Name, Alteer, Hobby, Beruf FROM auslesen";
        
    $weiter mysql_query($alles);
        
        echo 
    "<form action=schmeiss.php method=post>";    

        echo 
    "<table border=2><tr><td><b> Nr. </b></td><td><b> Name </b></td><td><b> Alter </b></td><td><b> Hobby </b></td><td><b> Beruf </b></td><td><b>löschen</b></td></tr>";

        while(
    $fertig mysql_fetch_assoc($weiter))
        {
            
    $id $fertig['ID'];
            echo 
    "<tr><td>&nbsp;";
            echo 
    $anzahl;
            echo 
    "&nbsp;</td><td>&nbsp;";
            echo 
    $fertig['Name'];
            echo 
    "&nbsp;</td><td>&nbsp;";
            echo 
    $fertig['Alteer'];
            echo 
    "&nbsp;</td><td>&nbsp;";
            echo 
    $fertig['Hobby'];
            echo 
    "&nbsp;</td><td>&nbsp;";
            echo 
    $fertig['Beruf'];
            echo 
    "&nbsp;</td><td>&nbsp;";
            echo 
    "<input type=checkbox name=id value='$id'>";
            echo 
    "&nbsp;</td></tr>&nbsp;";
            
            
    $anzahl++;
        }
        
        echo 
    "</table>";
        
        echo 
    "<input type=submit value='entgültig löschen'>";
        echo 
    "</form>";

        echo 
    "<a href=start.html>Zurück zum Formular</a>";

        
        
    ?>
    Noch mal danke!

    Einen Kommentar schreiben:


  • Nendrew
    antwortet
    Ich denke mal es liegt daran, dass du die ID gar nicht zu schmeiss.php übergibst.
    Ich schätze mal du versuchst die id über die Checkboxen zu übergeben.
    Dein Versuch sieht so aus:
    echo "<input type=checkbox name=$id>";
    Allerdings funktioniert das so nicht...
    Die Checkboxen müssen alle den selben namen aber unterschiedliche values haben.
    Das sieht dann so aus:
    PHP-Code:
    echo '<input type="checkbox" name="id" value="'.$id.'" />'
    Dann ist $_POST['id'] in der schmeiss.php ein Array über alle ids die angeklickt wurden.
    Darüber musst du dann eine Schleife laufen lassen und jeweils den entsprechenden query ausführen.

    Einen Kommentar schreiben:


  • spacedone
    antwortet
    die ID ist auto Increment warum sollte sie dann 5 OR 1=1 enthalten ???

    Na ja, wenn cih jetzt mein $weg auslese kommt da :

    DELETE FROM auslesen WHERE ID =
    Demnach bekommt er die Variable gar nicht erst oder versteht nich was er da bekommen soll .. Wie gesagt $_POST['id'] klappt auch nicht Noch andere Ratschläge Ich weiss nicht weiter

    Einen Kommentar schreiben:


  • Toxo
    antwortet
    Code:
    <?php
        define('MYSQL_HOST', 'localhost');
        define('MYSQL_USER', 'root');
        define('MYSQL_PASS', '');
        define('MYSQL_DB',   'test');
    
        mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS) OR die("Fehler: ".mysql_error());
        mysql_select_db(MYSQL_DB) OR die("Fehler: ".mysql_error());
        
        
        $loeschen = "DELETE FROM auslesen WHERE ID = ".$_POST[$id];
    mysql_query($loeschen) or die(mysql_error());  
        mysql_query($löschen);
            
        echo "<p align=center>";
        echo "Datensätze gelöscht!<br>"; 
        echo "<a href=start.html>Zurück zum Formular</a>";
    ?>
    Ist die Postvariable richtig gesetzt ?
    Die $_POST[] Variable nicht direkt in den query-string schreiben.
    Ausserdem ist in deinem beispiel die Variable $id gar nicht gesetzt, d.h. es wird vresucht auf $_POST[''] zuzugreifen und der query lautet demnach

    "DELETE FROM auslesen WHERE ID = "

    Wäre $id z.B. 5 würde auf $_POST[5] zugegriffen. willst du auf die POST-variable Namens "id" zugreifen, sollte es

    .$_POST['id'];

    heissen

    ausserdem würde ich nicht die $_POST variable einfach so an meine Datenbank lassen, denn die "id" Variable könnte einen Inhalt wie "5 OR 1=1" enthalten, womit dein query so aussieht:

    "DELETE FROM auslesen WHERE ID = 5 OR 1=1"

    Einen Kommentar schreiben:


  • Nendrew
    antwortet
    Dann mach doch mal ein echo $loeschen, damit du siehst, wie dein query aussieht. Daran solltest du ziemlich schnell erkennen, wo der Fehler liegt.

    Einen Kommentar schreiben:

Lädt...
X