0

私はPHPで4つのチェックボックスを持つ単純なフォームを持っています。ユーザーは 0 ~ 4 個のチェックボックスを選択でき、その選択に基づいて結果が異なります。

基本的に、4 つのチェックボックスは大学の 4 つのキャンパス (キャンパス A、B、C、D) を表します。ユーザーがAとCの2つのキャンパスを選択した場合、選択に基づいてデータベースにクエリを実行し、これら2つのキャンパスAとCに対応するコースを取得したいとします。ユーザーが1つのキャンパスのみを選択した場合、コースを取得したいその単一のキャンパスで。

mySQL には、次のスキーマ (ID、キャンパス名、都市、州) を持つ Location テーブルがあり、ID は主キーです。また、スキーマが Course(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 フォームからオプションを取得し、データベースにクエリを実行して、選択したキャンパスのみからコースを取得するにはどうすればよいですか?

4

3 に答える 3

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
于 2012-12-10T06:09:32.523 に答える
1

この例では、キャンパスをカンマ区切りの文字列としてデータベースに保存します。次にFIND_IN_SET()、mySQL の関数を使用して、それに基づいてクエリを実行できます。

例えば

コースの記録

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

その後、あなたはすることができます

SELECT * FROM course WHERE FIND_IN_SET(4,locationid)

4これにより、「セット」にあるすべてのレコードが得られます

于 2012-12-10T06:04:01.153 に答える
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);
}
于 2012-12-10T06:33:47.107 に答える