【问题标题】:Having trouble pushing data from a sql query to an array for comparison将数据从 sql 查询推送到数组进行比较时遇到问题
【发布时间】:2015-01-31 23:23:43
【问题描述】:

所以我试图将来自表单的用户输入与来自数据库、名字、姓氏和电子邮件的数据进行比较。我的问题是将我的结果与用户输入的结果进行比较。我要做的是将查询的结果放入一个数组中,然后将每个数组项与用户的输入进行比较。然而我无法通过我的过程。我究竟做错了什么?

提前谢谢大家。

附:我是一个php新手,所以任何建议也将不胜感激

<?php
$servername = "localhost";
$username = "jon";
$password = "test";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);

//test connection
if($conn -> connect_error) {
  die("Connection Error: " . $conn -> connect_error);
}

//input from the user
$firstname = $_POST['first'];
$lastname = $_POST['last'];
$email = $_POST['email'];

//query for the database to select the columns
$queryFirst = "SELECT firstname FROM users";
$queryLast = "SELECT lastname FROM users";
$queryEmail = "SELECT email FROM users";

//query results
$resultFirst = $conn -> query($queryFirst);
$resultLast = $conn -> query($queryLast);
$resultEmail = $conn -> query($queryEmail);

$firstResult = array();
$lastResult = array();
$emailResult = array();

array_push($firstResult, $resultFirst);
array_push($lastResult, $resultLast);
array_push($emailResult, $resultEmail);

$firstValid = mysqli_result::fetch_array($firstResult);
$lastValid = mysqli_result::fetch_array($lastResult);
$emailValid = mysqli_result::fetch_array($emailResult);

//comparing query results to user input
foreach($firstResult as $comp) {
  if(strpos($firstname, $comp) !== false) {
    $firstname = true;
  } else {
    return false;
  }
}

foreach($lastResult as $comp) {
 if(strpos($lastname, $comp) !== false) {
    $lastname = true;
  } else {
    return false;
  }
}

foreach($emailResult as $comp) {
  if(strpos($email, $comp) !== false) {
    $email = true;
  } else {
    return false;
  }
}

//redirection if successful or if failure
$success = "../loggedin.php";
$failure = "../fail.php";

if($firstname && $lastname && $email = true) {
  header($success);
  exit();
} else {
  header($failure);
  exit();
}

$conn -> close();
?>

【问题讨论】:

  • 我能看到的第一件事是,您针对同一个表中的字段查询了 3 次 - 您可以改为 SELECT firstname, lastname, email FROM users;您还可以使用 WHILE 子句来查找您要查找的特定行,而不是在整个表中循环
  • 我想选择多个列,但不是用户 WHILE。谢谢,这会有所帮助。

标签: php database mysqli


【解决方案1】:

好的,正如已经告诉你的那样,第一件事是,你可以在一个查询中获取所有信息。但是如果你只想选择一行,你应该使用 WHERE 子句来告诉你要查找的内容。

检查一下:

<?php
$servername = "localhost";
$username = "jon";
$password = "test";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);
//test connection
if($conn -> connect_error) {
 die("Connection Error: " . $conn -> connect_error);
}

//input from the user . addslashes is for security, so they won't break your query and potentially abuse it.
$firstname = addslashes($_POST['first']);
$lastname = addslashes($_POST['last']);
$email = addslashes($_POST['email']);

//query for the database to select the columns
$query = "SELECT firstname, lastname, email FROM users WHERE firstname = '$firstname' and lastname = '$lastname' and email = '$email'";

//query results
$result = $conn -> query($query);

$numRows = $result->num_rows;

//redirection if successful or if failure
$success = "../loggedin.php";
$failure = "../fail.php";

if($numRows > 0) {
  header($success);
  exit();
} else {
  header($failure);
  exit();
}

$conn -> close();
?>

尚未对其进行测试,但其想法是检查查询中的匹配项,而不是事后检查。然后,如果有匹配项,它将返回至少一行(如果您正确定义了表格,则应该不可能有重复项)。

然后根据你的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2021-11-07
    相关资源
    最近更新 更多