2012-12-04 43 views
1

我正在使用以下腳本來檢查代碼,因此當用戶輸入調查代碼時,他們將獲得與該代碼關聯的調查。獲取調查的部分按照其預期的方式工作,但由於某種原因,我似乎無法得到錯誤消息。如果我在這篇文章的表格中輸入錯誤的代碼或沒有代碼,我所得到的只是一個空白頁面。空的MySQL查詢結果不能按預期工作?

<?php 
$con = mysql_connect("myhost","myuser","mypassword; 
if (!$con) { 
    die('Could not connect: ' . mysql_error()); 
} 

// Select mysql db 
mysql_select_db("mydb", $con); 

$questionaireID = $_POST['questionaireID']; 

$result = mysql_query("SELECT * FROM itsnb_questionaire WHERE questionaireID='$questionaireID'") or die(mysql_error()); 
while($row = mysql_fetch_array($result)) { 
    if (empty($row['questionaireID'])) { 
     echo '<h2>Sorry I cant find a quiz with that code, please recheck your code.</h2>'; 
    } else { 
     $url = $row['questionaireurl']; 
     header('Location: '.$url.''); 
    } 
} 
?> 
+1

這是因爲,第一CA mysql_fetch_array的ll將返回FALSE,這意味着while循環的內容永遠不會執行(當查詢返回一個空集時)。看看函數,如mysql_num_rows http://php.net/manual/en/function.mysql-num-rows.php,可以告訴你返回集包含多少行 – Bgi

+0

看起來你沒有關閉圓括號在您的$ con聲明 – luchosrock

回答

2

它永遠不會到達那裏,因爲如果結果集爲空,它將跳過while循環。

試試這個,而是限制爲1次的記錄(這是你所期望的),並使用if...else,而不是你while(當多個業績預期,而只需要):

$sql = "SELECT * 
     FROM itsnb_questionaire 
     WHERE questionaireID = '{$questionaireID}' 
     LIMIT 1"; 
$result = mysql_query($sql) or die(mysql_error()); 
if ($row = mysql_fetch_array($result)) { 
    $url = $row['questionaireurl']; 
    header('Location: '.$url.''); 
} else { 
    echo '<h2>Sorry I cant find a quiz with that code, please recheck your code.</h2>'; 
} 
+0

非常感謝您的幫助!,這就是它:-) –

+0

樂於幫助。 :)一個複選標記怎麼樣? ;) –

+0

只是在等待時間限制:-) –

1

如果數返回的行是零比你有沒有發現你的結果,因此可以顯示apropriate錯誤消息

嘗試

if (mysql_num_rows($result)<1){ 
    //error 
} 
+0

你能解釋更多關於你的答案中的代碼嗎?爲什麼應該嘗試這個代碼? –

+0

如果返回的行數爲零,則表示您沒有找到結果,因此您可以顯示適當的錯誤消息 – vodich

+0

將其添加到您的答案中。 –