2016-06-06 8 views
0

Das ist mein BAShop.php DateiWie wird eine bestimmte Zeile der ausgewählten Tabellendaten in die Datenbanktabelle eingefügt?

<?php  
    if(isset($_POST['insert'])){     
    $queryinsert = "insert into cart(productid,productname,cartquantity,amount) SELECT productid,productname,'$_POST[cartquantity]', '50' FROM product WHERE productid='$_POST[hidden]'";  
    mysqli_query($dbconn,$queryinsert);            
    } 
    ?> 
<script>      
       function sortproduct(str) { 

         if (window.XMLHttpRequest) { 
          // code for IE7+, Firefox, Chrome, Opera, Safari 
          xmlhttp = new XMLHttpRequest(); 
         } else { 
          // code for IE6, IE5 
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
         } 
         xmlhttp.onreadystatechange = function() { 
          if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
           document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
          } 
         }; 
         xmlhttp.open("GET","BAShopSort.php?q="+str,true); 
         xmlhttp.send(); 

       } 

      </script> 

Und das ist meine ShopSort.php Datei, wo ich meine Ajax tun, so dass Benutzer auf eine Schaltfläche und die Seite klicken Sie auf Änderungen kann es ohne zu aktualisieren.

$q = $_GET['q']; 
$sql="SELECT * FROM product WHERE productname like '$q%'"; 
$result = mysqli_query($dbconn,$sql); 
echo "<table border=3> 
<tr> 
<th>Productid</th> 
<th>Productname</th> 
<th>Retailprice</th> 
<th>Pointsformula</th> 
<th>Quantity</th> 
</tr>"; 
while($row = mysqli_fetch_array($result)) { 
echo "<tr><form method='POST'>"; 
echo "<td>"."<input type = 'text' id ='productid' name='productid' value=". $row['productid'] ."></td>"; 
echo "<td>"."<input type = 'text' id = 'productname' name='productname' value=". $row['productname'] ."></td>"; 
echo "<td>" . $row['retailprice'] . "</td>"; 
echo "<td>" . $row['pointsformula'] . "</td>"; 
echo "<td>"."<button type='button' class='quantityaddsub' id='sub' onclick='quantitysub(".$row['productid'].")'>-</button>". 
       "<input type='text' class='quantity' name='cartquantity' id='quantity".$row['productid']."' value=1>". //**name of quanitty text 
       "<button type='button' class='quantityaddsub' id='add' onclick='quantityadd(".$row['productid'].")'>+</button>". 
"<input type='hidden' name='hidden' value=".$row['productid']."></td>"; 
echo "<td>" . "<input type='submit' id = 'insert' name='insert' value='Add To Cart'" . "></td>"; 
echo "</form></tr>"; 
}echo "</table>"; 

So, nachdem ich die BAShop.php Datei ausführen, kann sagen, i den Punkt ‚Soap‘ in der Warenkorb enter image description here Wenn ich in der Warenkorb Seite gehen hinzufügen möchte, die Seife ist nicht dort, sondern die Shampoo ist da. enter image description here

Bitte haben Sie einen Blick auf mein Code und lassen Sie mich wissen, was los ist ... Ich habe für 3 Wochen mit diesem Problem für mein Schulprojekt gesteckt worden ist, und die Zeit läuft ab .. FYI: die Daten für die Tabelle, die ich für die BAShop.php-Seite angezeigt habe, wird von mysql-Datenbank gezeichnet.

+0

Haben Sie überprüft, was Wert von '$ _POST [hidden]' nach dem Post kommt? – Apb

+0

yup, es wird immer die Produktnummer des letzten Elements in der Zeile sein, z. Wenn ich ProductID 1 wähle, wird der versteckte Wert 2 – Marcus

+0

Wenn ich Ihren Code verwende, gibt er den korrekten Wert beim Klicken zurück. Wenn ich auf 1. Datensatz klicken, ist der Wert "hidden" 1. – Apb

Antwort

1

Das Problem ist, wenn Sie mehrere Artikel zur gleichen Zeit in Ihrer Tabelle angezeigt haben, dann enthält Ihr Dokument mehrere Eingaben mit dem Namen ausgeblendet innerhalb des gleichen Formulars. Aufgrund der Art und Weise, wie POST-Variablen von PHP gehandhabt werden, wird nur die erste bei der Formularübermittlung berücksichtigt. Deshalb wird der erste Artikel, der in der Tabelle (in Ihrem Beispiel, Seife) angezeigt wird, dem Warenkorb hinzugefügt, egal was passiert.

Um dies zu ändern, möchten Sie entweder Ihrem versteckten Feld eine spezifischere ID geben und Ihren JS-Code ändern, um entsprechend zu reagieren, oder ein Formular pro Zeile erstellen (dies ist wahrscheinlich der schnellste Weg zur Lösung Ihres Problems).

P.S. : Sie sollten sich auch um diese SQL-Abfragen kümmern, wenn dieses Skript irgendwo anders als lokal ausgeführt werden soll. Sie sind gefährlich unsicher.

+0

Hi, uhmm meinst du das Einkapseln mit

, wenn ich die Reihe heraus widerhall? Wie gebe ich eine bestimmte ID für mein verstecktes Textfeld ein? Zum Beispiel, es zu 'hidden1' zu benennen? Aber ich sehe nicht, wie es das Problem lösen kann. Ich habe viele Produkte von meiner Datenbank, das bedeutet, dass jede Reihe hidden1, hidden2, hidden3 dementsprechend hat? – Marcus