Tout le monde peut m'aider ... Voici deux champs, l'un est le nom et un autre, l'adresse e-mail. Je souhaite effectuer une recherche par nom ou par e-mail, mais cela ne fonctionne pas, il recherche uniquement par nom.
<?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>
Comment obtenir les données lorsque je recherche à la fois le nom et l'adresse de messagerie?
Vous avez = pour votre email
$sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email ='%".$email."%'";
Devrait être
$sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email like '%".$email."%'";
Autrement, sans le même effet sur les courriers électroniques, il essaie littéralement (=) de faire correspondre les courriers électroniques de votre base de données qui sont% ". $ Email."%
il existe une différence majeure entre AND
- et OR
- statement. Si vous souhaitez utiliser à la fois l'adresse électronique et le nom, utilisez AND
. De même, si vous utilisez des variables%, utilisez LIKE
au lieu de l'opérateur =
, car le dernier compare les valeurs pour l'égalité, tandis que LIKE
compare en faisant correspondre les valeurs.
$sql=" SELECT * FROM users WHERE fname like '%".$name."%' AND user_email LIKE '%".$email."%'";
La différence entre AND
et OR
réside dans leurs champs de valeur.
b1 | b2 | OR | AND
****************************
true | true | true | true
true | false| true | false
false| true | true | false
false| false| false| false
(b1 = appuyez sur le nom d'utilisateur, b2 = appuyez sur le courrier électronique) c'est pourquoi vous ne sélectionnez que le nom d'utilisateur à l'aide d'une instruction OR
- car elle correspond déjà.
$sql=" SELECT * FROM users WHERE fname like '%".$name."%'
OR user_email ='%".$email."%'";
Vous ne pouvez pas utiliser =
et emballer votre variable in%
essaye ça:
$sql=" SELECT * FROM users WHERE fname like '%".$name."%'
OR user_email like '%".$email."%'";
ou ca:
$sql=" SELECT * FROM users WHERE fname like '%".$name."%'
OR user_email ='".$email."'";
Soit on devrait travailler. Si vous changez simplement la OR
en une AND
comme le suggère l'autre réponse, cela ne fonctionnera toujours pas correctement. user_email = '%".$email."%'" will find email addresses that start and end with
% `.
Idéal pour beaucoup de colonnes/geeignet pour se vanter de 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"];
}
?>
Chinmay, je n'ai pas de serveur SQL disponible pour effectuer des tests, mais voici certaines choses à essayer qui pourraient nous aider à mieux comprendre la cause.
Que se passe-t-il si vous permutez l'expression SQL pour qu'elle teste d'abord user_email?
Ou cherchez UNIQUEMENT user_email?
Pouvez-vous vous connecter le code SQL pour confirmer qu'il est correct?
Et comme le dit James, avez-vous l’intention de faire une recherche de type LIKE ou d’égalité dans le courrier électronique?
En outre, puisque vous construisez le code SQL directement à partir de l'entrée (et que BTW le laisse ouvert pour une attaque par injection SQL), le caractère "@" est-il un caractère spécial dans les expressions MS SQL?