在 PHP 循环中的单行上运行 UPDATE


Run UPDATE on single row within PHP loop

我已经写了这段代码,对不起,我对PHP很陌生。

我有一个循环,可以从数据库中抓取所有的马匹。

在每个条目下方创建了一个销售按钮,我遇到的问题是,当我在单个条目上点击"出售"时,它会"出售"所有条目。

这是我的代码;

$query = "SELECT * FROM horses WHERE (owner = '$id') AND (status = 'active')";
                        if($result = $connect->query($query)) {
                            echo "<ul id='horses' class='row'>";
                            while ($row = $result->fetch_assoc()) {
                                echo "<li class='col-sm-4'>";
                                    echo "<div class='horse-wrap'>";
                                        echo "<h2>" . $row['name'] . "</h2>";
                                        echo "<div class='details'>";
                                            echo "<strong>Age:</strong> " . $row['age'] . "<br>";
                                            echo "<strong>Colour:</strong> " . $row['colour'] . "<br>";
                                            echo "<strong>Country:</strong> " . $row['country'] . "<br>";
                                            echo "<strong>Value:</strong> £" . number_format($row['value']) . "<br>";
                                        echo "</div>";
                                        echo "<h3>Record</h3>";
                                        echo "<ul class='history row'>";
                                            echo "<li class='col-sm-3'>Runs: " . $row['runs'] . "</li>";
                                            echo "<li class='col-sm-3'>Wins: " . $row['first'] . "</li>";
                                            echo "<li class='col-sm-3'>2nd: " . $row['second'] . "</li>";
                                            echo "<li class='col-sm-3'>3rd: " . $row['third'] . "</li>";
                                        echo "</ul>";
                                        echo "<ul class='skills'>";
                                            echo "<h4>Speed</h4><li><span class='skill' style='width: " . $row['skill_speed'] . "%;'>" . $row['skill_speed'] . "</span></li>";
                                            echo "<h4>Jumping</h4><li><span class='skill' style='width: " . $row['skill_jump'] . "%;'>" . $row['skill_jump'] . "</span></li>";
                                            echo "<h4>Temperament</h4><li><span class='skill' style='width: " . $row['skill_temperment'] . "%;'>" . $row['skill_temperment'] . "</span></li>";
                                            echo "<h4>Endurance</h4><li><span class='skill' style='width: " . $row['skill_endurance'] . "%;'>" . $row['skill_endurance'] . "</span></li>";
                                        echo "</ul>";
                                        // SELL HORSE BUTTON
                                        echo "
                                        <form action='./stables.php' method='post'>
                                            <input type='hidden' value='" . $row['value'] . "' name='sellvalue' />
                                            <input type='hidden' value='" . $row['name'] . "' name='sellname' />
                                            <input type='submit' value='Sell Horse' name='sell' class='sell' />
                                        </form>
                                        ";
                                    echo "</div>";
                                echo "</li>";
                                // SELL HORSE
                                if(!empty($_POST["sell"])) {
                                    //REMOVE HORSE FROM USER
                                    $horseName = $row['name'];
                                    $status = 'sold';
                                    if($updateHorse = $connect->prepare("UPDATE horses SET status = ? WHERE name = ?")) {
                                        $updateHorse->bind_param('ss', $status, $horseName);
                                        $updateHorse->execute(); 
                                        $updateHorse->close();
                                    }
                                    //ADD MONEY TO USER
                                    $updateAmount = $money + $row['value'];
                                    if($updateUser = $connect->prepare("UPDATE users SET money = ? WHERE id = ?")) {
                                        $updateUser->bind_param('ss', $updateAmount, $id);
                                        $updateUser->execute(); 
                                        $updateUser->close();
                                    }
                                }
                            }
                            echo "</ul>";
                        } else {
                            echo "You currently have no horses.";
                        }

您正在循环内进行更新,但您从未检查循环的当前马是否是客户尝试销售的马。正如它所写的那样,它将为每个人执行。

您正在检查表单是否已提交:

// SELL HORSE
if(!empty($_POST["sell"])) {

这也是确保您拥有合适马匹的理想场所:

// SELL HORSE
if(!empty($_POST["sell"]) && $row["name"] === $_POST["sellname"]) {