2012-12-04 4 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

시도 apropriate 오류 메시지를 표시 할 수 있으므로 사용자의 결과를 찾을 수없는 것보다 제로 ll의 mysql_fetch_array는 FALSE를 반환하는데, 이는 while 루프의 내용이 결코 실행되지 않는다는 것을 의미한다 (쿼리가 빈 세트를 반환 할 때). mysql_num_rows http://php.net/manual/en/function.mysql-num-rows.php와 같은 함수를 살펴보면 return set에 얼마나 많은 행이 있는지 알 수 있습니다. – Bgi

+0

괄호를 닫지 않은 것처럼 보입니다. 귀하의 $ con 명세서에 – luchosrock

답변

2

결과 집합이 비어 있으면 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

수의 경우 :

(당신이 기대하는 것입니다) 1 개 레코드로 제한하고 대신 while (복수의 결과가 예상 될 때 잠시 동안 만 필요)의 if...else을 사용하는 대신에,이 시도 반환 된 행은 당신이

이 처음 캘리포니아 때문이다

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

답안의 코드에 대해 더 자세히 설명해 주시겠습니까? 이 코드를 왜 사용해야합니까? –

+0

반환 된 행 수가 0보다 작 으면 결과가 표시되지 않습니다. 따라서 적절한 오류 메시지 – vodich

+0

을 표시 할 수 있습니다. –

관련 문제