Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankabfrage mit $_POST Variablen

Einklappen

Neue Werbung 2019

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

  • Datenbankabfrage mit $_POST Variablen

    Hallo Miteinander,

    ich versuche mich in letzter Zeit mit MySQL und PHP und habe darüber schon unzählige Tutorials durchgelesen, nun hänge ich an einem Problem um finde die Lösung nicht.

    also...

    Ich habe mehrere Tabellen unteranderem diese beiden: (produkte und bestellteprodukte) und ein Bestellformular.

    mit dem Bestellformular übergebe ich die Produktnamen und auf der nächsten seite möchte ich diese mit den Namen aus der Tabelle(produkte) vergleichen und diese dann in die Tabelle(bestellteprodukte) eintragen.

    Nun weiß ich nicht wie ich die Namen miteinander vergleichen und später eintragen kann.

    Hier mein Code:
    PHP-Code:
    //Kunden Speichern
            
    include("config/kundenspeichern.php");
    //Kunden abrufen        
    $kundenabrufen "SELECT kundennummer FROM kunden WHERE email='$email'";
    $kundenresult mysql_query($kundenabrufen);
    $kundenausgabe mysql_fetch_array($kundenresult);
    $kundennummer $kundenausgabe[kundennummer];
    //Bestellung Speichern
            
    include("config/bestellungspeichern.php");
    //Bestellung abrufen
    $bestellungabrufen "SELECT bestellnummer, bestelldatum FROM bestellung WHERE kundennummer='$kundennummer'";
    $bestellungresult mysql_query($bestellungabrufen);
    $bestellungausgabe mysql_fetch_array($bestellungresult);
    $bestellnummer $bestellungausgabe[bestellnummer];
    $bestelldatum $bestellungausgabe[bestelldatum];
    //Produkte abrufen
    $produkteabrufen "SELECT * FROM produkte WHERE produktname=???????"// Hier hänge ich fest, irgendwie müßte ich die $_GET Variablen vom Bestellformular in einem Array speichern und mit einer Schleife hier eintragen
    $produkteresult mysql_query($produkteabrufen);
    $produkteausgabe mysql_fetch_array($produkteresult);
    $artikelnummer $produkteausgabe[artikelnummer];
    $produktname $produkteausgabe[produktname];
    $produktpreis $produkteausgabe[preis];
    $einrichtungsgebühr $produkteausgabe[einrichtungsgebühr];
    // als nächstes sollen die bestellten Produkte dann in die Tabelle (bestellteprodukte) eingetragen werden 
    bin für jeden Tipp dankbar häng schon die ganze Nacht dran.

    grüße


  • #2
    wow !!
    also ein kurzer tip:
    1. arrayKeys unter ' ... ' setzten
    2. Joins vereinfachen dein Vorhaben erheblich!
    3. zeig uns mal deine DB struktur !!
    PHP-Code:
    if ( $humans >= ) {
       
    war ();

    Kommentar


    • #3
      Was mir gerade auffällt, das kann aber nicht dein gesammtes script sein, woher kommt z.b. $email ...

      eine kurze zwischenfrage, wie gibst du deine Produktnamen an, vl durch ; getrennt, wir sind keine hellseher und können sehen, was du denkst oder auf deinem Server hast ... oder sind es villeicht mehrere Felder ...
      PHP-Code:
      if ( $humans >= ) {
         
      war ();

      Kommentar


      • #4
        Danke für die Antworten, das ist natürlich nicht das ganze Script, sondern nur der Abschnitt wo ich eben nicht weiter komme.

        für mein Problem habe ich 4 relevante Tabellen:

        Kunden, Produkte, Bestellung, Bestellteprodukte.

        um die Bestellung auszuführen habe ich 2 Seiten, z.B. bestellung1.php und bestellung2.php

        Auf der ersten Seite habe ich das Bestellformular, dieses Formular schickt die bestellten Produkte via GET auf die nächste Seite wo dann der Kunde in die Tabelle "Kunden" eingetragen wird, als nächstes wird der Kunde wieder abgerufen und die Kundennummer mit Bestelldatum in die Tabelle "Bestellung" eingefügt.

        Soweit sollte das auch alles klappen, nur müssen jetzt die Produkte aus der Tabelle "Produkte" abgerufen werden und mit den Produkten die der Kunde im Formular ausgewählt hat, abgeglichen und in die Tabelle "Bestellteprodukte" mit der Bestellnummer und Kundennummer aus der Tabelle "Bestellungen" eingetragen werden.

        Ich hoffe das ist einigermaßen verständlich.

        Ich weiß nur nicht wie ich die $_GET Variablen aus dem Bestellformular in einem Array bekomme und diese dann mit den Produkten aus der Tabelle "Produkte" abgleichen kann. Schleife?

        Ich kann natürlich alle Variablen einzeln in die Abfrage schreiben z.B. so:
        PHP-Code:
        SELECT FROM produkte WHERE produktname='$_GET[produkt1]'"; 
        Aber das erscheint mir jedoch umständlich da ich jede Menge verschiedene Produkte habe.

        Naja habe wieder die ganze Nacht Zeit, vieleicht komme ich ja weiter

        Kommentar


        • #5
          Habe noch etwas probiert und bin zu dem Ergebnis gekommen:
          in dem Code sind ein paar Stellen wo ich mir nicht ganz sicher bin, dort habe ich die dann Fragen eingefügt.
          PHP-Code:
          $produkt1 $_GET["produkt1"];
          //usw.

          //Produkte in Array speichern
              
          $produkte = array 
              (
              
          '$produkt1',
              
          '$produkt2',
              
          '$produkt3',
              
          '$produkt4',
              
          '$produkt5',
              
          '$produkt6',
              
          '$produkt7'    
              
          );
          for (
          $i=0$i<count($produkte); $i++) //Frage: ist das so richtig??
          //Kunden Speichern
                  
          include("config/kundenspeichern.php");
          //Kunden abrufen        
          $kundenabrufen "SELECT kundennummer FROM kunden WHERE email='$email'";
          $kundenresult mysql_query($kundenabrufen);
          $kundenausgabe mysql_fetch_array($kundenresult);
          $kundennummer $kundenausgabe[kundennummer];
          //Bestellung Speichern
                  
          include("config/bestellungspeichern.php");
          //Bestellung abrufen
          $bestellungabrufen "SELECT bestellnummer, bestelldatum FROM bestellung WHERE kundennummer='$kundennummer'";
          $bestellungresult mysql_query($bestellungabrufen);
          $bestellungausgabe mysql_fetch_array($bestellungresult);
          $bestellnummer $bestellungausgabe[bestellnummer];
          $bestelldatum $bestellungausgabe[bestelldatum];
          //Produkte abrufen
          $produkteabrufen "SELECT * FROM produkte WHERE produktname='$produkte'"//Frage: kann ich das Array so angeben??
          $produkteresult mysql_query($produkteabrufen);
          while (
          $produkteausgabe mysql_fetch_array($produkteresult))
          {
          $artikelnummer $produkteausgabe[artikelnummer];
          $produktname $produkteausgabe[produktname];
          $produktpreis $produkteausgabe[preis];
          $einrichtungsgebühr $produkteausgabe[einrichtungsgebühr];
          //Bestellte Produkte Speichern
                  
          include("config/bestellungproduktespeichern.php");
          }
          mysql_free_result($produkteresult); //Frage: speichert er mir nun auch alle im Array vorhandenen Produkte in die Tabelle?? 
          Danke im Vorraus

          Kommentar


          • #6
            Habe noch etwas probiert und bin zu dem Ergebnis gekommen:
            in dem Code sind ein paar Stellen wo ich mir nicht ganz sicher bin, dort habe ich die dann Fragen eingefügt.
            PHP-Code:
            $produkt1 $_GET["produkt1"];
            //usw. 
            Genau an dieser Stelle musst du die Eingabe noch validieren.

            PHP-Code:
            1. WHERE kundennummer='$kundennummer' "; 
            2. WHERE kundennummer=
            $kundennummer
            1. etwas sicherer als 2. aber trotzdem nicht so toll.
            was machst du wenn der User bei $kundenummer folgendes eingibt?
            ' OR 1=1
            -> schau mal nach "mysql-injections".
            -> keine einzige variable darf in ein sql-statment rein, ohne sie zu prüfen. nutze mysql_real_escape_string()
            www.scriptforums.com - Foren für Skripts
            www.ragonvote.net - Kostenlose Umfragen
            www.ragonsoft.com - PHP und Android Apps (z. B. Knoten Video Guide)

            Kommentar


            • #7
              Ok danke für die Antwort, habe es geändert und hoffe das es so richtig ist:

              PHP-Code:
              //Produkte in Array speichern
                  
              $produkte = array 
                  (
                  
              '$produkt1',
                  
              '$produkt2',
                  
              '$produkt3',
                  
              '$produkt4',
                  
              '$produkt5',
                  
              '$produkt6',
                  
              '$produkt7'    
                  
              );
              for (
              $i=0$i<count($produkte); $i++) 
              $produktarray $produkte[$i];

              //Kunden Speichern
                      
              include("config/kundenspeichern.php");
              //Kunden abrufen        
              $kundenabrufen "SELECT kundennummer FROM kunden WHERE email='$email'"mysql_real_escape_string($email);
              $kundenresult mysql_query($kundenabrufen);
              $kundenausgabe mysql_fetch_array($kundenresult);
              $kundennummer $kundenausgabe[kundennummer];
              //Bestellung Speichern
                      
              include("config/bestellungspeichern.php");
              //Bestellung abrufen
              $bestellungabrufen "SELECT bestellnummer, bestelldatum FROM bestellung WHERE kundennummer='$kundennummer'"mysql_real_escape_string($kundennummer);
              $bestellungresult mysql_query($bestellungabrufen);
              $bestellungausgabe mysql_fetch_array($bestellungresult);
              $bestellnummer $bestellungausgabe[bestellnummer];
              $bestelldatum $bestellungausgabe[bestelldatum];
              //Produkte abrufen
              $produkteabrufen "SELECT * FROM produkte WHERE produktname='$produktarray'"mysql_real_escape_string($produktarray);
              $produkteresult mysql_query($produkteabrufen);
                      while (
              $produkteausgabe mysql_fetch_array($produkteresult))
              {
              $artikelnummer $produkteausgabe[artikelnummer];
              $produktname $produkteausgabe[produktname];
              $produktpreis $produkteausgabe[preis];
              $einrichtungsgebühr $produkteausgabe[einrichtungsgebühr];
              //Bestellte Produkte Speichern
                      
              include("config/bestellungproduktespeichern.php");
              }
              mysql_free_result($produkteresult);
              //Bestellte Produkte abrufen
              $bestellteprodukteabrufen "SELECT * FROM bestellteprodukte WHERE bestellnummer='$bestellnummer'"mysql_real_escape_string($bestellnummer);
              $bestellteprodukteresult mysql_query($bestellteprodukteabrufen);
              $bestellteprodukteausgabe mysql_fetch_array($bestellteprodukteresult); 
              kann mir noch jemand sagen ob ich das Array bei der Produktabfrage auch richtig eingesetzte habe und ob die while Schleife dann alle gefundene Produkte in die neue Tabelle speichert?

              bin mir nicht sicher ob das so überhaupt geht, kann es im Moment aber auch leider nicht testen.

              Kommentar


              • #8
                Zitat von sl0t Beitrag anzeigen
                PHP-Code:
                //Bestellte Produkte abrufen
                $bestellteprodukteabrufen "SELECT * FROM bestellteprodukte WHERE bestellnummer='$bestellnummer'"mysql_real_escape_string($bestellnummer); 
                hmmm... eher so:
                PHP-Code:
                //Bestellte Produkte abrufen
                $bestellteprodukteabrufen "SELECT * FROM bestellteprodukte WHERE bestellnummer='"mysql_real_escape_string($bestellnummer)."'"
                kann mir noch jemand sagen ob ich das Array bei der Produktabfrage auch richtig eingesetzte habe und ob die while Schleife dann alle gefundene Produkte in die neue Tabelle speichert?

                bin mir nicht sicher ob das so überhaupt geht, kann es im Moment aber auch leider nicht testen.

                PHP-Code:
                for ($i=0$i<count($produkte); $i++)  
                $produktarray $produkte[$i]; 
                ok das geht zwar... aber ich empehl dir mal das hier
                $produktarray ist aber dann jeweils ein string, bzw. in einzelwert und kein array.

                PHP-Code:
                 foreach($produkte as  $value
                in $value hast du so den aktuellen produktewert entspricht deinem "$produktarray" oben.
                foreach ist besser uns sauberer als diese "normalen" for-schleifen.

                1. du brauchst keine kontrolle a la "$i++"
                2. musst nicht counten, oft felht dann da noch +1 oder so
                3. braucht weniger code und weniger fehler.

                foreach durchläuft so dein array.


                mir fällt auf, das du teils extreme variablennamen hast. z.b. "$bestellteprodukteabrufen"

                bei mir sähe das hier:
                PHP-Code:
                $kundenabrufen "SELECT kundennummer FROM kunden WHERE email='$email'"mysql_real_escape_string($email); 
                $kundenresult mysql_query($kundenabrufen); 
                $kundenausgabe mysql_fetch_array($kundenresult); 
                $kundennummer $kundenausgabe[kundennummer]; 
                "ungefähr" so aus:
                PHP-Code:
                $sql "SELECT kundennummer FROM kunden WHERE email='".mysql_real_escape_string($email)."'"
                $result = @mysql_fetch_array( @mysql_query($sql) ); 
                $kundennr $result[kundennummer]; 
                bisschen kürzer, zusammengefasster.. ein SQL-statement würd ich klar als $sql schreiben.
                wenn du das statement "$kundenabrufen" nicht am ende des codes wieder brauchst empfehle ich dir das assembler-vorgehen.. also die selben variablen öferts überschreiben. sonst füllt sich dein code mit variablen.. also "$sql" nutzen und später in anderem kontext über schreiben

                so wird der code übersichtlicher
                Versuch nur dort genauere variablen-name zu nutzen, wo es nötig ist.
                PHP-Code:
                include("config/kundenspeichern.php"); 
                include(
                "config/bestellungspeichern.php"); 
                include(
                "config/bestellungproduktespeichern.php"); 
                besser ungefähr so:
                PHP-Code:
                include("config/kunden/speichern.php"); 
                include(
                "config/bestellung/speichern/daten.php"); 
                include(
                "config/bestellung/speichern/produkte.php"); 
                Sonst werden deine bezeichnungen immer länger und unübersichtlicher.
                so hast du in deinen Ordnern mehr ordnung warum du eine trennung zwischen "bestellung"-speichern und bestellteprodukte-speichern hast verstech ich nicht ganz. die bestellten produkte gehören doch zur bestellung.

                bei langen namen empfehle ich sonst statt "bestellungproduktespeichern"
                besser "bestellungprodukte_speichern"
                www.scriptforums.com - Foren für Skripts
                www.ragonvote.net - Kostenlose Umfragen
                www.ragonsoft.com - PHP und Android Apps (z. B. Knoten Video Guide)

                Kommentar


                • #9
                  Habe zu spät hier rein geschaut, habe es jetzt so geschrieben und funzt auch soweit:
                  PHP-Code:
                  include("config/getvariablen.php");
                  //Kunden abrufen und überprüfen ob es den Kunden schon gibt            
                  $kundenabrufen sprintf("SELECT kundennummer, email FROM kunden WHERE email='$email'"mysql_real_escape_string($email));
                  $kundenresult mysql_query($kundenabrufen);
                  $kundenausgabe mysql_fetch_array($kundenresult);
                  $kundennummer $kundenausgabe[kundennummer];
                  if (
                  $kundenausgabe[email] != "$email")
                  {
                  //Kunden Speichern
                          
                  include("config/kundenspeichern.php");
                  }
                  //Bestellung Speichern
                          
                  include("config/bestellungspeichern.php");
                  //Bestellung abrufen
                  $bestellungabrufen sprintf("SELECT bestellnummer, bestelldatum FROM bestellung WHERE kundennummer='$kundennummer'"mysql_real_escape_string($kundennummer));
                  $bestellungresult mysql_query($bestellungabrufen);
                  $bestellungausgabe mysql_fetch_array($bestellungresult);
                  $bestellnummer $bestellungausgabe[bestellnummer];
                  $bestelldatum $bestellungausgabe[bestelldatum];
                  //Produkte in Array speichern
                  $produkte = array();
                  if (
                  $produkt1 !="") {
                  array_push($produkte"$produkt1"); }
                  if (
                  $produkt2 !="") {
                  array_push($produkte"$produkt2"); }
                  if (
                  $produkt3 !="") {
                  array_push($produkte"$produkt3"); }
                  if (
                  $produkt4 !="") {
                  array_push($produkte"$produkt4"); }
                  if (
                  $produkt5 !="") {
                  array_push($produkte"$produkt5"); }
                  if (
                  $produkt6 !="") {
                  array_push($produkte"$produkt6"); }
                  if (
                  $produkt7 !="") {
                  array_push($produkte"$produkt7"); }
                  //Schleife für die Abfrage
                  for ($i=0$i<count($produkte); $i++) 
                  {
                  $produktarray $produkte[$i];
                  //Produkte abrufen
                  $produkteabrufen "SELECT artikelnummer, produktname, preis, einrichtungsgebühr FROM produkte WHERE produktname='$produktarray'";
                  $produkteresult mysql_query($produkteabrufen);
                  $produkteausgabe mysql_fetch_array($produkteresult);
                  $artikelnummer $produkteausgabe[artikelnummer];
                  $produktname $produkteausgabe[produktname];
                  $produktpreis $produkteausgabe[preis];
                  $einrichtungsgebühr $produkteausgabe[einrichtungsgebühr];
                  //Bestellte Produkte Speichern
                          
                  include("config/bestellungproduktespeichern.php");

                  ok das geht zwar... aber ich empehl dir mal das hier
                  $produktarray ist aber dann jeweils ein string, bzw. in einzelwert und kein array.
                  werde es gleich mal mit foreach versuchen.

                  mir fällt auf, das du teils extreme variablennamen hast. z.b. "$bestellteprodukteabrufen"
                  Meine Variablennamen sind so lang, weil ich sonst bei den ganzen Anfragen durcheinander komme.

                  ich habe in jeder Abfrage, Namen die nicht überschrieben werden dürfen, sonst stimmen die Abfragen darunter nicht mehr.

                  Sonst werden deine bezeichnungen immer länger und unübersichtlicher.
                  so hast du in deinen Ordnern mehr ordnung
                  Das mit den Unterordnern ist eine klasse Idee, werd ich wohl so umsetzten.

                  warum du eine trennung zwischen "bestellung"-speichern und bestellteprodukte-speichern hast verstech ich nicht ganz. die bestellten produkte gehören doch zur bestellung.
                  Ich habe eine Tabelle "bestellung" und eine "bestellteprodukte". Ich habe mir lange Gedanken gemacht und fand das sei die beste Lösung für die Abfragen die ich im Admin-Bereich vor habe.


                  Irgendwie gefällt mir die Lösung mit dem Array und der Schleife nicht. Das muß doch flexibler zu lösen sein.

                  Die Namen hole ich mir aus dem Bestellformular über das name Attribut.

                  Hat jemand eine Idee?

                  Kommentar


                  • #10
                    Zitat von sl0t Beitrag anzeigen
                    Irgendwie gefällt mir die Lösung mit dem Array und der Schleife nicht. Das muß doch flexibler zu lösen sein.

                    Die Namen hole ich mir aus dem Bestellformular über das name Attribut.

                    Hat jemand eine Idee?
                    Speicher diesen code in ein file namens "test.php", dann austesten und staunen... hehe... nacher musst du den code noch verstehen.
                    kurz: du kannst ein array im html-code setzen, und dieses wird dann so wie im beispiel auch als array in php genutzt.

                    Beispiel:
                    PHP-Code:
                    <!-- dieser code gehört eigentlich in ein separates file -->
                    <form method="POST" action="test.php">
                      <p><input type="checkbox" name="produkt[1]" value="DVD1">Prod 1 - DVD1</p>
                      <p><input type="checkbox" name="produkt[2]" value="CD">Prod 2 - CD</p>
                      <p><input type="checkbox" name="produkt[3]" value="Blueray">Prod 3 - Blueray</p>
                      <p><input type="submit" value="Abschicken" name="mod"></p>
                    </form>
                    <!-- dieser code gehört eigentlich in ein separates file -->


                    <?
                    $produkte = $_POST['produkt'];

                    if($produkte != '')
                    {
                        foreach($produkte as $akt_produkt)
                        {
                            echo $akt_produkt.'<br>';
                        }
                    } else {echo 'Bitte wählen'; }
                    ?>
                    www.scriptforums.com - Foren für Skripts
                    www.ragonvote.net - Kostenlose Umfragen
                    www.ragonsoft.com - PHP und Android Apps (z. B. Knoten Video Guide)

                    Kommentar

                    Lädt...
                    X