设置一个mysql"搜索"页

时间:2011-11-21 22:28:24

标签: php mysql sql

我需要一些关于如何设置此页面的帮助。假设我有一个包含5个左右数据字段的mysql表(即id,firstname,lastname,喜欢的颜色,最喜欢的数字)。我想让用户能够搜索表格,因此我创建了一个“搜索”页面。

在页面上,我将有ID,姓氏和名字的文本字段。从这里,用户将插入数据以进行搜索。我想我很困惑的是如何编写一个脚本,从文本字段中采用不同的搜索条件,并忽略留空的字段。例如,如果用户只输入名字或姓氏,则将显示具有相同名字/姓氏的所有条目。如果他们只插入id(将是唯一的),那么将显示该用户的所有内容。如果他们同时输入姓氏和姓氏,那么将显示具有该姓氏和姓氏的条目的所有数据。

我认为这是基本的,但我是新手,所以任何有关如何设置它的帮助将不胜感激。

代码更新:

<?php
//Connect and select database

//if user wants to search
if(isset($_POST['submit']))
{

$sqlConditions = array();

if(isset($_POST['id'])){
$id = filter_var($_POST['id'], FILTER_VALIDATE_INT);
$sqlConditions[] = 'id = ' . $id;
} else {
$id = 0;
}

if(isset($_POST['firstname'])){
$firstName = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
$sqlConditions[] = 'firstname = ' . $firstName;
} else {
$firstName = '';
}

if(isset($_POST['lastname'])){
$lastName = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
$sqlConditions[] = 'lastname = ' . $lastName;
} else {
$lastName = '';
}

$query = 'SELECT * FROM students WHERE ' . join (' AND ', $sqlConditions);

//print query
while ($row = $query->fetch_row())
{
  print "LastName = " . $row[0] . " FirstName = " . $row[1].
"Favorite Color = " . $row[2] . " Favorite Number = " . $row[3] . "<br /><br />\n";
}

}
?>


<html>
<body>
<form method = "POST" action = "<?php echo $_SERVER['PHP_SELF']; ?>">
<p>ID:<input type = "id" id="id" name="id" size="20" maxlength="40" /></p>
<p>First Name:<input type = "firstname" id="firstname" name="firstname" size="20" maxlength="40" /></p>
<p>Last Name:<input type = "lastname" id="lastname" name="lastname" size="20"    maxlength="40" /></p>
<input type="submit" id="submit" name ="submit" value="Search" />

</form>
</body>
</html>

3 个答案:

答案 0 :(得分:2)

我正在向刚开始使用PHP的人写这篇文章。如果他们是PHP专业人士,我向OP道歉,但这个网站适合所有人!

所以,我建议你这样做:

  1. 编写一个能够connect的简单脚本,并从填充的表格中选择/显示信息。
  2. 了解其工作原理后,请了解如何使用prepared statements。这样可以保护您免受SQL injections *

  3. 等操作的影响
  4. 一旦你理解了这两件事是如何运作的。您只需制作一个HTML表单(这很容易找到Google的帮助),然后使用$ _GET或$ _POST访问用户的输入并获取您的信息。 (如果您不理解GET和POST之间的区别,请查看它!)

  5. 如果你能学到这些东西,那么你将会很顺利。另外,了解LIKE的工作原理对你也有好处:

    SELECT stuff FROM myTable WHERE someCondition LIKE '%Me%'

    * (如果你从这个答案中学到一件事记住这一点)

答案 1 :(得分:1)

您的“搜索”页面是什么语言?

一般来说,你只需要先找出用户完成的哪些元素,即不是空的。如果你在谈论一个网页,你可以使用javascript来确定一个字段是否为空。

然后你应该有不同的查询,具体取决于在php中编写的字段组合来执行查询并获得结果。

if (lastnameStr!=null)
 {
  <?php
  $result = mysql_query('SELECT lastname FROM tableName );
  if (!$result) {
  die('Invalid query: ' . mysql_error());
  ?>
 }
else
 { 
....
 }
}

答案 2 :(得分:0)

您可以尝试以下方法:

步骤1:从POST获取数据,验证它并构成未来的sql条件

$sqlConditions = array();

if(isset($_POST['Id'])){
  $id = filter_var($_POST['Id'], FILTER_VALIDATE_INT);
  $sqlConditions[] = 'Id = ' . $id;
} else {
  $id = 0;
}

if(isset($_POST['FirstName'])){
  $firstName = filter_var($_POST['FirstName'], FILTER_SANITIZE_STRING);
  $sqlConditions[] = 'FirstName = ' . $firstName;
} else {
  $firstName = '';
}

if(isset($_POST['LastName'])){
  $lastName = filter_var($_POST['LastName'], FILTER_SANITIZE_STRING);
  $sqlConditions[] = 'LastName = ' . $lastName;
} else {
  $lastName = '';
}

第2步:撰写查询

$query = 'SELECT * FROM your_table WHERE ' . join (' AND ', $sqlConditions);

当然,您需要使用mysql_real_escape_string或一些现代方法作为PDO,以确保避免SQL注入。