2012-08-15 249 views
0

对此可能有一个简单的答案,但是我不能让我的生活得到这个工作。具有相同名称,不同ID的多个MySQL记录

我使用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'都是表中的记录,它将会只允许我在课程中注册Jimmy 1010而不注册Jimmy 1090.

我刚刚离开我的验证方式吗?或者我错过了一些非常明显的东西?起初,我认为这只是因为我只使用数组$bikestoods[0]中的第一项,所以我将其更改为$bikestoods[0] or $bikestoods[1],但它仍然无效。

+0

检查它是否在阵列中,在它的任何位置。 PS:按名称检查通常是一个真正的痛苦。真正独特的数据如SSN或其他更好 – Alfabravo 2012-08-15 14:38:30

+0

您正在使用'while($ row = mysql_fetch_array($ standslistq))',但我没有在任何地方看到'$ standslistq'作为MySQL结果。它在哪里定义? – newfurniturey 2012-08-15 14:38:38

+0

对不起,@ newfurniturey它被定义为'$ standinglistq = mysql_query(“SELECT * FROM standsinfo”)'我有几百行代码,所以我不想复制和粘贴所有信息 – WizardOfLoss 2012-08-15 15:07:16

回答

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只核对学生的姓名(其中可能会导致更不希望的情况)。

+0

谢谢你,我转过身来,第一个检查现在是一个'in_array()',它检查学生号码,然后检查名字和一切工作正常和花花公子 – WizardOfLoss 2012-08-16 03:55:15

0

您正在查询中查找stoodname。当你这样做这样的事情时,不能用可重复的值来做这些陈述。也许你想让他们用一个用户名和密码登录,或者用一个你给他们的ID登录,但除非有人在这里有一个更好的主意,我认为你不能通过这个名字来完成。

0
$bikestoods = mysql_fetch_array($bike3); 

仅指bike3查询的第一结果和只具有2个COLS:[0]和[stoodnumber]没有[1]。如果你想收集所有骑自行车3的ID,你必须诅咒一次结果。

while($stoodnumbers[] = mysql_fetch_array($bike3)); 
相关问题