当我包含注释行时,没有显示任何结果


No result is displayed when I include my commented lines

如果我取消注释,下面的代码可以正常工作,我真的不确定为什么当我包含注释行时它不显示任何内容。感谢您的时间和帮助。

我需要这段代码来检查每次搜索电话号码时,它会自动将"Notes"表更新为过期,以让我知道注册已经过期。

<?php
include_once('assets/inc/db_login.inc');
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST"){
if(empty($_POST["phone"])) {
  $unameErr = "Phone is required";
}
else {
  $phone = clean_input($_POST["phone"]);
}
}
$check = sql_entry($phone);
/* Functions */
function clean_input($login){
$login = trim($login);
$login = stripslashes($login);
$login = htmlspecialchars($login);
return $login;
}
function sql_entry($phone){
//do not touch anything beyond this part
$conn = mysqli_connect(DB_HOST,DB_USERNAME,DB_PASSWORD,DB_NAME);
//error catcher for connection failure
if($conn->connect_error){
  die("Connection failed: " . $conn->connect_error);
}
//clean themmmmmm!
$clean_phone = mysqli_real_escape_string($conn, $phone);
//prepare queries
$verification = "SELECT * FROM ".DB_TBL." WHERE phone = ".$clean_phone;
$verification_result = mysqli_query($conn,$verification); //run query to validate phone number
/*
$row = mysqli_fetch_array($verification_result, MYSQLI_ASSOC);
$startdate = $row['register_date'];
$expire = strtotime($startdate. ' + 182 days');
$today = strtotime("today midnight");
if($today >= $expire){
$update = "UPDATE ".DB_TBL." SET notes='Expired' WHERE phone = ".$clean_phone;
$run_update = mysqli_query($conn,$update);
}
*/
return $verification_result;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> - | User Registration</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
    <center><br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <table width="500", cellpadding=5 callspacing=5 border=1>
    <tr>
        <th>Name</th>
        <th>Register Date</th>
        <th>Phone</th>
        <th>Points</th>
        <th>Note</th>
    </tr>
    <?php while($rows = mysqli_fetch_array($check, MYSQLI_ASSOC)): ?>
        <tr>
            <td><?php echo $rows['username']; ?></td>
            <td><?php echo $rows['register_date']; ?></td>
            <td><?php echo $rows['phone']; ?></td>
            <td><?php echo $rows['points']; ?></td>
            <td><?php echo $rows['notes']; ?></td>
        </tr>
    <?php endwhile; ?>
    </table>
    </center>
</body>
</html>

您需要倒带结果集,以便它可以再次迭代,或者在一次迭代中为显示和更新构建数据结构(实际上您可以在不从查询中的db - use条件中提取数据的情况下进行更新)。倒带需要对代码进行更少的更改-只需在注释部分的末尾添加以下内容:

mysqli_data_seek($verification_result, 0);

顺便说一句。您的UPDATE只与第一个返回行一起工作,然后您尝试迭代,就像可能有更多的结果一样。如果是这样的话(没有倒带),你会先更新并显示其余的。

在注释部分前添加一行:

$verification_result_clone = clone($verification_result);

和替换

$row = mysqli_fetch_array($verification_result, MYSQLI_ASSOC);

$row = mysqli_fetch_array($verification_result_clone, MYSQLI_ASSOC);

更新:

我不知道mysql_result类是不可克隆的。对不起。

嗯,我认为你应该运行你的查询两次。试试这个:

代替

$verification_result_clone = clone($verification_result);

$verification_result_clone = mysqli_query($conn,$verification);

来自我上面的回答。现在应该可以了