PHP에서 수있는 방법을 찾으려고 노력하고 하나의 SQL 문 여러 드롭 다운 상자에서 데이터를 결합하십시오. 나는 이것이 부분적으로 작동하도록 할 수있다.mysqli 쿼리 부분적으로 작동
$sql = "
SELECT *
FROM books
WHERE
author = '$bird'
AND genre = '$cat'
AND year= '$mouse'
AND publisher = '$goat'
";
$bird
, $cat
등 각 드롭 다운 상자에서 선택을 보유하고있는 변수 : 여기에 SQL 쿼리입니다. 결과가 서로 다릅니다. 4 개 모두 잘 작동하며 모두 모두 개별적으로 작동합니다.
그래서 작가, 장르, 연도 및 출판사 중에서 선택하고 작동 선택을 선택하면 이들을 개별적으로 선택하면 잘 작동합니다.
하지만 두 항목 만 선택하면 저자 및 연도를 가정 해 봅시다. 은 작동하지 않으며 다양한 잘못된 데이터를 생성 할 수 있습니다. 다음은 완전한 코드입니다. 어떤 도움을 주시면 감사 :
<html>
<head>
<title>My Page</title>
</head>
<body>
<br>
<form name="myform" action="authors3.php" method="POST">
<select name="author" size="2">
<option value="ken davies">ken davies</option>
<option value= "arthur smith">arthur smith</option>
<option value="gill rafferty">gill rafferty</option><br />
<option value="molly brown">molly brown</option><br />
<option value="gilbert riley">gilbert riley</option><br />
<input type = "submit" name = "submit" value = "go">
<select name="genre" size="4">
<option value="adventure">adventure</option>
<option value="biography">biography</option>
<option value="crime">crime</option><br />
<option value="romance">romance</option>
<option value="thriller">thriller</option>
<input type = "submit" name = "submit" value = "go">
<select name="year" size="4">
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<input type = "submit" name = "submit" value = "go">
<select name="publisher" size="4">
<option value="blue parrot">blue parrot</option>
<option value="yonkers">yonkers</option>
<option value="zoot">zoot</option>
<input type = "submit" name = "submit" value = "go">
<?php
$bird = (!empty($_POST['author'])) ? $_POST['author'] : null;
$cat = (!empty($_POST['genre'])) ? $_POST['genre'] : null;
$mouse = (!empty($_POST['year'])) ? $_POST['year'] : null;
$goat = (!empty($_POST['publisher'])) ? $_POST['publisher'] : null;
$con = mysql_connect("localhost","root","");
If (!$con) {
die("Can not Connect with database" . mysql_error());
}
mysql_select_db("authors",$con);
if (isset($bird) && isset($cat) && isset($mouse) && isset($goat)){
$sql = "SELECT * FROM books WHERE author = '$bird'
AND genre = '$cat' AND year = '$mouse' AND
publisher = '$goat' ";
}
else if (isset($bird)) {
$sql = "SELECT * FROM books WHERE author = '$bird' ";
}
else if (isset($cat)) {
$sql = "SELECT * FROM books WHERE genre = '$cat' ";
}
else if (isset($mouse)) {
$sql = "SELECT * FROM books WHERE year = '$mouse' ";
}
else if (isset($goat)) {
$sql = "SELECT * FROM books WHERE publisher = '$goat' ";
}
$myData = mysql_query($sql,$con);
echo"<table border=1>
<tr>
<th>id</th>
<th>author</th>
<th>title</th>
<th>publisher</th>
<th>year</th>
<th>genre</th>
<th>sold</th>
</tr>";
while($record = mysql_fetch_array($myData)){
echo "<tr>";
echo "<td>" . $record['id'] . "</td>";
echo "<td>" . $record['author'] . "</td>";
echo "<td>" . $record['title'] . "</td>";
echo "<td>" . $record['publisher'] . "</td>";
echo "<td>" . $record['year'] . "</td>";
echo "<td>" . $record['genre'] . "</td>";
echo "<td>" . $record['sold'] . "</td>";
echo "<tr />";
}
echo "</table>";
mysql_close($con);
?>
note: all four are working<br />
all work individually<br />
two or three dont work together
</form>
</body>
</html>
를 쿼리를 편집하고 안전하게 매개 변수를 관리 할 수있는 내가 PDO를 사용하는 것이 좋습니다 것 때문에 조금 까다 롭습니다라고 한 추천 where 절의 일부는 필요하지 않은 경우 조건부입니다. 지금 그들이 장르를 선택하지 않으면, 예를 들어 당신의 선택은'WHERE author = 'x'AND genre = ''(또는 아무것도 아닌가?) AND ...'어디서'WHERE author = ' x 'AND 년 ...'. 필요에 따라 콤보가 선택되지 않은 경우 와일드 카드를 채워서 장르를 허용하려면 'AND genre ='% '...'로 설정해야합니다. – topshot
확인 : http://stackoverflow.com/questions/14540135/how-to-create-a-dynamic-where-clause – SandroMarques