誰でも私を助けることができます...ここに2つのフィールドがあります。1つは名前で、もう1つは電子メールです。名前またはメールで検索したいのですが、機能せず、名前で検索するだけです
<?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>
名前とメールアドレスの両方を検索するときにデータを取得するにはどうすればよいですか?
あなたが持っている=あなたの電子メールのために
$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."%'";
それ以外の場合、電子メールに同様のものがない場合、文字通り(=)DB内の% "。$ email。"%の電子メールと一致させようとします。
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
ステートメントを使用してユーザー名のみを選択しています。
$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
% `。
多くのカラムに最適/geeignetfürsehrvieleSpalten/ 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、テストできるSQL Serverがありませんが、原因を明らかにするために試すべきことがいくつかあります。
SQL式を入れ替えてuser_emailを最初にテストするとどうなりますか?
またはuser_emailのみを検索しますか?
SQLをログに記録して、正しいことを確認できますか?
そして、ジェームズが言うように、あなたは電子メールでLIKEまたは平等検索をするつもりですか?
また、入力から直接SQLを構築しているので(そして、SQLインジェクション攻撃のためにSQLを開いたままにしているので)、「@」はMS SQL式の特殊文字ですか?