2013-11-28 2 views
-1

Я пытаюсь настроить опрос, чтобы оценить удовлетворенность клиентов наших клиентов электронной коммерции. Опрос связан с помощью ссылки в электронном письме с информацией о заказе, переданной в URL-адресе, поэтому страница опроса может получить ее через $ _GET global. Страница перезагружается для проверки ответов, затем она должна проверить, было ли опрос уже отправлен для данной справки заказа, а затем либо отправить, либо отправить страницу благодарности или просто перенаправить на страницу, где ранее было представлено опрос.Проверка того, что запись уже существует в базе данных

Проблема заключается в том, что mysqli_num_rows ($ result) всегда возвращает значение 0 независимо от количества записей в db!

Запрос 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 ($ результат) должен возвращать 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

После перерыва от компьютера, чтобы очистить мою голову и методично через контрольный список указанных ниже плюс различные примеры онлайн написал

 $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) 

и теперь, похоже, работает красиво.

Смежные вопросы