【问题标题】:How can i compare result of $_POST["fname"],.... with the records in a table?如何将 $_POST["fname"],.... 的结果与表中的记录进行比较?
【发布时间】:2017-12-09 16:28:18
【问题描述】:

学生将他的凭据输入到来自:

<form action="index.php" id="courseform" method="post">
Enter Your First Name: <input type="text" name="fname"><br><br>
Enter Your Last Name: <input type="text" name="lname"><br><br>
Enter Your Student Number: <input type="text" name="student_nr"><br><br>
  <input type="submit">
</form>

我有一张学生记录表如下:

Database changed
mysql> explain student;

    +-----------+-------------+------+-----+---------+-------+
    | Field     | Type        | Null | Key | Default | Extra |
    +-----------+-------------+------+-----+---------+-------+
    | id        | char(6)     | NO   | PRI | NULL    |       |
    | firstname | varchar(30) | NO   |     | NULL    |       |
    | lastname  | varchar(30) | NO   |     | NULL    |       |
    | email     | varchar(50) | YES  |     | NULL    |       |
    +-----------+-------------+------+-----+---------+-------+

4 rows in set (0.05 sec)

如何验证表格中输入的 3 个值 'fname'、'lname' 和 'id'(=student_nr) 是否完整有效,即:存在于表格中?

我尝试了以下方法,但没有成功:

<?php
include 'parameter_conn.php';
$link = mysqli_connect("$server","$user","$pass","$db");

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }else {
      echo "Connection Successful" . "<br>";
  }

if (isset($_POST['fname'],$_POST['lname'],$_POST['student_nr'])) { 
 $fname = $_POST["fname"]; 
 $lname = $_POST["lname"];
 $student_nr = $_POST["student_nr"]; 
}
$result_student = mysqli_query($link, "SELECT * FROM student");
$rows_student = mysqli_num_rows($result_student);

if($fname === $result_student['firstname'] && $lname === $result_student['lastname'] && $student_nr === $result_student['id']) {
    echo 'found';
} else {
    echo 'not found';
}

【问题讨论】:

  • 你的代码中$result_student 是从哪里来的?
  • 请显示您用于创建这些变量的代码。
  • Randall,DrKey,感谢您的反馈,这是完整的 php 代码。

标签: php mysql forms post


【解决方案1】:

您可以在 sql 语句中使用 where clouse 并简单地检查您是否获得了匹配的行。请注意,以下内容非常不安全并且容易发生 SQL 注入 (https://en.wikipedia.org/wiki/SQL_injection),但它说明了目的。考虑使用 PDO

$fname = $POST['fname'];
$email = $POST['email'];
// .. all other fields

$sql = "SELECT id, firstname, lastname, email FROM studentsTable WHERE firstname='".$fname."' AND lastname='".$lname."' AND email='".$email."'";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // match found
} else {
  // no match
}

【讨论】:

  • 是的。但要小心 SQL 注入。仅用于教育视角。
  • Imox:感谢您的反馈,您说的完全正确。我稍后将使用:mysqli_real_escape_string 来保护它们。
  • Evans M. 非常感谢 Evans 的帮助。!感谢您的建议,我的方向是正确的。
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 2012-02-24
  • 2020-06-15
  • 2020-03-21
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2012-12-18
相关资源
最近更新 更多