4

任何人都可以帮助我...这是两个字段,一个是名称,另一个字段是电子邮件。我想按姓名或电子邮件搜索,但它不起作用,只能按姓名搜索

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("chinmay", $con) or die("ERROR");


if(isset($_REQUEST['submit'])){
    $name=$_POST['name'];
    $email=$_POST['email'];
    $sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email ='%".$email."%'";
    $q=mysql_query($sql);
}
else{
    $sql="SELECT * FROM users";
    $q=mysql_query($sql);
}
?>
<form method="post">
    <table width="200" border="1">
  <tr>
    <td>Name</td>
    <td><input type="text" name="name" value="<?php echo $name;?>" /></td>
    <td>Email</td>
    <td><input type="text" name="email" value="<?php echo $email;?>" /></td>
    <td><input type="submit" name="submit" value=" Find " /></td>
  </tr>
</table>
</form>
<table>
    <tr>
        <td>Name</td>
        <td>Email</td>
        <td>Address</td>
    </tr>
    <?php
    while($res=mysql_fetch_array($q)){
    ?>
    <tr>
        <td><?php echo $res['fname'].' '.$res['lname'];?></td>
        <td><?php echo $res['user_email'];?></td>
        <td><?php echo $res['address'];?></td>
    </tr>
    <?php }?>
</table>

当我搜索姓名和电子邮件时如何获取数据?

4

3 回答 3

11

你有 = 你的电子邮件

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email ='%".$email."%'";

应该

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email like '%".$email."%'";

否则,如果没有类似的电子邮件,它实际上是 (=) 尝试匹配数据库中的任何电子邮件,即 %".$email."%

于 2013-08-10T12:10:04.317 回答
3

AND- 和 -语句之间有一个主要区别OR。如果您想同时点击电子邮件和姓名,请使用AND. 此外,如果您使用 % 变量,请使用LIKE而不是=运算符,因为最后一个比较值是否相等,而LIKE通过匹配值进行比较。

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' AND user_email LIKE '%".$email."%'";

AND和之间的区别在于OR它们的值字段。

 b1  |  b2  |  OR  |  AND
****************************
true | true | true | true
true | false| true | false
false| true | true | false
false| false| false| false

(b1 = 点击用户名,b2 = 点击电子邮件)这就是为什么它只使用OR- 语句选择用户名,因为它已经有一个匹配项。

于 2013-08-10T12:06:17.493 回答
2
$sql=" SELECT * FROM users WHERE fname like '%".$name."%' 
        OR user_email ='%".$email."%'";

你不能使用=和包装你的变量%

尝试这个:

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' 
       OR user_email like '%".$email."%'";

或这个:

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' 
       OR user_email ='".$email."'";

任何一个都应该工作。如果您简单地将其更改ORAND其他答案所建议的那样,它仍然无法正常工作。user_email = '%".$email."%'" will find email addresses that start and end with%`。

于 2013-08-10T12:10:56.833 回答