Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL Abfrage mit HTML-Auswahlliste als Parameter

Einklappen

Neue Werbung 2019

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

  • [Erledigt] SQL Abfrage mit HTML-Auswahlliste als Parameter

    Hallo,

    Habe ein problem mit folgendem code, welcher bei mir als produkte.php abgespeichert ist. Beim aufruf des skripts werden die nummern der datensätze in der html-auswahlliste angezeigt. Wenn man eine nummer auswählt und dann auf produkt loeschen klickt, wird aber nichts in der datenbank gelöscht und die nummer verschwindet auch nicht aus der liste.
    Mit der abfrage "delete from produkte where produktnummer =1" läßt sich aber einwandfrei ein satz löschen.
    Aber mit dem paramter $_POST in der abfrage stimmt was nicht.

    mfg
    san26


    Hier der code:


    <html>
    <head>
    <title>Webbasierte Datenverwaltung</title>
    </head>
    <body>

    <form action="produkte.php" method="post">
    <select name="pnummer_auswahl">
    <option value="0">[Produktnummer auswählen]</option><? echo $nummern;?>
    </select>
    <input type="submit" name="loeschen" value="Produkt loeschen">

    </body>
    </html>

    <?php

    $db_host="localhost";
    $db_user="root";
    $db_password="";
    $db_name="webshop";


    # Produktnummern aus der Datenbank lesen
    function pnummer_lesen()
    {

    global $db_host, $db_user, $db_password, $db_name;
    $dbh= mysql_connect($db_host, $db_user, $db_password);
    $datenbank = mysql_select_db($db_name);
    $abfrage = "select produktnummer from produkte";
    $ergebnis = mysql_query($abfrage, $dbh);
    $options="";

    while ($reihe = mysql_fetch_row($ergebnis))
    {
    # HTML-Code für jede Produktnummer erzeugen, um der
    #Auswahlliste hinzuzufügen

    $options .="<option value=\"{$reihe[0]}\">";
    $options .="{$reihe[0]}</option>\n";
    }
    mysql_close($dbh);
    return($options);
    }

    ### Datensatz loeschen ###

    function datensatz_loeschen()
    {
    global $db_host, $db_user, $db_password, $db_name;
    $dbh = mysql_connect($db_host, $db_user, $db_password);
    $datenbank =mysql_select_db($db_name);
    $abfrage = "DELETE from Produkte";
    $abfrage .= "where produktnummer = ".$_POST['pnummer_auswahl'];
    $ergebnis = mysql_query($abfrage, $dbh);
    mysql_close($dbh);
    }

    if (!empty($_POST))
    {

    if (isset($_POST['loeschen']))

    { datensatz_loeschen();}

    }


    $nummern=pnummer_lesen();




    ?>

  • #2
    Code:
    $abfrage = "DELETE from Produkte";
    $abfrage .= "where produktnummer = ".$_POST['pnummer_auswahl'];

    wenn man das zusammen setzt hat man:
    Code:
    DELETE from Produktewhere produktnummer = 123
    also fehlt da ein leerzeichen... zum fehlerabfang wär sowas hilfreich:
    Code:
    $ergebnis = mysql_query($abfrage, $dbh) or die(mysql_error());
    PHP & Linux-Support uvm...

    Kommentar


    • #3
      Achso.
      Weißt du die korrekte abfrage? also das dort =1 steht, wenn man 1 ausgewählt hat in der liste.


      san26

      Kommentar


      • #4
        Zitat von san26
        Weißt du die korrekte abfrage? also das dort =1 steht, wenn man 1 ausgewählt hat in der liste.
        Der Wert aus der Liste steht doch in $_POST['pnummer_auswahl'].

        Kommentar


        • #5
          Es klappt jetzt. Irgendwas stimmte mit der datenbank nicht.
          Dafür hab ich jetzt ein anderes kleines problem.
          Wenn ich eine produktnummer aus der datenbank im formular auswähle und dann ändere und dann die datenbank updaten will, wird gar nichts in die datenbank geschrieben. Ändere ich nur den wert des textfelds bezeichnung, dann funktioniert es. Wo liegt der fehler?


          $abfrage= "update produkte set Produktnummer=".$_POST['nummer'].", Bezeichnung='".$_POST['bezeichnung']."' where Produktnummer=".$_POST['nummer']."";




          san26

          Kommentar


          • #6
            Hast du dir den Inhalt von $abfrage dann mal anzeigen lassen? War der soweit in Ordnung? Was sagt mysql_error(), nachdem du mysql_query() ausgeführt hast?

            Kommentar


            • #7
              Fehler kommt keiner von mysql. Es werden einfach keine werte in die datenbank geschrieben. Lass ich das setzen der produktnummer in der abfrage weg, dann funktioniert das ändern der anderen werte einwandfrei, also:

              $abfrage= "update produkte set Bezeichnung='".$_POST['bezeichnung']."' where Produktnummer=".$_POST['nummer']."";

              Es scheint also nicht zu funktionieren, wenn man gleichzeit die nummer verändern will und aber anhand dieser einen datensatz identifiziert.
              Ich hab das ändern der nummer jetzt einfach weggelassen, ist nicht weiter wichtig. Danke für den tipp mit "die".

              Kommentar


              • #8
                Wenn du den Wert des Feldes nummer in deinem Formular änderst, ändert sich logischerweise auf die WHERE-Klausel anschließend in deiner UPDATE-Query und es wird ein komplett anderer Datensatz (sofern vorhanden) editiert. Warscheinlich ist es am besten, wenn du dir noch ein zusätzliches Feld id anlegst, welches mit der Eigenschaft auto_increment belegt wird und du dieses Feld zu Identifizierung in der WHERE-Klausel verwendest.

                Kommentar

                Lädt...
                X