如何使用特定字段搜索搜索数据库?此代码还需要从SQL注入中获得保护,但这是用于学习目的的基本代码。数据库连接但不显示数据。请帮忙!
这是html输入表单。
<h2>Search</h2>
<form name="search" action="searchresults.php" method="POST">
Seach for: <input type="text" name="find" /> in
<Select NAME="field">
<Option VALUE="firstName">First Name</option>
<Option VALUE="lastName">Last Name</option>
<Option VALUE="email">email</option>
</Select>
<input type="hidden" name="searching" value="yes" />
<input type="submit" name="search" value="Search" />
</form>
这是基本连接和表输出。一些代码可能会丢失。
<?php
mysql_connect("127.0.0.1", "root", "pass") or die(mysql_error()) ;
mysql_select_db("users") or die(mysql_error()) ;
// We preform a bit of filtering
$find = strtoupper($find);
$find = strip_tags($find);
$find = trim ($find);
$email=$_POST['email'];
$find=$_POST['find'];
$field=$_POST['field'];
$data="SELECT firstName, lastName, email FROM userInfo WHERE upper($field) LIKE '% $find%'";
$result = mysql_query($data);
$count=mysql_numrows($result);
if($count > 0){
echo '<table align="center" width="800" border="0" cellpadding="4">';
echo '<tr height = 200><td>';
echo "<h1><font size='4' color='red'>Search Results</h1></font>";
echo "<table>";
echo "<table border='0' width='750' align='center'>";
echo "
<td width='30%' align='center'>First Name</td>
<td width='30%' align='center'>Last Name</td>
<td width='40%' align='center'>Email</td>";
echo "</tr>";
$row_number = 1;
while ($row = mysql_fetch_array($data)) {
$id= $row["id"];
$firstName= $row["firstName"];
$lastName= $row["lastName"];
$email= $row["email"];
for ($i=0; $i<3; $i++) {
echo"<td><font size =\"4\" color=\"black\"> $row[$i]</td>";
}
echo"</tr>";
$row_number++;
}
echo "</table>";
echo '</td></tr>';
echo '</table>';
}
?>
答案 0 :(得分:0)
$ data =“SELECT firstName,lastName,email FROM userInfo WHERE upper($ field)LIKE'%$ find%'”;
那个空间 喜欢'%$ find%'“;
可能不正确
答案 1 :(得分:0)
这是因为upper($field)
返回字符串,而不是您可能期望的列名。
Sql的构建方式类似'FIRSTNAME'(as string) LIKE '% BOB%'
,这是假的(因为字符串'FIRSTNAME'不包含'BOB'。
还有一个问题,在$ find之前包含两个空格,即使用户试图找到'BOB',db也找不到'BOB',因为它在BOB之前不包含两个空格。
要使这项工作,你必须在sql世界之外准备列名,如下所示:
$searchField = strtoupper($field);
$data="SELECT firstName, lastName, email FROM userInfo WHERE `$searchField` LIKE '%$find%'";
请注意,无法使用prepare语句AFAIK参数化字段名称,因此您必须对其进行大量处理。