我有一个数据库,我正在搜索和显示结果,每个php查询都在自己的文件中,通过使用正文中的require_once(ect)调用。
它们都链接到同一个提交按钮,但我只想运行输入文本的按钮。
所以我有 4 个搜索框,每个都有自己的文件,它只是搜索数据库中的不同列。
我只想显示"未找到结果"或如果用户在该搜索框中键入任何内容并提交时找到的结果数量。
正在发生的事情是代码正在工作,但我从其他文件中得到了其他 3 个"未找到结果",即使用户没有尝试在该字段中搜索。
我觉得有一个简单的解决方案,但我只是想不通,提前感谢。
<?php
$stmtArtist = $mysqli->prepare("SELECT artist, genre, event, venue, eventdate FROM events WHERE artist = ?");
$stmtArtist->bind_param('s', $_GET['searchArtist']);
$stmtArtist->execute();
$stmtArtist->bind_result($artist, $genre, $event, $venue, $eventdate);
$stmtArtist->store_result();
$numRows = $stmtArtist->num_rows;
if (isset($_GET['submit'])) {
if ($numRows <= 0) {
echo "no results found!";
} else {
echo "$numRows "." results found";
while ($stmtArtist->fetch()) {
$timestampDate = strtotime($eventdate);
$displayDate = date("D d M Y", $timestampDate);
echo "<table border=1>";
echo "<tr> <th>Artist</th> <th>Genre</th> <th>Venue</th> <th>Date</th> <th>Event</th> </tr>";
echo "<tr> <td>$artist</td> <td>$genre</td> <td>$venue</td> <td>$eventdate</td> <td>$event</td></tr>";
echo "</table>";
}
}
}
?>
当您提交表单并输入值时,尝试实际处理表单:
<?php
if (isset($_GET['submit']) && !empty($_GET['searchArtist'])) {
$stmtArtist = $mysqli->prepare("SELECT artist, genre, event, venue, eventdate FROM events WHERE artist = ?");
$stmtArtist->bind_param('s', $_GET['searchArtist']);
$stmtArtist->execute();
$stmtArtist->bind_result($artist, $genre, $event, $venue, $eventdate);
$stmtArtist->store_result();
$numRows = $stmtArtist->num_rows;
if ($numRows <= 0) {
echo "no results found!";
} else {
echo "$numRows results found <br/>";
echo "<table border=1>";
echo "<tr> <th>Artist</th> <th>Genre</th> <th>Venue</th> <th>Date</th> <th>Event</th> </tr>";
while ($stmtArtist->fetch()) {
$timestampDate = strtotime($eventdate);
$displayDate = date("D d M Y", $timestampDate);
echo "<tr> <td>$artist</td> <td>$genre</td> <td>$venue</td> <td>$eventdate</td> <td>$event</td></tr>";
}
echo "</table>";
}
}
?>
使用空代替,它既执行 isset(检查是否设置了变量/索引)又检查字符串是否为空,我听说它实际上也比 isset 更快......您还需要确保用户输入是理智的/对其进行清理。我只是在这里调用了一个叫做"sane"的函数,你必须自己写。
<?php
if (isset($_GET['submit']) && !empty($_GET['searchArtist']) && sane($_GET['searchArtist'])) {
$stmtArtist = $mysqli->prepare("SELECT artist, genre, event, venue, eventdate FROM events WHERE artist = ?");
$stmtArtist->bind_param('s', $_GET['searchArtist']);
$stmtArtist->execute();
$stmtArtist->bind_result($artist, $genre, $event, $venue, $eventdate);
$stmtArtist->store_result();
$numRows = $stmtArtist->num_rows;
if ($numRows <= 0) {
echo "no results found!";
} else{
echo "$numRows "." results found";
while ($stmtArtist->fetch()) {
$timestampDate = strtotime($eventdate);
$displayDate = date("D d M Y", $timestampDate);
echo "<table border=1>";
echo "<tr> <th>Artist</th> <th>Genre</th> <th>Venue</th> <th>Date</th> <th>Event</th> </tr>";
echo "<tr> <td>$artist</td> <td>$genre</td> <td>$venue</td> <td>$eventdate</td> <td>$event</td></tr>";
echo "</table>";
}
}
}
?>