我的网站上有关于事件管理的数据表,我想根据事件的“名称”和“类型”向表中添加搜索功能。
这是我的代码,我得到错误,当用户提交搜索时,我需要刷新页面并过滤表格中的结果,但是这段代码打开了一个完全干净的样式表的新页面:
我需要根据用户在搜索文本框中输入的内容来过滤我的表格 你可以在我问过的上一个问题中看到我的表格 请提供简单的答案,我是php的新手。
<form action="search.php" id="searchform" method="POST" class="searchbox-container">
<input type="text" id="searchbox" placeholder="Search" name="searchbox" class="searchbox" />
<select name="select" id="select">
<option value="type">Type</option>
<option value="name">Name</option>
</select>
<input type="submit" name="search" class="searchbox-btn" value="Go" />
<?php
if(isset($_POST['searchbox']) && $_POST['searchbox'] !=""){
$search=preg_replace('#[^a-z 0-9?!]#i','',$_POST['searchbox']);
$user="admin";
$pass="neehahs";
$host="localhost";
$db_name="eventregisteration";
$con=mysqli_connect($host, $user, $pass, $db_name);
if(mysqli_connect_errno($con)){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if($_POST['select']=="type"){
$sqlcommand="SELECT * FROM eventform WHERE event_type LIKE "%$search%"";
}
elseif($_POST['select']=="name"){
$sqlcommand="SELECT * FROM eventform WHERE event_name LIKE "%$search%""; ===>> this line give Division by zero error
}
$sqldata=mysqli_query($con,$sqlcommand) ==>> this line give mysqli_query(): Empty query error
or die("Error Getting Data");
$count=mysqli_num_rows($sqldata);
if($count>1){
while($row=mysqli_fetch_array($sqldata)){
echo "<table>";
echo "<tr align=center><td>";
echo $row['event_code'];
echo "</td><td>";
echo $row['event_name'];
echo "</td><td>";
echo $row['event_type'];
echo "</td><td>";
echo $row['event_level'];
echo "</td><td>";
echo $row['start_date'];
echo "</td><td>";
echo $row['end_date'];
echo "</td><td>";
echo $row['points'];
echo "</td><td>";
echo $row['pic'];
echo "</td><td>";
echo $row['video'];
echo "</td><td>";
echo $row['description'];
echo "</td></tr>";
}
echo "</table>";
}else{
$search_output="<hr/>0 Results for<strong>$sqldata</strong><hr/>$sqlcommand";
}
}
?>
答案 0 :(得分:2)
您的SQL字符串在双引号内有双引号。这打破了字符串,然后百分号导致PHP认为你正在进行模数运算。
改变这个:
$sqlcommand="SELECT * FROM eventform WHERE event_type LIKE "%$search%"";
对此:
$sqlcommand="SELECT * FROM eventform WHERE event_type LIKE '%$search%'";
你需要为两个字符串都这样做。
答案 1 :(得分:2)
您错误地使用了引号,因此%
子句中的LIKE
通配符将被视为模数运算符。
$sqlcommand = "SELECT * FROM eventform WHERE event_name LIKE " % $search % "";
^---- ----^ ^ ^-- --^ ^ ^^
该陈述看起来像这样:
$sqlcommand = 'foo' % 'bar' % 'baz';
在上面的语句中,字符串将首先按类型转换为整数。这将使所有字符串等于零 - 这可以解释为什么你会收到Division by zero
错误。
将此(以及所有其他类似变量)更改为:
$sqlcommand = "SELECT * FROM eventform WHERE event_name LIKE '%$search%'";
如果$search
来自用户输入,那么您有一个SQL注入漏洞。我建议使用参数化查询来防止这种情况。有关详细信息,请参阅this question。