【问题标题】:How do I match a user input to a database value? [duplicate]如何将用户输入与数据库值匹配? [复制]
【发布时间】:2020-04-11 07:52:35
【问题描述】:

我正在创建一个验证码系统,用户收到一封带有验证码的电子邮件,他们会去我的网站,输入它,如果有代码与数据库表“验证码”中的代码匹配,那么他们会被重定向到另一个网址。但是到目前为止,我输入的每个代码都是 testsite.php?code=not matching。我做错了什么?

<?php 

if (isset($_POST['code-submit'])) {

require 'notseendatabasehandler.php';

$code = $_POST['code'];

//Checking for empty fields
if (empty($code)) {
  header("Location: testsite1.php?error=emptyfields");
  exit();
}

else {
  $sql = "SELECT codeNumber FROM verificationcodes;";
  $result = mysqli_query($conn, $sql);

  if ($result == $code) {
    header("Location: testsite2.php?code=success");
    exit();
  }

  else {
    header("Location:  testsite1.php?code=notmatching");
    exit();
  }
}
}

//Sending the user backwards if they entered incorrectly 
else {
  header("Location: homepage.php");
  exit(); 
}

【问题讨论】:

  • 您确定$result$code 包含它应该包含的内容吗?
  • mysqli_query 只是运行查询。然后,您需要使用$row = mysqli_fetch_assoc($result); 之类的方法获取结果,然后将$row['codeNumber']$code 进行比较。此外,您需要在查询中添加 WHERE 子句,理想情况下,您应该更改为准备好的语句以避免 SQL 注入。见stackoverflow.com/questions/60174/…

标签: php mysql mysqli


【解决方案1】:

你需要修改你的代码如下:

$conn->prepare("SELECT codeNumber FROM verificationcodes WHERE codeNumber= ?");

如果你在上面的查询中得到了结果,那么说明代码在数据库中,你可以重定向成功。

您当前正在做的是从表中获取所有 codeNumber,并且在不循环它们的情况下,您正在比较永远无法工作的帖子数据。

或者像你一样获取所有数据并执行foreach循环并将所有值与发布数据进行比较。

【讨论】:

猜你喜欢
  • 2015-03-12
  • 2013-07-19
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多