2017-03-15 17 views
1

ご理解ください - 私はPHPに慣れていません。しかし、私はこれを理解することに近いと知っています。アイテムが店舗から「購入」されたが、テーブルのすべてのアイテムが更新されたときに1つのアイテムの数量を更新しようとしています。どうして?

私は、顧客にアーティストからのリストを提供するwhileループ(データベースをMySQLデータベースから取得)によって生成されるテーブルを持っています。顧客が購入したいアルバムの数量を入力し、データベースを適切に更新できるようにしたい。ループしてテーブル内のすべてのアルバム(ユーザー入力に基づいて)を更新するコードを取得できますが、それは明らかに私が望むものではありません。どうすれば一度に1つのアルバムしか更新されないのですか?ここで

が私のコードです:

<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

'どこalbumid = albumid'が間違っているのはかなり明らかです。このAPIの美しさは、パラメータ化されバインドされたクエリの使用を可能にしていることに注意してください。 – Strawberry

+0

@Strawberry私はそれが間違っていることを知っていますが、それが私が働くことができる唯一のものです。 'WHERE albumID = $ id'を入力しようとすると、わたしはあなたにあなたのSQL構文に誤りがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックしてください。正しい構文は、 '' 'at line 1'の近くで使用してください。 – ferrari3000

答えて

1

更新クエリをUPDATE album SET stock = 'stock-".$quan."' WHERE albumID = '".$id."'

で置き換えます
+0

私はこれを行うときにこのエラーが発生します: 'エラー:SQL構文にエラーがあります。正しい構文が 'albumID'の近くで使用されるようにMariaDBサーバーのバージョンに対応するマニュアルを確認してください。 ?> '' at line 1 ' – ferrari3000

+0

この更新クエリを実行しましたか? –

+0

はい私はしました。すみません、他に何を教えていいのか分かりません。私が得ているエラーは役に立ちません。 – ferrari3000

1

あなたが代わりにalbumID$_POST['albumID']の値を使用する必要があり、ここで

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

albumID = albumIDなぜそのすべてのレコードに

を更新しています、すべての行に対して真であります
+0

あなたの返事に感謝します。私はそれを試み、私はこのエラーが表示されます:あなたはあなたのSQL構文に誤りがあります。あなたのMariaDBサーバのバージョンに対応したマニュアルをチェックして、正しい構文を確認してください。 '1行目で使用してください。 – ferrari3000

+0

@ ferrari3000:エラーを共有してください。' print_r($ _ POST ['albumID']) 'albumID'の値は? – C2486

+0

それは私がエラーメッセージのために得ているすべてです。 'print_r($ _ POST ['albumID'])の値は' Array([7] =>) 'です。私のMySQLテーブルで生成された自分のid値からその値を取得しています。 'albumID'はMySQLによって既に生成されています。 – ferrari3000

関連する問題