Ankündigung

Einklappen
Keine Ankündigung bisher.

Verständnidproblem von Fehlermeldung by sql-query

Einklappen

Neue Werbung 2019

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

  • Verständnidproblem von Fehlermeldung by sql-query

    Hallo ich verstehe nicht, wie es zu der Fehlermeldung
    Parse error: syntax error, unexpected ',' in C:\xampplite\htdocs\futterladen\catalog.php on line 76,

    also bei VALUES ("'.$order_number,$n_items,$catalog_number,$value, $row['price'].'")


    kommt?


    PHP-Code:
    if(substr($field,0,4) == 'item' && $value 0)
                {
                    
    $n_items++;
                    
    $catalog_number substr($field,4,strlen($field)-4);
                    
    $connect connect_to_db('Vars.php');
                    
    $sql_price 'SELECT price FROM Food WHERE catalog_number ="'.$catalog_number.'"';
                    
    $result mysqli_query($connect,$sql_price)
                        or die(
    'sql-price: '.mysqli_error($connect));
                    
    $row mysqli_fetch_assoc($result);

                    
    $sql_item 'INSERT INTO order_item (order_number,item_number,catalog_number,quantity,price)
                    VALUES ("'
    .$order_number,$n_items,$catalog_number,$value,$row['price'].'")';

                    
    $result mysqli_query($connect,$sql_item)
                        or die(
    'sql-item: '.mysqli_error($connect));
                } 
    Ich hab das so aus einem Buch übernommen. Die Variablen werden ja per Komma getrennt. Dürfen an dieser Stelle überhaupt Variablen stehen??

    Danke,
    Iago

  • #2
    Die Kommas müssen im fertigen SQL-String stehen. In etwa so:

    PHP-Code:
    $sql_item "INSERT INTO
        order_item
        (order_number,item_number,catalog_number,quantity,price)
        VALUES (
            '"
    .$order_number "',
            '" 
    $n_items "',
            '" 
    $catalog_number "',
            '" 
    $value "',
            '" 
    $row['price']."')"
    Das Skript ist zudem eventuell anfällig für SQL Injections (siehe z. B. Wikipedia).

    Sorry, aber das ist alles nicht so ohne weiteres zu erklären. Hier gibt's weitere grundlegende Informationen zu PHP und anderen relevanten Technologien: http://www.php.de/php-einsteiger/489...nsammlung.html

    Kommentar


    • #3
      Hi,
      vielen Dank,
      die Sicherheitsfragen kläre ich in einem zweiten Anlauf, erst sollte das ganze mal
      funktionieren!!

      Das script stirbt mit Fehlermeldung:
      sql-item: Column count doesn't match value count at row 1

      Das ganze ist noch eingebettet in ein foreach-Schleife, sodass das dann so ausschaut:

      PHP-Code:
      foreach($_POST as $field => $value)
              {

                  if(
      substr($field,0,4) == 'item' && $value 0)
                  {
                      
      $n_items++;
                      
      $catalog_number substr($field,4,strlen($field)-4);
                      
      $connect connect_to_db('Vars.php');
                      
      $sql_price 'SELECT price FROM Food WHERE catalog_number ="'.$catalog_number.'"';
                      
      $result mysqli_query($connect,$sql_price)
                          or die(
      'sql-price: '.mysqli_error($connect));
                      
      $row mysqli_fetch_assoc($result);


                     
      $sql_item "INSERT INTO order_item (order_number,item_number,catalog_number,quantity,price)
                      VALUES ('"
      .$order_number."',
                              '"
      .$n_items."'
                              '"
      .$catalog_number."'
                              '"
      .$value."'
                              '"
      .$row['price']."')";

                      
      $result mysqli_query($connect,$sql_item)
                          or die(
      'sql-item: '.mysqli_error($connect));
                  }
                  }

                      
      $_SESSION['n_items'] = $n_items;
                      
      header('Location: ShoppingCart.php');
                      exit(); 

      Kann es sein, dass $order_number keinen Wert enthält??
      Das ganze ist ja so eine Produktatalogsteuerung.
      Wenn ich die 'In den Warenkorb'- Submitschaltfläche drücke, wird zunächst geschaut, ob $order_number gesetzt ist, wenn nicht wird es erzeugt. Das sieht wie folgt aus und funktioniert einwandfrei:

      PHP-Code:
       if($_POST['Products'] == 'In den Warenkorb')
          {


      /*Hier beginnt eine if/else Anweisung, die die Auftragsnummer und die Anzahl
             der Elemente im Warenkorb setzt. Wenn in der Sitzung keine Auftragsnummer
             existiert, fügt der if-Block einen neuen Auftrag in die Datenbank ein.
             Das aktuelle Datum wird eingesetzt. MySQL vergibt eine sequenzielle Auftragsnummer.
             */

              
      if(!isset($_SESSION['order_number']))
              {
                  
      $connect connect_to_db('Vars.php');
                  
      $today date('Y-m-d');
                  
      $sql_order 'INSERT INTO customer_order (order_date) VALUES ("'.$today.'")';
                  
      $result mysqli_query($connect,$sql_order) or die('sql_order'.mysql_error($connect));

               
      //Hier wird die neue Auftragsnummer in $order_number gespeichert

                  
      $order_number mysqli_insert_id($connect);

               
      //Hier wird die Auftragsnummer in der Sitzungsvariablen gespeichert

                  
      $_SESSION['order_number'] = $order_number;

               
      /*Bis jetzt wurde noch kein Element zu Auftrag hinzugefügt, sodass $n_items
                 auf den Wert 0 gesetzt wird*/

                  
      $n_items 0;

              }

              
      /*Wenn eine Auftragnummer gefunden wird, übernimmt der else-Block die Auftragsnummer
              und die Anzahle der Elemente der Sitzungsvariablen, die sich aktuell im Warenkorb
              befinden*/

              
      else
              {
                  
      $order_number $_SESSION['order_number'];
                  
      $n_items $_SESSION['n_items'];
              }

      foreach(
      $_POST as $field => $value)
              {...........
      /*siehe oben*/.......................... 
      Kummer macht mir auch das $row['price'] (im ersten Script).
      Das Array $row ist innerhalb von foreach-Schleifen gültig, die die Produktpalette anzeigen, aber ist es auch hier gültig??

      Meiner Meinung nach kommt es also zu der Fehlermeldung: Column count doesn't match value count at row 1, da die Variablen an dieser Stelle
      nicht initialisiert sind. Bin ich da auf der richtigen Spur??

      Vielen Dank,
      Iago

      Kommentar


      • #4
        Die Values bei SQL müssen mit einem Komma getrennt werden, dies machst du nur beim ersten value

        Kommentar


        • #5
          Ah... ok, danke!

          Kommentar


          • #6
            Zitat von Iago
            die Sicherheitsfragen kläre ich in einem zweiten Anlauf, erst sollte das ganze mal
            funktionieren!!
            Nehmt Euch doch bitte gleich derer an.
            Ich denke nicht, daß Ihr - in diesem Falle Du - hinterher noch wieder im Code rumwurstelt, wenn er endlich zu Eurer Zufriedenheit läuft.
            Damit is' das Thema Sicherheit dann wieder über'n Jordan und man wundert sich...
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar

            Lädt...
            X