任何人都可以帮助我...... 这是两个字段,一个是名称,另一个字段是电子邮件。 我想通过名称或电子邮件进行搜索,但它不起作用,它只按名称搜索
<?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>
如何在搜索姓名和电子邮件时获取数据?
答案 0 :(得分:8)
你有=你的电子邮件
$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。”%
答案 1 :(得分: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
语句选择用户名,因为它已经有匹配。
答案 2 :(得分: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."'";
任何一个都应该工作。如果您将OR
简单地更改为AND
,就像其他答案所示,它仍然无法正常工作。 user_email = '%".$email."%'" will find email addresses that start and end with
%`。
答案 3 :(得分:0)
Chinmay,我没有可用于测试的SQL Server,但是这里有一些可以尝试的事情可以解释原因。
如果你交换SQL表达式以便它首先测试user_email会发生什么?
或者只搜索user_email?
你能记录SQL以确认它是否正确?
正如詹姆斯所说,你是否打算在电子邮件上进行LIKE或平等搜索?
此外,由于您是直接从输入构建SQL(并且BTW将其打开以进行SQL注入攻击),因此“@”是MS SQL表达式中的特殊字符?
答案 4 :(得分:0)
很多专栏/ geeignetfürsehrviele Spalten / dla wielu kolumny的理想选择
<?php
//YOUR TABLE/DEINE TABELLE/TWOJA TABELA
$table="table";
//YOUR SEARCHSTRING/DEIN SUCHSTRING/SlOWO DO WYSZUKIWANIA
$nichtsichererstring="searchstring";
$suchstring=mysql_real_escape_string($nichtsichererstring);
$query = "SELECT * from ".$table." where ( ";
$results = mysql_query("DESCRIBE ".$table);
$zaehler=mysql_num_rows($results);
$x=1;
while($row = mysql_fetch_array($results)) {
$query = $query.$row["Field"]." LIKE '%".$suchstring."%' ";
if($x<$zaehler){
$query = $query." OR ";
}
$x++;
}
$query =$query.")";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
//YOUR RESULTS!/DEINE ERGEBNISE/TWOJE WYNIKI
echo $row["titel"];
}
?>