将 PHP 数组中的值与表单中的值进行比较


comparing values in a php array with values from a form

我一直在做一个小网站,该网站从表单中读取数据,然后将其与文件中的数据进行比较。文件上的数据存储在一系列数组中,然后与表单中的数据进行比较。如果表单中的数据与第一个数组中的数据匹配,则返回一个值,如果不是,则返回另一个值

<?php
$file = fopen("Student.txt", "a+") or exit("Unable to open file!");
$StudentID = array();
$StudentPassword = array();
$StudentFname = array();
$StudentLname = array();
$StudentDOB = array();
$StudentGPA = array();
$x = 0;
$return = 0;
while(!feof($file))
  {
  $StudentID[$x] = fgets($file). "<br>";
  $StudentPassword[$x] = fgets($file). "<br>";
  $StudentFname[$x] = fgets($file). "<br>";
  $StudentLname[$x] = fgets($file). "<br>";
  $StudentDOB[$x] = fgets($file). "<br>";
  $StudentGPA[$x] = fgets($file). "<br>";
  $x = $x + 1;
  }
  $ID = $_POST["StudentID"];
  $Pass = $_POST["StudentPass"];
  $First = $_POST["StudentFname"];
  $last = $_POST["StudentLname"];
  $DOB = $_POST["D.O.B."];
  $GPA = $_POST["GPA"];
  for ($y=0; $y<$x; $y++){
      if (strcmp($ID,$StudentID[$y]) != 0){
         $return = 1;
         echo "duplicate found";
         $y = $x;
      }
      else{
          $return = 2;
      }
  }
  echo "<br>";
  echo $return;
fclose($file);
?> 

但是,无论文件中的数据如何,它始终输出数据相同时将获得的值。 要比较的两个数据值是帖子中的 ID 值(名为 $ID)和值数组$StudentID

获取数据的形式是这样的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
     <title>Student Addition</title>
     <meta http-equiv="content-type" 
        content="text/html;charset=utf-8" />
     <link rel="stylesheet" type="text/css" href="ExternalCss3.css"/>
</head>
    <script>
    function validateForm()
{
var a=document.forms["my_form"]["StudentID"].value;
var b=document.forms["my_form"]["StudentPass"].value;
var c=document.forms["my_form"]["StudentFname"].value;
var d=document.forms["my_form"]["StudentLname"].value;
var e=document.forms["my_form"]["D.O.B."].value;
var f=document.forms["my_form"]["GPA"].value;
if (a==null || a=="")
  {
  alert("ID must be filled out");
  return false;
  }
  if (b==null || b=="")
  {
  alert("password must be filled out");
  return false;
  }
  if (c==null || c=="")
  {
  alert("First Name must be filled out");
  return false;
  }
  if (d==null || d=="")
  {
  alert("Last Name must be filled out");
  return false;
  }
    if (e==null || e=="")
  {
  alert("Date of Birth must be filled out");
  return false;
  }
    if (f==null || f=="")
  {
  alert("GPA must be filled out");
  return false;
  }
}
</script>
<body>
    <Table class = "dataform" Border = "0" WIDTH = "325">
    <TR>
    <TD COLSPAN = "2">
    <form action = "ConfirmStudentAdd.php" method="post" name="my_form" onsubmit="return validateForm()">
        Student ID: <input type="text" name="StudentID"><br>
        Student Password: <input type="password" name="StudentPass"><br>
        Student First Name <input type="text" name="StudentFname"><br>
        Student Last Name <input type="text" name="StudentLname"><br>
        Student D.O.B. <input type="text" name="D.O.B."><br>
        Student GPA <input type="text" name="GPA"><br>
         <input type="submit" value="Send Message">
    </form>
    <TD>
    </TR>
    </Table>
    <p class = "Login">
    <img src = "UWITStudentAddLogo.png" alt="Student Addition"/>
    </p>
</body>
</html>

数据提交没有问题,问题是 PHP 代码。任何可能的帮助将不胜感激

理论上,您正在做的事情根据 PHP 手册页 http://us1.php.net/strcmp 看起来很合理

我建议你把它插入你的for循环中,并仔细查看输出。

echo 'id: ' . $ID. ' Student: ' . $studentID[$y] . ' Comp: ' . strcmp($ID,$StudentID[$y]);

您可能会发现进入循环的数据不是您所期望的。