我在PHP中有一个简单的表单,有4个复选框。用户可以选择0-4个复选框,根据选择结果,结果应该不同。
基本上,四个复选框代表大学的四个校区 - 校园A,B,C,D。并假设用户选择2个校园说A和C.然后我想根据选择查询数据库并检索对应于这两个校园A和C的课程。如果用户只选择一个校园然后我想要检索课程在那个单一的校园里。
在mySQL上,我有一个Location表,其中包含以下架构(ID,校园名称,城市,州),ID为主键。我还有一个课程表,其架构为课程(ID,CourseName,LocationID,Seatsleft)。 ID是主键,LocationID是外键,它引用Location表的ID。
我的PHP代码如下:
这是我的代码的更新版本。
PHP表单复选框选择不同的校园
<body>
<?php
require 'connection.php';
if(isset($_POST['formSubmit']))
{
$aCampus = $_POST['campus'];
if(empty($aCampus))
{
echo("<p>You didn't select any campus.</p>\n");
}
else
{
$N = count($aCampus);
echo("<p>You selected $N campus(s): ");
for($i=0; $i < $N; $i++)
{
echo($aCampus[$i] . " ");
}
echo("</p>");
}
}
function IsChecked($chkname,$value)
{
if(!empty($_POST[$chkname]))
{
foreach($_POST[$chkname] as $chkval)
{
if($chkval == $value)
{
return true;
}
}
}
return false;
}
$where="1";
if(!empty($_POST['campus'])){
foreach ($_POST['campus'] as $campus){
$where=" LocationID='". $campus."'";
}
}
//$query = "SELECT `Name` FROM `course` WHERE LocationID=1";
$query="SELECT `Name` FROM `course` WHERE 1 AND (".$where.")";
if ($query_run = mysql_query($query)) {
while ($query_row = mysql_fetch_assoc($query_run)) {
$coursename =$query_row['Name'];
echo $coursename. '<br/>';
}
} else {
echo mysql_error();
}
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<p>
Which campus courses do you want to get access to?<br/>
<input type="checkbox" name="campus[]" value=1 />Campus A<br />
<input type="checkbox" name="campus[]" value=2 />Campus B<br />
<input type="checkbox" name="campus[]" value=3 />Campus C<br />
<input type="checkbox" name="campus[]" value=4 />Campus D
</p>
<input type="submit" name="formSubmit" value="Submit" />
</form>
</body>
</html>
我的问题是如何从我的PHP表单中选择并查询数据库以仅从所选校园中检索课程?
答案 0 :(得分:2)
请尝试使用以下简单的查询创建逻辑。
$whereArr =Array();
$whereArr[] = 1;
if(!empty($_POST['campus'])){
foreach ($_POST['campus'] as $campus){
$whereArr[]=" LocationID LIKE ',". $campus.",'";
}
}
$query="SELECT `Name` FROM `course` WHERE 1 AND(".implode(" OR ",$whereArr)." )";
以上代码适用于以下记录:
289,"Math","2,3,",67
答案 1 :(得分:1)
在这种情况下,我会将校园存储为数据库中逗号分隔的字符串。然后你可以使用mySQL中的FIND_IN_SET()
函数来查询
课程记录
203,"Biology","1,2,4",34
然后你可以
SELECT * FROM course WHERE FIND_IN_SET(4,locationid)
将为您提供在&#34;设置&#34;
中4
的所有记录
答案 2 :(得分:0)
这样的事情:
$validoptions = array('A','B','C','D');
$allvalid = true;
foreach ($_POST['campus'] as $campus){
if (!in_array($campus,$validoptions)) $allvalid = false;
}
if (!$allvalid) {
echo 'Wrong campuses selected. Try again.';
exit;
}
$query = 'SELECT * FROM `Courses` WHERE ';
$query .= 'LocationID = \''.implode('\' OR LocationID = \'',$campuses).'\'';
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) die('Could not connect: ' . mysql_error());
mysql_select_db("databasename");
$res = mysql_query($query);
$data = array();
if ($res && mysql_num_rows()) {
$data = array();
while($d = mysql_fetch_array($res)) {
$data[] = $d;
}
}
if (count($data) > 0) {
echo 'No courses found !';
}else {
echo 'Courses found : ';
print_r($data);
}