对此可能有一个简单的答案,但我不能为我的生活让这个工作。
我正在使用PHP和MySQL,并且设置了这样的东西:
$studentname = mysql_real_escape_string($_POST['sname']);
$studentnumber = mysql_real_escape_string($_POST['snumber']);
$course = mysql_real_escape_string($_POST['courseselect']);
$bike3 = mysql_query("SELECT stoodnumber FROM bikes505 WHERE stoodname='" . $studentname . "'");
$bikestoods = mysql_fetch_array($bike3);
while($row = mysql_fetch_array($stoodlistq))
{
$stoodentname = $row['stoodname'];
$stoodentnumber = $row['stoodnumber'];
//$coursename = $row2['coursename'];
//$coursecode = $row2['coursecode'];
if($studentname == $stoodentname && $studentnumber == $stoodentnumber){
//$success = 1;
//$success = "yupp";
//echo "SUCCESS, WE CAN REGISTER YOOOU!";
echo "<br>";
//echo "INSERT INTO " . $course . "";
switch($course){
case "Biking Safely":
if($studentnumber = $bikestoods[0] or $bikestoods[1]){
echo "Sorry, this student has already registered";
} else if($bikecurrent < $bikemax){
mysql_query("INSERT INTO bikes505 VALUES ('" . $stoodentname . "','" . $stoodentnumber . "')");
echo "Yay, successfully registered " . $stoodentname . " - " . $stoodentnumber . " for " . $course;
echo "<br>";
} else{
echo "Sorry, class is full!";
}
break;
......等等。我遇到的唯一问题是,如果我有两个同名学生,列表中的第二个将回应信息不正确。
例如,MySQL表有'standname'和'standnumber',如果'Jimmy St.James','1010'和'Jimmy St.James','1090'都是表中的记录,它只会让我在课程中注册吉米1010,而不是吉米1090。
我对我的验证方式感到茫然吗?还是我错过了一些非常明显的东西?起初我认为这只是因为我只使用了数组$bikestoods[0]
中的第一项,所以我将其更改为$bikestoods[0] or $bikestoods[1]
,但仍然无效。
答案 0 :(得分:1)
根据评论,您将$stoodlistq
定义为:
$stoodlistq = mysql_query("SELECT * FROM stoodinfo");
稍后,您使用以下代码块:
$studentname = mysql_real_escape_string($_POST['sname']);
$studentnumber = mysql_real_escape_string($_POST['snumber']);
...
while($row = mysql_fetch_array($stoodlistq)) {
...
if($studentname == $stoodentname && $studentnumber == $stoodentnumber){
此代码中的while()
循环遍历每条记录,但if-statement
检查POST变量。 POST变量构成了“一个学生”的单一组合 - 因此,您只能获得一个可以注册的学生。
要解决此问题,您需要更新提交“学生姓名”/“学号”的表单以接受多个输入 - 或将if-statement
更新为只检查学生的姓名(这可能导致更不希望的情况)。
答案 1 :(得分:0)
您正在查询stoodname
。当你做这样的事情时,通过一个可以重复的值来做这个语句是不好的。也许您希望他们使用用户名和密码登录,或者使用您提供给他们的ID,但除非有人在这里有更好的想法,否则我认为您无法通过名称来实现。
答案 2 :(得分:0)
$bikestoods = mysql_fetch_array($bike3);
仅引用bike3
查询的第一个结果,并且只有2个cols:[0]和[standnumber] no [1]。如果你想收集所有在bike3中的id,你必须诅咒一次结果。
while($stoodnumbers[] = mysql_fetch_array($bike3));