0

在这里,我对我的 MySql 数据库进行了查询,我正在取出有关课程的所有信息,这些信息要放在一行中并显示在我的表格中。表格的最后一列是一个复选框,我想制作该复选框,以便它为选中的每一行保存数据行。我选择的变量是courses[],保存在数组中,然后保存在会话中,以便在其他地方访问。我不确定如何提取行数据以放入我的数组中。现在我有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

您可以使用 jQuery 来完成,您也可以使用它来处理和验证您的表单。或者,对于每一行,您可以为该行构建一个数组并将其作为隐藏值传递。然后当它发布时,看看是否选中了复选框,如果是,让脚本使用隐藏值。

于 2012-10-28T19:34:27.133 回答
0

方式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

您应该尝试仅将行 ID 保存在复选框的值中。通过这种方式,您可以通过 ID 轻松地从数据库中调用一行。$row2013["CourseCode"]应该管用。

当您执行 POST 请求时,您将获得一个 ID 数组 ( $_POST['courses'])。当然,您需要将其视为数组,因此您必须对其进行迭代才能获得您选择的所有行。

如果您var_dump($_POST['courses'])应该看到类似这样的内容,假设您选择了前 5 行:

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 回答