如果我取消注释,下面的代码可以正常工作,我真的不确定为什么当我包含注释行时它不显示任何内容。感谢您的时间和帮助。
我需要这段代码来检查每次搜索电话号码时,它会自动将"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);
来自我上面的回答。现在应该可以了