Php 使用函数和if-else的多个搜索表单
嗨,我正在使用PHP、HTML、SQL和函数创建一个多搜索表单,例如,我有3个搜索字段Firstname、lastname和email。我会让用户从其中任何一个输入,因此我需要if-else语句,但要满足所有条件,需要大量if-else,因此我考虑使用函数输出表,并在数据库查询后将其放入if-else中。但是,如果我这样做,它似乎无法在数据库中搜索,它将输出“0个结果”,但如果我删除该函数并将其放在脚本的末尾,我可以在db中搜索,但它无法检测到我的else条件,即“您尚未输入任何值”Php 使用函数和if-else的多个搜索表单,php,mysql,function,if-statement,Php,Mysql,Function,If Statement,嗨,我正在使用PHP、HTML、SQL和函数创建一个多搜索表单,例如,我有3个搜索字段Firstname、lastname和email。我会让用户从其中任何一个输入,因此我需要if-else语句,但要满足所有条件,需要大量if-else,因此我考虑使用函数输出表,并在数据库查询后将其放入if-else中。但是,如果我这样做,它似乎无法在数据库中搜索,它将输出“0个结果”,但如果我删除该函数并将其放在脚本的末尾,我可以在db中搜索,但它无法检测到我的else条件,即“您尚未输入任何值” 函数che
函数checkres()
{
//获取对数据库的查询
$result=mysqli\u查询($conn,$sql);
//检查结果
如果(mysqli_num_行($result)>0)
{
//标题
回声“;
回声“;
回显“图像ID”;
呼应“姓氏”;
呼应“名字”;
回应“电子邮件”;
回显“电话号码”;
回声“;
//每行的输出数据
while($row=mysqli\u fetch\u assoc($result))
{
回声“;
回显“$row['ID']”;
回显“$row['LastName']”;
回显“$row['FirstName']”;
回显“$row['Email']”;
回显“$row['PhoneNumber']”;
回声“;
}
回声“;
}否则{
回显“0结果”;
}
}
如果(!empty($sfname)&&empty($slname)&&empty($semail))
{
$sql=“从用户名类似“%”的用户列表中选择*”$sfname.“%”;
checkres();
}
如果(!empty($sfname)&&!empty($slname)&&empty($semail))则为else
{
$sql=“从用户名类似“%”和姓氏类似“%”的用户列表中选择*”;
checkres();
}
其他的
{
回显“您尚未输入任何值”;
}
mysqli_close($conn);
?>
这是新的
<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());
}
function checkres()
{
//Get query on the database
$result = mysqli_query($conn, $sql);
//Check results
if (mysqli_num_rows($result) > 0)
{
//Headers
echo "<table border='1' style='width:100%'>";
echo "<tr>";
echo "<th>Image ID</th>";
echo "<th>Lastname</th>";
echo "<th>Firstname</th>";
echo "<th>Email</th>";
echo "<th>PhoneNumber</th>";
echo "</tr>";
//output data of each row
while($row = mysqli_fetch_assoc($result))
{
echo "<tr>";
echo "<td>".$row['ID']."</td>";
echo "<td>".$row['LastName']."</td>";
echo "<td>".$row['FirstName']."</td>";
echo "<td>".$row['Email']."</td>";
echo "<td>".$row['PhoneNumber']."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "0 results";
}
}
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);
$sql = "select * from Userlist";
for($i = 0; $i < count($arr); $i++){
if(!empty($arr[$i])){
if($i > 0){
$sql.= " AND ".$arr[$i];
}else{
$sql.= " WHERE ".$arr[$i];
}
}
}
}else{
echo "You must enter at least one value";
}
checkres();
mysqli_close($conn);
?>
名字:
姓氏:
电子邮件:
在我看来,您所做的有点令人困惑(程序流结构的n个术语有点奇怪)。
您可以简单地为输入字段使用一个变量数组,然后通过该数组循环生成SQL语句。因此,您的HTML表单如下所示:
<form method="post" action="#" id="searchform">
First Name:<br />
<input type="text" name="queryArray[FirstName]" />
<br />Last Name:<br />
<input type="text" name="queryArray[LastName]" />
<br />Email:<br />
<input type="text" name="queryArray[Email]" />
<br />
<input type="submit" name="submit" value="Search" />
</form>
function checkres()
{
//Get query on the database
$result = mysqli_query($conn, $sql);
//Check results
if (mysqli_num_rows($result) > 0)
{
//Headers
echo "<table border='1' style='width:100%'>";
echo "<tr>";
echo "<th>Image ID</th>";
echo "<th>Lastname</th>";
echo "<th>Firstname</th>";
echo "<th>Email</th>";
echo "<th>PhoneNumber</th>";
echo "</tr>";
//output data of each row
while($row = mysqli_fetch_assoc($result))
{
echo "<tr>";
echo "<td>".$row['ID']."</td>";
echo "<td>".$row['LastName']."</td>";
echo "<td>".$row['FirstName']."</td>";
echo "<td>".$row['Email']."</td>";
echo "<td>".$row['PhoneNumber']."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "0 results";
}
}
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);
$sql = "select * from Userlist";
for($i = 0; $i < count($arr); $i++){
if(!empty($arr[$i])){
if($i > 0){
$sql.= " AND ".$arr[$i];
}else{
$sql.= " WHERE ".$arr[$i];
}
}
}
}else{
echo "You must enter at least one value";
}
checkres();
mysqli_close($conn);
?>
下面列出了SQL生成的工作原理示例。您有一些错误:
$sql = "select * from Userlist where FirstName LIKE '%". $sfname ."%' AND LastName LIKE '%". %slname. "%'";
您有%slname而不是$slname
另一个错误是在程序流程中。在两种情况下,将达到您的else条件,即“您尚未输入任何值”:
当所有字段都留空时
当所有字段都充满值时
你不会想要的。您必须改进逻辑,并在此基础上构建查询,可以这样做:
<form method="post" action="#" id="searchform">
First Name:<br />
<input type="text" name="queryArray[FirstName]" />
<br />Last Name:<br />
<input type="text" name="queryArray[LastName]" />
<br />Email:<br />
<input type="text" name="queryArray[Email]" />
<br />
<input type="submit" name="submit" value="Search" />
</form>
function checkres()
{
//Get query on the database
$result = mysqli_query($conn, $sql);
//Check results
if (mysqli_num_rows($result) > 0)
{
//Headers
echo "<table border='1' style='width:100%'>";
echo "<tr>";
echo "<th>Image ID</th>";
echo "<th>Lastname</th>";
echo "<th>Firstname</th>";
echo "<th>Email</th>";
echo "<th>PhoneNumber</th>";
echo "</tr>";
//output data of each row
while($row = mysqli_fetch_assoc($result))
{
echo "<tr>";
echo "<td>".$row['ID']."</td>";
echo "<td>".$row['LastName']."</td>";
echo "<td>".$row['FirstName']."</td>";
echo "<td>".$row['Email']."</td>";
echo "<td>".$row['PhoneNumber']."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "0 results";
}
}
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);
$sql = "select * from Userlist";
for($i = 0; $i < count($arr); $i++){
if(!empty($arr[$i])){
if($i > 0){
$sql.= " AND ".$arr[$i];
}else{
$sql.= " WHERE ".$arr[$i];
}
}
}
}else{
echo "You must enter at least one value";
}
checkres();
mysqli_close($conn);
?>
函数checkres()
{
//获取对数据库的查询
$result=mysqli\u查询($conn,$sql);
//检查结果
如果(mysqli_num_行($result)>0)
{
//标题
回声“;
回声“;
回显“图像ID”;
呼应“姓氏”;
呼应“名字”;
回应“电子邮件”;
回显“电话号码”;
回声“;
//每行的输出数据
while($row=mysqli\u fetch\u assoc($result))
{
回声“;
回显“$row['ID']”;
回显“$row['LastName']”;
回显“$row['FirstName']”;
回显“$row['Email']”;
回显“$row['PhoneNumber']”;
回声“;
}
回声“;
}否则{
回显“0结果”;
}
}
如果(!empty($sfname)| |!empty($slname)| |!empty($semail)){
$emailQueryPart=!empty($semail)?“类似于“$semail”的电子邮件:”;
$lastnameQueryPart=!empty($slname)?“类似于“%$slname%”的LastName:“”;
$firstnameQueryPart=!empty($sfname)?“类似于“%$sfname%”的名字:“”;
$arr=数组($emailQueryPart、$lastnameQueryPart、$firstnameQueryPart);
$sql=“从用户列表中选择*”;
对于($i=0;$i0){
$sql.=“和”$arr[$i];
}否则{
$sql.=“其中”$arr[$i];
}
}
}
}否则{
echo“您必须输入至少一个值”;
}
checkres();
mysqli_close($conn);
?>
谢谢,我必须更改echo$sql并放置$result=mysqli\u查询($conn,$sql);不客气。。。是的,你现在就必须执行它。替换你的部件代码(if-else-if语句)并运行你的checkers函数。对不起,我有点困惑(我对此很不了解)我似乎无法在数据库中搜索,你能检查一下我在上面代码中放置的代码吗?我编辑了我的帖子我编辑了我的答案。现在复制并粘贴。您可能无法搜索db表,因为缺少带有LIKE语句的%符号。似乎我仍然无法在db中搜索,即使我执行了此“%$semail%”,它只返回0个结果
function checkres()
{
//Get query on the database
$result = mysqli_query($conn, $sql);
//Check results
if (mysqli_num_rows($result) > 0)
{
//Headers
echo "<table border='1' style='width:100%'>";
echo "<tr>";
echo "<th>Image ID</th>";
echo "<th>Lastname</th>";
echo "<th>Firstname</th>";
echo "<th>Email</th>";
echo "<th>PhoneNumber</th>";
echo "</tr>";
//output data of each row
while($row = mysqli_fetch_assoc($result))
{
echo "<tr>";
echo "<td>".$row['ID']."</td>";
echo "<td>".$row['LastName']."</td>";
echo "<td>".$row['FirstName']."</td>";
echo "<td>".$row['Email']."</td>";
echo "<td>".$row['PhoneNumber']."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "0 results";
}
}
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);
$sql = "select * from Userlist";
for($i = 0; $i < count($arr); $i++){
if(!empty($arr[$i])){
if($i > 0){
$sql.= " AND ".$arr[$i];
}else{
$sql.= " WHERE ".$arr[$i];
}
}
}
}else{
echo "You must enter at least one value";
}
checkres();
mysqli_close($conn);
?>