2012-08-15 152 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)); 
相關問題