2012-12-10 34 views
0

我在PHP中有一個簡單的表單,有4個複選框。用戶可以選擇0-4個複選框,根據他們的選擇結果應該不同。使用選定複選框中的選項從mySQL檢索結果

基本上四個複選框代表大學的四個校區 - 校園A,B,C,D。並假設用戶選擇2個校區說A和C,那麼我想根據選擇查詢數據庫並檢索對應於這兩個校區A和C的課程。如果用戶只選擇一個校園,那麼我想檢索課程在那個單一的校園裏。

在mySQL上,我使用ID爲主鍵的以下模式(ID,校園名稱,城市,州)的位置表。此外,我有一個課程表架構作爲課程(ID,課程名稱,位置ID,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形式的選擇和查詢數據庫來檢索只對選定的校園課程?

+1

你應該瞭解的方法制得的語句(http://goo.gl/orrj0

$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).")"; 

上面的代碼將用於以下記錄工作)並使用[PDO](http://goo.gl/TD3xh)或[MySQLi](http://php.net/mysqli)。如果你不能決定哪些,[這篇文章](http://goo.gl/YXyWL)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/b2ATO)。另請參閱[爲什麼不應該在PHP中使用mysql函數?](http://goo.gl/J5jAo) – Daedalus

回答

1

在這種情況下,我會將校園存儲爲​​數據庫中逗號分隔的字符串。然後你可以使用FIND_IN_SET()功能在MySQL查詢爲基礎,以對

例如

的課程

203,"Biology","1,2,4",34 

那麼你可以

SELECT * FROM course WHERE FIND_IN_SET(4,locationid) 

,這將給你一個紀錄所有在「集合」中有4的記錄

2

請嘗試使用以下簡單的查詢創建器邏輯。

289,"Math","2,3,",67 
+1

糟糕的例子。容易受到注入攻擊。 – Daedalus

+1

使用mysql_real_escape_string進行注射攻擊 –

+0

嘿Uttam它適用於單選!但在選擇多個校區時不能撤回課程! – user1479431

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); 
} 
+0

我可以寫我的例子以使用mysqli擴展以及... – Graben