0

ここでは、MySql データベースへのクエリがあり、コースに関するすべての情報を取り出して、行に配置してテーブルに表示しています。テーブルの最後の列はチェック ボックスです。このチェック ボックスは、チェックされている各行のデータ行を保存するようにしたいと考えています。私が選択した変数はcourses[]、配列に保存され、セッションに保存され、他の場所にアクセスされました。行データを抽出して配列に入れる方法がわかりません。現在、私は5つのコースを選択value='$row2013したため、それは機能しません。var_dump($courses) = array(5) { [0]=> string(5) "Array" [1]=> string(5) "Array" [2]=> string(5) "Array" [3]=> string(5) "Array" [4]=> string(5) "Array" }

要約すると、私は正しいものを保存していません。

case 2013:
    $string2013 = "SELECT Course.CourseCode, Course.Title, Course.WeeklyHours, Semester.Term, Semester.SemesterCode
    FROM Course, CourseOffer, Semester WHERE Semester.YearNum='$selectedYear' AND Course.CourseCode=CourseOffer.CourseCode AND
    Semester.SemesterCode=CourseOffer.SemesterCode";
    if($Result2013 = mysqli_query($link, $string2013))
    {
        echo "<form action='CourseSelection.php' method='get'>
        <table><tr><th>Code</th><th>Course Title</th><th>Hours</th><th>Term</th><th>Select</th></tr>";
        while($row2013 = mysqli_fetch_assoc($Result2013))
        {
            echo "<tr><td>$row2013[CourseCode]</td><td>$row2013[Title]</td><td>$row2013[WeeklyHours]</td>
            <td>$row2013[Term]</td><td><input type='checkbox' name='courses[]' value='$row2013'></td></tr>";
        }
        echo "</table>";
    }
    else
    {
        echo "<p>" + mysqli_error($link) + "</p>";
    }
    break;
4

4 に答える 4

1

value='$row2013'??? たとえば、value='$row2013["CourseCode"]'

于 2012-10-28T19:35:55.760 に答える
0

チェックボックスの値には行IDのみを保存するようにしてください。このようにして、IDによってデータベースから行を簡単に呼び出すことができます。$row2013["CourseCode"]動作するはずです。

POSTリクエストを実行すると、IDの配列($_POST['courses'])が取得されます。もちろん、それを配列として扱う必要があるため、選択したすべての行を取得するには、それを反復処理する必要があります。

最初の5行を選択var_dump($_POST['courses'])したと仮定して、次のようなものが表示されるはずです。

array (size=5)
  0 => string '1' (length=1)
  1 => string '2' (length=2)
  2 => string '3' (length=3)
  3 => string '4' (length=4)
  4 => string '5' (length=5)

選択した行に従ってデータベースにクエリを実行するだけで、準備は完了です。

SELECT * 
FROM Course
WHERE CourseCode = 1
   OR CourseCode = 2
   OR CourseCode = 3
   OR CourseCode = 4
   OR CourseCode = 5
于 2012-10-28T20:03:33.523 に答える
0

方法1: コーステーブルに1つの主キー列(「CourseCode」)があると想定できる場合は、行全体をチェックボックスの値として保存する必要はありません。チェックされた行のCourseCodesを保存するだけで済みます。次に、CourseCodeを入力名に追加することで、他の各テーブルセルに一意の非表示の入力を追加できます。次に例を示します。

<input type='hidden' name='Title_" . $row['CourseCode'] . "' value='" . $row['Title'] . "'> etc.

つまり、$ _ GET ["courses"]には、クリックされた行を表すCourseCodesの配列が含まれます。次に、$ _ GET ["courses"]を繰り返し処理して、他の変数の名前を簡単に読み取ることができます。

$lst_course_codes = !empty($_GET["courses"]) ? $_GET["courses"] : array();
foreach ($lst_course_codes as $code) {
    $title = $_GET["Title_$code"];
    etc...
}

方法2:チェックボックスの値をjsonでエンコードされた文字列としてjson_encode($row2013) 保存します。次に、(CourseSelection.phpで)もう一度繰り返すことができます。

foreach ($_GET["courses"] as $json) {
   $arr_row = json_decode($json, true);
   $title = $arr_row["Title"];
   etc...
}

私はエラーを綿密にチェックしていませんが、あなたはその考えを理解しています。

于 2012-10-28T19:59:01.637 に答える
0

フォームの処理と検証にも使用できるjQueryでそれを行うことができます。または、各行で、その行の配列を構築し、非表示の値として渡すことができます。次に、投稿時に、チェックボックスがオンになっているかどうかを確認し、オンになっている場合は、スクリプトに非表示の値を使用させます。

于 2012-10-28T19:34:27.133 に答える