2017-03-15 1 views
1

Bitte verstehen- Ich habe keine Erfahrung mit PHP. Aber ich weiß, ich bin nahe dran, das herauszufinden.Der Versuch, die Menge eines einzelnen Artikels zu aktualisieren, wenn ein Artikel in meinem Geschäft "gekauft" wird, aber alle Artikel in meiner Tabelle werden aktualisiert. Warum?

Ich habe eine Tabelle, generiert durch eine while-Schleife (Daten aus einer MySQL-Datenbank erhalten), die dem Kunden eine Liste von Alben von einem Künstler gibt. Ich möchte, dass der Kunde die Menge des gewünschten Albums eingeben und die Datenbank entsprechend aktualisieren kann. Ich kann den Code durchlaufen und jedes Album in meiner Tabelle aktualisieren (basierend auf Benutzereingaben), aber das ist offensichtlich nicht das, was ich möchte. Wie kann ich es so machen, dass nur EIN Album auf einmal aktualisiert wird?

Hier ist mein Code:

<div id = "MusicSearch"><h4>Search For Music</h4></div> 
<div id="search"> 
<form method="post" action="get-records.php?go" id="searchform"> 
<input type="text" name="artistName"> 
<input type="submit" name="submit-form" value="Search"> 
</div> 
<?php 

    if(isset($_POST['submit-form'])){ 
     $artistName = $_POST['artistName']; 
    if(isset($_GET['go'])){ 
    if(preg_match("/^[A-Za-z]+/", $_POST['artistName'])){ 

     include 'include/connect.php'; 

    $sql = " 
SELECT y.artistName 
    , x.albumName 
    , x.albumID 
    , x.cost 
    , x.stock 
    FROM album x 
    JOIN artist y 
    ON x.artistID = y.artistID 
WHERE y.artistName LIKE '%" .$artistName. "%' 
"; 

    $result = $con->query($sql); 

    echo '<table><tr><th>Artist</th><th>Album</th><th>Cost</th><th>Stock</th><th>Quantity</th></tr>'; 
    ?> 

    <?php  
     while ($row = $result->fetch_array()) { 

      $albumName=$row['albumName']; 
      $cost=$row['cost']; 
      //$albumID=$row['albumID']; 
      $stock=$row['stock']; 

      echo '<tr>'; 
      echo '<td>' . $artistName . '</td>'; 
      echo '<td>' . $albumName . '</td>'; 
      echo '<td>' . $cost . '</td>'; 
      echo '<td>' . $stock . '</td>'; 
     ?> 
      <td><form method="post" action="get-records.php"> 
        <input type="hidden" name="albumID[<?php echo $row['albumID']; ?>]" value="<? echo $row['albumID']; ?>"></input> 
        <input type="number" name="quantity[<?php echo $row['albumID']; ?>]" value="<?php echo $row['quantity']; ?>"></input> 
       <input type="submit" name="purchase-form" value="Purchase"/></form></td>  

    <?php 

    } 
    echo "</table>"; 

     } 
    } 
} 

     if(isset($_POST['quantity'])){ 

     foreach($_POST['albumID'] as $key => $id){ 

     $quan = mysqli_real_escape_string($con, $_POST['quantity'][$key]); 

     $q = "UPDATE album SET stock = stock-$quan WHERE albumID = albumID"; 


    try{ 
     $result = $con->query($q); 

     if (!$result) 
     echo "Error, try again " . mysqli_error($con); 

     if(is_null('id')) 
     throw new Exception('Error. Try again'); 
    } 
     catch (Exception $ex) { 
     echo '<div class="error">' . $ex->getMessage() . '</div>'; 
    }      

    } 
    } 
?> 
+0

Es scheint ziemlich klar, dass 'WHERE albumid = albumid' falsch ist. Beachten Sie, dass das Schöne an dieser API ist, dass sie die Verwendung parametrisierter und gebundener Abfragen ermöglicht. – Strawberry

+0

@Strawberry Ich weiß, dass es falsch ist, aber das ist das einzige, was ich zur Arbeit bringen kann. Wenn ich versuche, 'WHERE albumID = $ id 'zu setzen, bekomme ich eine kryptische Fehlermeldung, die mir sagt:' Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, um die richtige Syntax für die Verwendung in der Nähe von '' 'in Zeile 1 zu finden. – ferrari3000

Antwort

1

ersetzen Sie Ihre Update-Abfrage mit dieser UPDATE album SET stock = 'stock-".$quan."' WHERE albumID = '".$id."'

+0

Ich bekomme diesen Fehler, wenn ich das tue: 'Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, um die richtige Syntax in der Nähe von 'albumID' zu verwenden. ?> '' in Zeile 1 ' – ferrari3000

+0

Haben Sie diese Aktualisierungsabfrage ausgeführt? –

+0

ja ich tat. Es tut mir leid, ich weiß nicht, was ich dir sonst noch sagen soll. Der Fehler, den ich bekomme, ist überhaupt nicht hilfreich. – ferrari3000

1

müssen Sie eventuell $_POST['albumID'] ‚s-Wert statt albumID, hier

$q = "UPDATE album SET stock = stock-$quan WHERE albumID = $id"; 

albumID = albumID gilt für alle Zeilen verwenden, das ist, warum seine alle Datensätze zu aktualisieren

+0

Vielen Dank für Ihre Antwort. Ich habe das versucht, und ich bekomme diesen Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das zu Ihrer MariaDB-Server-Version für die richtige Syntax in der Nähe von '' in Zeile 1 entspricht – ferrari3000

+0

@ ferrari3000: teilen Sie Ihren Fehler, auch Wert von 'print_r ($ _ POST ['albumID'])' und was Sie eingeben Wert für 'albumID'? – C2486

+0

Das ist alles, was ich für die Fehlermeldung bekomme. Der Wert für 'print_r ($ _ POST ['albumID'])' ist 'Array ([7] =>)' Ich bekomme diesen Wert von meinem eigenen ID-Wert, der in meiner MySQL-Tabelle generiert wurde. 'albumID' wird bereits von MySQL generiert. – ferrari3000

Verwandte Themen