У меня есть таблица 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 = '' - запрос работал, но я до сих пор не получил сообщение об ошибке.
Если кто-то может мне помочь, и если время позволит объяснить, почему я получаю эти результаты, я был бы очень благодарен.
У вас есть логическая ошибка в коде. Вы никогда не while($row = mysqli_fetch_array($result))
в цикл, потому что 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);
Обновите thanx до Ohgodwhy
Вы также можете пойти с улучшением $userinputone
:
if (isset($_POST['abc'])) {
$userinputone = $_POST['abc'];
}
else {
$userinputone = false;
}
или просто
$userinputone = isset($_POST['abc'])? $_POST['abc'] : false;
и затем обертывание всего $userinputone
запроса в проверку, действительно ли $userinputone
действительно установлен:
if(isset($userinputone)) {
...
}
$userinputone = isset($_POST['abc'])? $_POST['abc'] : false;
и, конечно,if(isset($userinputone)){
по крайней мере. +1 в любом случае.