我在查询“死”时遇到了一些麻烦。我正在使用html表单来搜索表格中的数据。现在,如果数据存在,查询工作完美显示我需要的一切。但如果我知道在我的代码中使用die存在数据,我希望它显示“获取数据时出错,请再次搜索”,但事实并非如此。一切都没有,绝对没有!你能看到代码中的任何错误吗?如果需要,我可以上传整个html文件。我已经看了几个小时,开始有点生气!感谢
if (isset($_POST['submitted'])) {
$category = $_POST ['category'];
$criteria = $_POST ['criteria'];
$query = "SELECT g.GameID, g.GameName, g.PubID, g.TimePeriodID, g.SettingID, g.MoodID, g.GameWeaponID, g.GameCameraAngleID, g.GamePlayerTypeID, g.GameDescription FROM GameTable g WHERE $category = '$criteria'"; //selecting all the data from the game table that makes the search criteria
$result = mysqli_query($dbcon, $query) or die("Error getting data please search again");
echo "<table class='col-md-12'>"; // displays the searched data as a table
while ($row = mysqli_fetch_array($result)) {
echo "<form class=col-md-6 action=searchgame.php method=post>";
echo "<tr> <th> Game ID</th> </tr>";
echo "<tr>";
echo "<td>" . "<input class=text-black type=text name=gameid readonly=readonly value=" . $row['GameID'] . " </td> <br>"; //here i have made the game Id read only so that it is not editable by the administrator
echo "<tr> <th> Game Name</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=gamename value=" .$row['GameName'] . " < /td> <br>"; // editable boxes so administator can update
echo "<tr> <th> Publisher ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=pubid value=" . $row['PubID'] . " < /td><br>";
echo "<tr> <th> Time Period ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=timeperiodid value=" . $row['TimePeriodID'] . " < /td><br>";
echo "<tr> <th> Setting ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=settingid value=" . $row['SettingID'] . " < /td> <br>";
echo "<tr> <th> Mood ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=moodid value=" . $row['MoodID'] . " < /td><br>";
echo "<tr> <th> Weapon ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=gameweaponid value=" . $row['GameWeaponID'] . " < /td><br>";
echo "<tr> <th> Camera Angle ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=gamecameraangleid value=" . $row['GameCameraAngleID'] . " < /td><br>";
echo "<tr> <th> Player ID</th> </tr>";
echo "<td>" . "<input class=text-black type=text name=gameplayertype value=" . $row['GamePlayerTypeID'] . " < /td><br>";
echo "<tr> <th> Game Description</th> </tr>";
echo "<td>" . "<textarea style=height:200px;width:300px; class=text-black type=text name=gamedescription value=>" . $row['GameDescription'] . "</textarea><br>";
echo "<td>" . "<input type=hidden name=hidden value=" . $row['GameID'] . " </td>";
echo "<td>" . "<input class=text-black input-button-rounded type=submit name=update value=Update" . " </td>"; //update button
echo "<td>" . "<input class=text-black input-button-rounded type=submit name=delete value=Delete" . " </td>"; //delete button
echo "</tr>";
echo"</form>";
}
echo "</table>";
}
?>
答案 0 :(得分:3)
这是您问题的关键部分
但如果我知道数据不存在
die没有做任何事情的原因是查询完成得很好,只是没有结果。
试试这个
if( !$result->num_rows ) die('please search again');
每个说法没有error
,只有空结果集。使用结果集num_rows
的属性将告诉您与搜索匹配的行数。在0
PHP的情况下,PHP会将其视为false
或!
。
只有当前面的方法返回false时才执行Die,当你从mysqli返回结果集对象时,情况并非如此。
很多人都不了解这是做什么的,或者只是不知道
$result = mysqli_query($dbcon, $query) or die("Error getting data please search again");
这大致相当于这个
if( ($result = mysqli_query($dbcon, $query)) || die("Error getting data please search again"));
我们只是跳过if,or
是一个逻辑运算符,你可以在if语句中使用就好了。使用OR
或||
的唯一区别是它们被评估时的优先级(或者我读了一些)。我从未在7年内将OR
置于if语句中...... lol
http://www.w3schools.com/php/php_operators.asp
if( ($result = mysqli_query($dbcon, $query)) OR die("Error getting data please search again"));
所有这一切都说明如果第一个条件在语句中是真的,因为OR不需要检查第二个语句。这就是全部。
答案 1 :(得分:0)
“我在查询'死'时遇到了一些麻烦。我正在使用html表单来搜索表中的数据。现在如果数据存在,查询工作完美地显示我需要的一切它也是。但如果我知道在我的代码中使用模具不存在数据,我希望它显示“获取数据时出错请再次搜索”,但事实并非如此。一切都没有,绝对没有!“
在多次阅读该问题之后,得出的结论是,您需要的是else {...}
的{{1}}语句。
“你能看到代码中的任何错误吗?”
答:不可以。您只需要使用if{...}
。
但是,如果您的查询在任何给定时间都失败了,您应该使用else{...}
检查实际错误。
修改强>
我确实需要声明您的代码对SQL注入是开放的。
使用准备好的陈述。
参考文献:
并在PHP.net上: