PHP中使用fetch对象时,无法使用while循环生效
P粉803444331
2023-08-16 11:49:58
<p>我正在为管理员制作一个登录页面,但是php代码中的while循环不起作用。我将在这里留下代码(对于代码中的西班牙语我很抱歉)</p>
<pre class="brush:php;toolbar:false;">// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查连接
if (!$conn) {
echo "连接服务器时发生错误。";
}
$username = $_POST["username"];
if ($username != "") {
$password = $_POST["password"];
$accountLevel = $_POST["accountLevel"];
$content = $_POST["content"];
$sql = "SELECT password, accountLevel FROM `accounts1` WHERE username='".$username."'";
$result = mysqli_query($conn, $sql);
while ($post = $result->fetch_object()) {
if ($post->password != $password) {
echo "密码错误";
}else if ($post->accountLevel != $accountLevel) {
echo "错误:无法发布。账户级别错误。";
}else{
$sql = "INSERT INTO `blogposts`(`title`, `contentHTML`, `publishDate`, `commentSection`, `likes`, `dislikes`, `publisher`, `selector`) VALUES ('','".$_POST['content']."','".$_POST['publishDate']."','',0,0,'".$_POST['username']."','')";
/*$fetchObj = mysqli_fetch_object($QueryResult);
var_dump($fetchObj);*/
echo "已发送";
}
}
}else{
echo "未指定用户";
}</pre>
<ul>
<li><p>有没有办法用更简单的赋值方式替换while循环(因为它是一个登录页面,只检查一个帐户)</p>
</li>
<li><p>为什么while循环不起作用?我之前在另一个页面使用过相同的代码,它完全正常工作,而且我没有看到任何逻辑错误。</p>
</li>
</ul>
<p>这是一个从带有函数的脚本发送的请求,并且我使用请求到Php页面。之后它会读取echo并在屏幕上显示。(只是为了防止有人需要这些信息)</p>
而不是使用
while
循环,只需一次捕获fetch_object()
,并使用if
测试是否得到真值结果。您还应该使用预处理语句,我在下面展示了如何做。
您不应该存储明文密码,应该使用
password_hash()
和password_verify()
。我没有在下面显示该代码(它将需要对您的注册脚本进行相应更改)。