it-swarm.com.de

Suchabfrage aus mehreren Feldern MySQL

Jeder kann mir helfen ... Hier sind zwei Felder, eines ist Name und ein anderes ist E-Mail. Ich möchte nach Name oder E-Mail suchen, aber es funktioniert nicht, es wird nur nach Name gesucht

<?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>

Wie bekomme ich die Daten, wenn ich nach Name und E-Mail suche?

4
Chinmay235

Sie haben = für Ihre E-Mail

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

Sollte sein

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

Andernfalls ohne das Gleiche wie bei E-Mails, versucht es buchstäblich (=), E-Mails in Ihrer Datenbank abzugleichen, die% ". $ Email" sind. "%

8
James

es gibt einen großen Unterschied zwischen AND- und OR- Anweisung. Wenn Sie sowohl in der E-Mail als auch im Namen einen Treffer erzielen möchten, verwenden Sie AND. Wenn Sie% -Variablen verwenden, verwenden Sie LIKE anstelle des =-Operators, da der letzte die Werte für die Gleichheit vergleicht, während LIKE durch Abgleich mit den Werten vergleicht.

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

Der Unterschied zwischen AND und OR liegt in ihren Wertefeldern. 

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

(b1 = Benutzername oder b2 = E-Mail-Adresse) Aus diesem Grund wird der Benutzername nur mit einer OR-Anweisung ausgewählt, da er bereits übereinstimmt.

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

Sie können nicht = verwenden und Ihre Variable in% einschließen.

versuche dies:

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

oder dieses:

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

Entweder sollte man arbeiten. Wenn Sie die OR einfach in eine AND ändern, wie die andere Antwort vermuten lässt, funktioniert sie immer noch nicht richtig. user_email = '%".$email."%'" will find email addresses that start and end with% `. 

2
wesleywmd

Ideal für viele Kolumnen/geeignet für sehr viele 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"];
            }

?>
0
xxxxxx

Chinmay, ich habe keinen SQL Server zum Testen, aber hier sind ein paar Dinge, die man ausprobieren könnte, die ein wenig Licht auf die Ursache werfen könnten.

Was passiert, wenn Sie den SQL-Ausdruck austauschen, um zuerst user_email zu testen?
Oder NUR nach user_email suchen?
Können Sie das SQL protokollieren, um zu bestätigen, dass es korrekt ist?
Und wie James sagt, beabsichtigen Sie, eine LIKE- oder Gleichstellungssuche in der E-Mail durchzuführen?

Da Sie das SQL direkt aus der Eingabe erstellen (und BTW, die es für einen SQL-Injection-Angriff offen lässt), ist "@" ein Sonderzeichen in MS SQL-Ausdrücken?

0
Michael Lemaire