首先,请允许我说我是数据库和PHP的新手。我有一个html表单,我试图用来过滤我的PHP结果。我不能为我的生活弄清楚如何设置它,以便表单可以过滤每个可能的输入,更不用说没有任何重复的条目。我认为在这里遇到的困难是有这么多标准可以过滤。我的表单包含,复选框,要排序的下拉列表,只需要搜索标题列的文本字段,以及在特定日期范围之间搜索的另一组文本字段。我正在失去它试图解决这个问题。请帮帮我。
这是我的HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Anime Database Search</title>
<link href="vignette.css" rel="stylesheet" type="text/css">
<link href="body.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="banner">
<p class="vignette"><img id="banner" src="Banners/SAO Banner.jpg" alt="Sword Art Online Banner" height="200px" width="100%"/></p>
</div> <!-- end banner -->
<div id="wrapper">
<header>
<hgroup>
<h2>Anime Database Search</h2>
</hgroup>
</header>
<form id="search" action="database.php" method="GET">
<b>Title:</b>
<br>
<input type="text" name="search_box" value="" />
<br>
<br>
<b>Release Date:</b>
<br>
<input type="us-date1" name="mindate"> to <input type="us-date2" name="maxdate">
<br>
<br>
<b>Licensing Type:</b>
<br>
<select name="license">
<option selected value="title">Licensing</option>
<option value="dubbed">Dubbed Titles Only</option>
<option value="subbed">Subbed Titles Only</option>
</select> <!-- end license -->
<br>
<br>
<b>Genres:</b> <div id="genres">
<div id="left">
<input type="checkbox" name="action">Action</input><br>
<input type="checkbox" name="action">Adventure</input><br>
<input type="checkbox" name="action">Comedy</input><br>
<input type="checkbox" name="action">Drama</input><br>
<input type="checkbox" name="action">Fantasy</input><br>
<input type="checkbox" name="action">Horror</input><br>
<input type="checkbox" name="action">Magic</input><br>
<input type="checkbox" name="action">Mecha</input><br>
</div> <!-- end left -->
<div id="right">
<input type="checkbox" name="action">Mystery</input><br>
<input type="checkbox" name="action">Psychological</input><br>
<input type="checkbox" name="action">Romance</input><br>
<input type="checkbox" name="action">Science Fiction</input><br>
<input type="checkbox" name="action">Slice of Life</input><br>
<input type="checkbox" name="action">Supernatural</input><br>
<input type="checkbox" name="action">Thriller</input><br>
</div> <!-- end right -->
</div> <!-- end genres -->
<br>
<br>
<div id="Sort_By">
<b>Sort By:</b>
<br>
<select name="Sort" required>
<option value="">Select One</option>
<option selected value="rating">Rating</option>
<option value="alphabetical">Alphabetical</option>
<option value="released">Release Date</option>
</select> <!-- end Sort -->
</div> <!-- end Sort_by -->
<br>
<div id="search_buttons">
<input type="submit" name="submit" value="Search">
<input type="reset" value="Reset">
</div> <!-- end search_button -->
</form> <!-- end search -->
</div> <!-- end wrapper -->
</body>
</html>
这是我的PHP代码:
<?php
// Include DB Connection File
include "connection.php";
?>
<!-- Stylesheet for Table -->
<style>
<?php
include "php_results.css"
?>
</style>
<?php
$query = "SELECT * FROM my_anime_combined";
$fetch = mysql_query($query) or die($dberror1);
?>
<head>
<title>Results</title>
</head>
<button onclick="history.go(-1);">Return To Search </button>
<table width="100%" cellpadding="5" border="1">
<tr>
<td id="results"><strong>Title</strong></td>
<td id="results"><strong>Genre</strong></td>
<td id="results"><strong>Season</strong></td>
<td id="results"><strong>Episodes</strong></td>
<td id="results"><strong>Released</strong></td>
<td id="results"><strong>Media Type</strong></td>
<td id="results"><strong>Sub/Dub</strong></td>
<td id="results"><strong>Status</strong></td>
<td id="results"><strong>Rating</strong><br><p>(5 stars)</p></td>
</tr>
<?php
while($row = mysql_fetch_assoc($fetch)){ ?>
<tr>
<td id="title"><?php echo $row['Title']; ?></td>
<td id="genre"><?php echo nl2br($row['Genre']); ?></td>
<td id="results"><?php echo $row['Season']; ?></td>
<td id="results"><?php echo $row['Episodes']; ?></td>
<td id="results"><?php echo $row['Released']; ?></td>
<td id="results"><?php echo $row['Type']; ?></td>
<td id="results"><?php echo $row['Licensing']; ?></td>
<td id="results"><?php echo $row['Status']; ?></td>
<td id="results"><?php echo $row['Rating']; ?></td>
</tr>
<?php
} //end $fetch
?>
</table>
答案 0 :(得分:1)
您的复选框缺少值,其名称也应为数组。
编辑。这仅仅是出于指导原因,您需要在用户输入后对每个全局进行清理。谢谢你提醒这个@Brian Showalter
input type="checkbox" name="action[]" value="action">Action</input><br />
<input type="checkbox" name="action[]" value="adventure">Adventure</input><br />
<input type="checkbox" name="action[]" value="comedy">Comedy</input><br />
在你的位置我会做动态的mysql查询,根据用户的选择而改变并抛出他想要的数据。
$stmt = 'Select * FROM my_table WHERE ';
if(count($_POST['action']) > 1){
foreach($_POST['action'] as $action) {
$stmt.= 'genre =' . $action . ' OR genre=';
}
$stmt = trim($stmt, ' OR genre=');
} elseif(count($_POST['action']) == 1) {
foreach($_POST['action'] as $action){
$stmt.= 'genre=' . $action;
}
}else {
$stmt = trim($trim, ' WHERE ');
}
.edit:例如你可以在上面添加,这实际上取决于你将如何构造你的SQL语句。以上只会选择所有记录。
$stmt -- now you have here full statement will all action filters.
接下来,您可以添加标题和许可证:
$stmt.=' AND title=' . ' $_POST['title'] . ' AND license =' . $_POST['license'];`
你必须尝试构建一个有效的查询,只需要var_dump或print_r来查看你得到的内容。
将其余条件粘贴到$ stmt并执行它。其余的相当简单。
上面的代码将循环遍历所有类型字段并粘贴到您的SQL QUERY上,您不必再担心该字段了。
通过胶水,我的意思是为你的$ stmt添加其余的条件。
以下是基于日期选择的基本示例:
SELECT * FROM `la_schedule` WHERE `start_date` > '2012-11-18';