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

时间:2013-11-16 00:37:40

标签: php arrays forms

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

<?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代码。任何可能的帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

理论上,基于PHP手册页http://us1.php.net/strcmp

,您所做的事情看起来很合理

我建议你将它插入到for循环中并仔细查看输出。

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

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