您好我正在创建一个多重搜索表单,其中可以检测该字段是否没有任何值,并且仍会搜索1个或多个字段是否输入。但我似乎无法为此生成正确的sql语句。
<html>
<head>
<title>Search Contacts</title>
</head>
<body>
<h3>Search Contact Details</h3>
<form method="post" action="#" id="searchform">
First Name:<br>
<input type="text" name="fname">
<br>Last Name:<br>
<input type="text" name="lname">
<br>Email: <br>
<input type="text" name="email">
<br>
<input type="submit" name="submit" value="Search">
</form>
<?php
$sfname = $_POST["fname"];
$slname = $_POST["lname"];
$semail = $_POST["email"];
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
if(!empty($sfname) || !empty($slname) || !empty($semail)){
$emailQueryPart = !empty($semail) ? "Email LIKE '%$semail%'" : "";
$lastnameQueryPart = !empty($slname) ? "LastName LIKE '%$slname%'" : "";
$firstnameQueryPart = !empty($sfname) ? "FirstName LIKE '%$sfname%'" : "";
$arr = array($emailQueryPart, $lastnameQueryPart,$firstnameQueryPart);
$needsAnd = false;
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i] != "") {
if ($needsAnd) {
$sql .= " AND ";
}
$needsAnd = true;
$sql .= " " . $arr[$i];
}
}
}else{
echo "You must enter at least one value";
}
?>
</body>
</html>
已知问题。
1.即使我输入了一个值,“电子邮件”值也不显示,只显示
"select * from Userlist where "
2。如果我只输入名字和早期显示,我可能错了我如何放置我的if语句添加“AND” 样本结果是
"select * from Userlist where AND FirstName LIKE '%test%' "
答案 0 :(得分:3)
您可以使用implode函数加入$arr
值:
$email = filter_input(INPUT_POST, 'email');
$lname = filter_input(INPUT_POST, 'lname');
$fname = filter_input(INPUT_POST, 'fname');
$emailQueryPart = ($email) ? "Email LIKE '%{$email}%'" : null;
$lastnameQueryPart = ($lname) ? "LastName LIKE '%{$lname}%'" : null;
$firstnameQueryPart = ($fname != "") ? "FirstName LIKE '%{$fname}%'" : null;
$arr = array($emailQueryPart, $lastnameQueryPart, $firstnameQueryPart);
$sql = "select * from Userlist where ";
$sql .= implode(' AND ', array_filter($arr));
echo $sql;
答案 1 :(得分:2)
使用数组的内置功能:
$queryParts = array();
if (!empty($fname)) { $queryParts[] = "FirstName LIKE '%$fname%'"; }
if (!empty($lname)) { $queryParts[] = "LastName LIKE '%$lname%'"; }
if (!empty($email)) { $queryParts[] = "Email LIKE '%$email%'"; }
if (!empty($queryParts)) {
$sql = "select * from Userlist where (";
$sql .= implode(") and (", $queryParts);
$sql .= ");";
} else {
// display error
}
array()
方法创建一个空数组,$queryParts[]
语法附加到所述数组的末尾,implode
方法将数组元素放在一起(参见http://php.net/manual/de/function.implode.php )。
答案 2 :(得分:1)
试试这个解决方案:
$emailQueryPart = ($_POST['email'] != "") ? "Email LIKE '%" . $_POST['email'] . "%'" : "";
$lastnameQueryPart = ($_POST['lname'] != "") ? "LastName LIKE '%" . $_POST['lname'] . "%'" : "";
$firstnameQueryPart = ($_POST['fname'] != "") ? "FirstName LIKE '%" . $_POST['fname'] . "%'" : "";
$arr = array($emailQueryPart, $lastnameQueryPart, $firstnameQueryPart);
$sql = "select * from Userlist where";
$needsAnd = false;
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i] != "") {
if ($needsAnd) {
$sql .= " AND ";
}
$needsAnd = true;
$sql .= " " . $arr[$i];
}
}
} else {
echo "You must enter at least one value";
}
echo $sql;