我允许登录用户通过其配置文件页面上的下拉列表更改rsvp状态。当他们提交更改时,更新字段需要一段时间,有时会超时。我怀疑是我用它来进行数据库更新的方式造成了这种情况,但无法解决。
<?php
include_once 'header.php';
require_once 'includes/dbh.inc.php';
require_once 'includes/functions.inc.php';
if(isset($_SESSION["emailAddress"])) {
$sql = "SELECT * FROM users WHERE email='$_SESSION[emailAddress]'";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_assoc($result);
mysqli_stmt_close($stmt);
$inGet = "SELECT * FROM users WHERE rsvp='in';";
$inData = mysqli_query($conn, $inGet);
$inTotal = mysqli_num_rows($inData);
if(isset($_POST['apply'])) {
$rsvp = $_POST['status'];
$email = $_SESSION['emailAddress'];
$firstName = $row['firstName'];
$lastName = $row['lastName'];
do {
$sql2 = "UPDATE users SET rsvp='$rsvp' WHERE email='$_SESSION[emailAddress]';";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);
} while ($inTotal <= 8);
if (($inTotal == 9 && $rsvp == "in")) {
$sql3 = "UPDATE users SET rsvp='waitlist' WHERE email='$_SESSION[emailAddress]';";
$stmt3 = mysqli_prepare($conn, $sql3);
mysqli_stmt_execute($stmt3);
mysqli_stmt_close($stmt3);
header("Location: dashboard.php");
exit();
}
}
}
?>我试图调用和关闭语句,以避免多个语句同时打开。
我希望数据库更新过程中的更改能够立即反映用户的配置文件和主仪表板。
发布于 2022-11-02 13:44:44
这是一个无限循环:
do {
$sql2 = "[your UPDATE statement...]";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);
} while ($inTotal <= 8);因为循环将继续,直到$inTotal <= 8不再为真为止。但是,由于循环中任何东西都不会改变$inTotal,如果它是真一次,那么总是为真。
后退一步..。为什么这首先是一个循环呢?您只是重复执行相同的SQL语句。如果它成功一次,那么它就成功了。删除循环,只执行语句一次
$sql2 = "[your UPDATE statement...]";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);重要注意事项:注意到我是如何删除上面实际的UPDATE语句的。这只是为了演示删除循环后的代码结构。(并且明确地避免任何人盲目地将这个答案的内容复制/粘贴到实际代码中。)但是,您还需要在这里(以及代码中的任何其他地方)进行correct a SQL injection vulnerability:
$sql2 = "UPDATE users SET rsvp=? WHERE email=?";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_bind_param($stmt2, 'ss', $rsvp, $_SESSION['emailAddress']);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);https://stackoverflow.com/questions/74290095
复制相似问题