ご理解ください - 私は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>';
}
}
}
?>
'どこalbumid = albumid'が間違っているのはかなり明らかです。このAPIの美しさは、パラメータ化されバインドされたクエリの使用を可能にしていることに注意してください。 – Strawberry
@Strawberry私はそれが間違っていることを知っていますが、それが私が働くことができる唯一のものです。 'WHERE albumID = $ id'を入力しようとすると、わたしはあなたにあなたのSQL構文に誤りがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックしてください。正しい構文は、 '' 'at line 1'の近くで使用してください。 – ferrari3000