如何创建特定列的搜索?

时间:2013-11-25 01:13:23

标签: php mysql

如何使用特定字段搜索搜索数据库?此代码还需要从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>';

}
?>

2 个答案:

答案 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参数化字段名称,因此您必须对其进行大量处理。