我一直在一个小型网站上工作,该网站从表单中读取数据,然后将其与文件中的数据进行比较。文件上的数据存储在一系列数组中,然后与表单中的数据进行比较。如果表单中的数据与第一个数组中的数据匹配,则返回一个值,否则返回另一个值
<?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代码。任何可能的帮助将不胜感激
答案 0 :(得分:0)
理论上,基于PHP手册页http://us1.php.net/strcmp
,您所做的事情看起来很合理我建议你将它插入到for循环中并仔细查看输出。
echo 'id: ' . $ID. ' Student: ' . $studentID[$y] . ' Comp: ' . strcmp($ID,$StudentID[$y]);
您可能会发现进入循环的数据不是您所期望的。