我有一个SQL表如下:
prim auto inc | hdate | nvs | vsa | batch1number | batch2number |
我正在进行sql查询,其目的是将用户输入与第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()语法,并尝试应用我的一些变量。我很确定它与$ count == 0部分有关,并尝试添加其他运算符,如|| batch1number =''&amp;&amp; batch1number ='' - 查询有效,但我仍然没有收到错误消息。
如果有人可以帮助我,如果时间允许解释为什么我会得到这些结果,我将非常感激。
答案 0 :(得分: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);
更新 thanx到Ohgodwhy
您可能还希望改进$userinputone
:
if (isset($_POST['abc'])) {
$userinputone = $_POST['abc'];
}
else {
$userinputone = false;
}
或只是
$userinputone = isset($_POST['abc'])? $_POST['abc'] : false;
然后将整个查询事件包装成检查$userinputone
是否确实设置:
if(isset($userinputone)) {
...
}