2014-11-16 3 views
0

У меня есть таблица SQL следующим образом:получение результата из PHP SQL, но мое сообщение «нет результата» не отображается

prim auto inc | hdate | nvs | vsa | batch1number | batch2number |

Я выполняю запрос sql, целью которого является сравнение ввода пользователей с столбцом interst 1 и интересующей колонкой 2. Если в любом из столбцов есть значение, я получаю результаты в раскрывающемся списке выбора. - Эта часть работает.

<?php 
include 'config.php'; 

$userinputone=$_POST['abc']; 

$userinputone = mysqli_real_escape_string($con,$userinputone); 
$sql = "SELECT * FROM handover WHERE batch1number = '".$userinputone."' OR   

batch2number = '".$userinputone."' "; 
$result = mysqli_query($con,$sql); 



while($row = mysqli_fetch_array($result)) { 

$count=mysqli_num_rows($result); 
if($count==0){ 

echo "</br></br></br></br></br><p> No Matching results found</p>"; 
} 

else{  
echo "<select>"; 
echo "<option>" . $row['batch1number'] . $row['batch2number'] . "</option>"; 
echo "</select>"; 
} 
} 

mysqli_close($con); 

Однако, когда я печатаю (или не печатаю!) В пустой записи, мое сообщение «нет соответствующих результатов» не выводится. Вместо этого я получаю все свои результаты, включая пустые в выпадающих меню. Также, когда я ввожу значение, которое не соответствует, я просто получаю пустую страницу и сообщение. Я просмотрел синтаксис empty(), предложенный по соответствующему вопросу, и попытался применить некоторые из моих переменных. Im довольно уверен, что это связано с частью $ count == 0 и попробовал добавить дополнительные операторы, такие как || batch1number = '' & & batch1number = '' - запрос работал, но я до сих пор не получил сообщение об ошибке.

Если кто-то может мне помочь, и если время позволит объяснить, почему я получаю эти результаты, я был бы очень благодарен.

ответ

1

У вас есть логическая ошибка в коде. Вы никогда не войдете в цикл, потому что while($row = mysqli_fetch_array($result)) возвращает false с самого начала. Что вам нужно:

<?php 
include 'config.php'; 

$userinputone=$_POST['abc']; 

$userinputone = mysqli_real_escape_string($con,$userinputone); 
$sql = "SELECT * FROM handover WHERE batch1number = '".$userinputone."' OR   

batch2number = '".$userinputone."' "; 
$result = mysqli_query($con,$sql); 

$count=mysqli_num_rows($result); 

if($count==0){ 
    echo "</br></br></br></br></br><p> No Matching results found</p>"; 
} 

else{ 
    while($row = mysqli_fetch_array($result)) { 
     echo "<select>"; 
     echo "<option>" . $row['batch1number'] . $row['batch2number'] . "</option>"; 
     echo "</select>"; 
    } 
} 

mysqli_close($con); 

Update Thanx к Ohgodwhy

Вы также можете пойти с улучшением $userinputone:

if (isset($_POST['abc'])) { 
    $userinputone = $_POST['abc']; 
} 
else { 
    $userinputone = false; 
} 

или просто

$userinputone = isset($_POST['abc'])? $_POST['abc'] : false; 

, а затем обертывание е весь запрос, что в проверке, если $userinputone действительно установлено:

if(isset($userinputone)) { 
    ... 
} 
+1

Я хотел бы также предложить '$ userinputone = Исеть ($ _ POST [ 'а'])? $ _POST ['abc']: false; 'и, конечно,' if (isset ($ userinputone)) {'как минимум. +1 в любом случае. – Ohgodwhy

+0

Cheers @Nordenheim & ohgodwhy. Он разобрал мою проблему. Nordenheim исправил проблему с сообщением об ошибке, как было задано. Но добавление $ userinputone = isset ($ _ POST ['abc]) фиксировало пустой запрос, поскольку я все еще получал пустые выделения. Еще раз спасибо –

+0

Im пытается +1 Ohgodwhy, но, похоже, пока не имеет необходимых полномочий. Возможно, я задаю слишком много вопросов. Так что большое спасибо, надеюсь, хватит. –

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