2016-05-17 7 views
-1

Unten ist mein Code:Wie kann ich das machen (Basic mysqli und PHP)?

 $result = $mysqli->query('SELECT * FROM products'); 
     if($result === FALSE){ 
     die(mysql_error()); 
     } 

     if($result){ 

     while($obj = $result->fetch_object()) { 
      if ($obj->typeOf === 'single') 
      { 
       $forPack = $mysqli->query('SELECT id FROM products WHERE typeOf = 12-pack AND product_name = '.$obj->product_name); 
       $forPound = $mysqli->query('SELECT id FROM products WHERE typeOf = 50-pound AND product_name = '.$obj->product_name); 

       echo '<div class="large-3 columns">'; 
       echo '<p><h3>'.$obj->product_name.'</h3></p>'; 
       echo '<img src="images/products/'.$obj->product_img_name.'"/>'; 
       echo '<p><strong>Price (Per Unit)</strong>: '.$currency.$obj->price.'</p>'; 
       echo '<p><a href="update-cart.php?action=add&id='.$obj->id.'"><input type="submit" value="Add Single" style="clear:both; background: #0078A0; border: none; color: #fff; font-size: 1em; padding: 10px;" /></a></p>'; 
       echo '<p><a href="update-cart.php?action=add&id='.$forPack.'"><input type="submit" value="Add 12-pack" style="clear:both; background: #0078A0; border: none; color: #fff; font-size: 1em; padding: 10px;" /></a></p>'; 
       echo '<p><a href="update-cart.php?action=add&id='.$forPound.'"><input type="submit" value="Add 50 pound" style="clear:both; background: #0078A0; border: none; color: #fff; font-size: 1em; padding: 10px;" /></a></p>'; 
       echo '</div>'; 
      } 
     } 

Der Bereich, den ich mit Mühe habe, ist $ forPack und $ forPound. In meiner Tabelle der Produkte gibt es in der Regel drei Produkte. Das Produkt, das Produkt in einer 12er-Packung und das Produkt in einer 50-lb-Sache. Alles funktioniert gut für den ersten der drei update-cart.php Aufrufe. Derjenige, der $ obj-> id sagt, aber ich kann nicht scheinen, dass $ forPack oder $ forPound funktionieren. Sie haben genau den gleichen Produktnamen, nur unterschiedliche 'typeOf' auf dem Server. Wenn ich abfrage, um die ID auszuwählen, gibt es nicht nur eine Nummer zurück? Was genau wird hier zurückgegeben?

Ich brauche nur das Programm in der Produkttabelle nach dem Produkt suchen, das den gleichen genauen Namen, aber einen anderen Typ hat. Wenn es einen besseren Weg gibt, lass es mich wissen. Ich bin ein absoluter Anfänger zu SQL und PHP, also bin ich sicher, dass es ein dummer Fehler ist.

+0

Sie erhalten ein Recordset zurück von der Datenbank, wenn Sie 'query' aufrufen; Sie müssen durchlaufen, um den Wert zu erhalten, den Sie suchen. – andrewsi

+0

Ein paar andere Dinge - Sie können beide Werte in der gleichen Abfrage erhalten; Sie können möglicherweise SELECT 'if, typeOf FROM products WHERE typeOf IN ('12 -pack', '50 -pound ') ', obwohl dann Ihr Recordset zwei Zeilen enthält, und Sie müssen es entsprechend verarbeiten. Beachten Sie auch, dass Sie, wenn Sie nach einem Textwert suchen ("12er-Pack"), ihn in Anführungszeichen setzen müssen, da MySQL sonst einen Spaltennamen annehmen würde. – andrewsi

+0

Ein Recordset wie ein Array oder was? Wie würde ich dieses Recordset durchlaufen? Ich habe das schon seit einer Stunde probiert und ich weiß nicht, was ich mache. Warum sollte ich etwas durchforsten, wenn ich eine eindeutige ID auswähle? Ich verstehe nicht. –

Antwort

1

Es gibt 2 verschiedene Dinge, die sich hier:

  1. Typos (ohne Anführungszeichen, wo erforderlich)
  2. Ihre Suchresultates ist derzeit ein Array, kein einziger Wert. Versuchen Sie folgendes:

    $forPack = $mysqli->query("SELECT id FROM products WHERE typeOf = '12-pack' AND product_name = '" . $obj->product_name . "'")->fetch_row()[0];

    $forPound = $mysqli->query("SELECT id FROM products WHERE typeOf = '50-pound' AND product_name = '" . $obj->product_name . "'")->fetch_row()[0];

nicht sicher, warum Website verweigert den Codeblock zu verwenden. Beachten Sie, dass Ihr SQL jetzt doppelte Anführungszeichen für die gesamte Anweisung verwendet, damit Sie einfache Anführungszeichen verwenden können. Darüber hinaus sind einfache Anführungszeichen um den typeOf Wert und $obj->product_name. Wenn Sie Ihre SQL-Strings erstellen, ist es eine gute Idee, sie zuerst zu wiederholen, damit Sie sehen können, dass sie richtig erstellt wurden. Um dies zu tun, würde ich etwas tun wie:

$sql = "SELECT id FROM products WHERE typeOf = '12-pack' AND product_name = '" . $obj->product_name . "'"; 
echo $sql; 
$forPack = $mysqli->query($sql)->fetch_row()[0];