2013-11-28 91 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) 

现在它似乎很好地工作。

相关问题