2017-01-01 13 views
1

私はチェックボックスの検索に取り組んでいます。私はPHPが初めてです。誰かが私を助けることができたら、私はそれを感謝します。基本的に、ユーザーは必要なオプションをチェックして、送信をヒットし、チェックボックスのオプションに一致する結果が表示されます。チェックボックスの値は、Mの場合はM、女性の場合はFがMYSQLテーブルのデータと一致します。PHP MYSQLチェックボックスの検索

ユーザがチェックボックス「男性」(以下のコードを参照)をチェックすると、MYSQLテーブルに「男性」の値が「M」のデータがすべて返されます。チェックされていないチェックボックスは無視されます。ユーザーはオプション 'Male'が 'M'(true)にしか関心がないためです。

要約すると、チェックされたチェックボックスを考慮に入れて、PHPによって選択されたユーザーをエコーするように検索する必要があります。おかげ

テーブルは次のようになります。

id  name  address gender race 
------------------------------------------- 

1. 1 Lee  NY   M  French 
2. 2 James LA   M  Colombian 
3. 3 Kashi JAPAN  F  Japanese 

と私はこのようなチェックボックスを持つフォームを持っている:

<form action="shortlist.php" method="post"> 
<label for="sel1">Gender:</label> 
Male:<input name="keyword[]" type="checkbox" value="M" /> 
Female:<input name="keyword[]" type="checkbox" value="F" /> 
<button name = "myBtn" type="submit" class="btn btn- default">Search</button> 
</form> 

SQL:私はエコーと仮定してい

$sql="SELECT name, address,gender,race FROM talent1 WHERE gender = $gender'"; 

このようなもの:

echo "<table width='100%'>\n"; 
//if (mysqli_num_rows($result) > 0){ 
//$row=mysqli_fetch_assoc($result); 
//$muchneededid = $row["talent_id"]; 
    while ($row=mysqli_fetch_assoc($result)) 
     echo'<tr>'."\n"; 
     echo '<tr>'; 
     echo '<th>Name</th>'; 
     echo '<th>Address</th>'; 
     echo '<th>Gender</th>'; 
     echo '</tr>'; 
     echo "<td>{$row["name"]}</td>\n" . "<td>{$row["address"]}</td>\n" . "<td>{$row["gender"]}</td>\n"; 
     echo '</tr>'."\n"; 
     echo "</table>\n"; 
     } 
     else 
     { 
     echo "0 results"; 
     } 
     mysqli_close($conn); 
     } 
+0

あなたのhtmlに_no_チェックボックスがあります。あなたは 'select-options'を意味しますか? – Jeff

+0

しかし、基本的には 'checkbox 'm'がSQLに追加された場合のようにsmthです" OR GENDER = 'M' "' – Jeff

+1

申し訳ありませんが、私は間違ったコードを貼り付けました。 – struppy

答えて

2

我々はそれがこのようなものになるだろう持っている情報与えられた:

<?php 
//$_POST['keyword'] = array("M", "F"); 
$sql_addon = ''; // EDIT: this was one line below first, which of course created an 'undefined' error. 
if(isset($_POST['keyword'])) { 

    foreach($_POST['keyword'] as $k => $val) { 
     $sql_addon.= " OR gender='$val'"; 
    } 
} 
$sql="SELECT name, address,gender,race FROM talent1 WHERE 1=1 "; 
if($sql_addon) { 
    $sql .= " AND (1=2 ".$sql_addon.")"; 
} 
echo $sql; 
// SELECT name, address,gender,race FROM talent1 WHERE 1=1 AND (1=2 OR gender=M OR gender=F) 
?> 

者= 1 1と1 = 2は愚かに見えるかもしれないが、それは(私見)そのSQLを生成する最も簡単な方法です。 1 = 2は偽の値を作成するため、オプションがクリックされていないとレコードが表示されません。

+1

素晴らしい、私はあなたがそれを追加した1 = 2の部分についてのコメントを書いていました。また、私はそれが文字だから '$ val'を一重引用符で囲む必要があると思います... – EhsanT

+0

はい、あなたは絶対に正しいです....私はそれを変更します、ありがとう! – Jeff

+0

返事をありがとう。私はちょっとこの未定義変数のトラブルシューティングで失われています:sql_addon on line 18 名前、住所、性別、競争相手の選択FROM talent1 WHERE 1 = 1 – struppy