我需要一些关于如何设置此页面的帮助。假设我有一个包含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>
答案 0 :(得分:2)
我正在向刚开始使用PHP的人写这篇文章。如果他们是PHP专业人士,我向OP道歉,但这个网站适合所有人!
所以,我建议你这样做:
了解其工作原理后,请了解如何使用prepared statements。这样可以保护您免受SQL injections *
一旦你理解了这两件事是如何运作的。您只需制作一个HTML表单(这很容易找到Google的帮助),然后使用$ _GET或$ _POST访问用户的输入并获取您的信息。 (如果您不理解GET和POST之间的区别,请查看它!)
如果你能学到这些东西,那么你将会很顺利。另外,了解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注入。