2013-11-28 161 views
-1

我正在嘗試設置調查來衡量我們的電子商務客戶的客戶滿意度。調查通過電子郵件中的鏈接與URL中傳遞的訂單參考相關聯,以便調查頁面可以通過$ _GET全局檢索。該頁面會重新加載以驗證答案,然後應檢查是否已針對給定的訂單參考提交調查,然後提交併直接發送至感謝頁面,或者只是重定向至說明調查已提交的頁面。檢查記錄是否已經存在於數據庫中

我遇到的問題是mysqli_num_rows($ result)似乎總是返回值0,無論數據庫中有多少個條目!

sql查詢在phpmyadmin中正常工作,訂單參考格式爲1854/110913/01。任何想法,我已經嘗試過我可以在網上找到的每個例子,但它仍然無法正常工作。

if (isset($_GET[ref])) 
    { 
    $ord = test_input($_GET[ref]); 
    } 
else 
    { 
    $ord = test_input($_POST[ref]); 
    } 

$query = "SELECT count(*) FROM sat_survey WHERE ord_ref='$ord' "; 
$result = mysqli_query($con, $query); 

if (mysqli_num_rows($result) > 0) 
    { 
    // redirect to other page. 
    header('LOCATION: survey_duplicate.php'); 
    exit; 
    } 
else 
    { 
    // insert survey answers into database 
    $sql="INSERT INTO sat_survey (survey_id, ord_ref, website, q1, q1a, q2, q3, q4a, q4b, q4c, q5, q6, q7, q7a, q8, q9, q10, q11) 
    VALUES 
    ('null','$_POST[ref]','$_POST[web]','$_POST[q1]','$_POST[q1a]','$_POST[q2]','$_POST[q3]','$_POST[q4a]','$_POST[q4b]','$_POST[q4c]','$_POST[q5]','$_POST[q6]','$_POST[q7]','$_POST[q7a]','$_POST[q8]','$_POST[q9]','$_POST[q10]','$_POST[q11]')"; 

    if (!mysqli_query($con,$sql)) 
     { 
     die('Error: ' . mysqli_error($con)); 
     } 

    // close connection 
    mysqli_close($con); 

    // redirect to other page. 
    header('LOCATION: survey_complete.php'); 
    exit; 
    } 
+0

你的問題是一個重複的http://stackoverflow.com/questions/18065289/mysqli-num-rows-returns-1-no-matter-what –

+0

歡迎來到堆棧溢出。不幸的是,這個網站不是關於修復你的代碼。請按照此清單查看您的問題是否與主題相關:http://meta.stackexchange。com/questions/156810/stack-overflow-question-checklist –

回答

-1

其實如果你的表中有條目mysqli_num_rows($ result)應該根據你的代碼一直返回1。當您使用COUNT(*)時,即使計數爲零,也總是會返回一行。

再次在您的查詢中,您不必選擇所有列,您可以指定一列,最好選擇一列即主鍵。

$query = "SELECT count(survey_id) AS surveyCounts FROM sat_survey WHERE ord_ref='$ord' "; 

你將不得不要麼刪除count(*)或獲取COUNT(*)作爲變量的結果。

所以嘗試:

$row = mysqli_fetch_assoc($result); 
if ($row['surveyCounts'] > 0) //instead of if (mysqli_num_rows($result) > 0) 
+0

爲什麼要投票? –

0

如果我正確認識你,你要確保你不相同的順序號碼或電子郵件地址得到重複,對不對?

爲什麼不只是有一個查詢來檢查該訂單號碼或電子郵件是否已經在數據庫中,並返回一個類似「你已經提交響應」的響應,或者甚至是他們已經提交的響應。

我不確定mysql_num_rows是否是這樣做的最佳方式。如何改爲

$query = "SELECT email, response FROM sat_survey WHERE email_address='$email' "; 

或其他類似的東西?你可以做這樣的事情,如果

if ($email== $row['email']) { 
echo 'you have already submitted a response: <br />'; 
echo $response; 
} 
0

從PC休息後清除我的頭,並通過下面加上各種例子提到的在線檢查表有條不紊地去寫這篇

 $query = "SELECT count(*) FROM sat_survey WHERE ord_ref='$ord' "; 
     $result = mysqli_query($con, $query); 

     if (mysqli_num_rows($result) > 0) 

替換此

 $query = "SELECT survey_id, ord_ref FROM sat_survey WHERE ord_ref = '$_POST[ref]' "; 

     if ($result=mysqli_query($con,$query)) 
      { 
      // Return the number of rows in result set 
      $rowcount = mysqli_num_rows($result); 
      mysqli_free_result($result); 
      } 


     if ($rowcount >=1) 

現在它似乎很好地工作。

相關問題