【问题标题】:How to save a row of data from database selected by a check box in PHP如何从PHP中的复选框选择的数据库中保存一行数据
【发布时间】:2012-10-29 04:11:55
【问题描述】:

在这里,我对我的 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;

【问题讨论】:

    标签: php mysql sql arrays checkbox


    【解决方案1】:

    value='$row2013' ???例如应该是value='$row2013["CourseCode"]'

    【讨论】:

    • 如果我想要该行中的所有内容怎么办?我应该改为mysqli_fetch_row而不是mysqli_fetch_assoc
    • 以您可以发布的格式制作,value='$row2013' 正在执行 echo $row2013 ...我认为您在打印类型的 echo Array 时没有利润数组,您将收到value="Array" - 但不是数组中的内容
    【解决方案2】:

    您应该尝试仅将行 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
    

    【讨论】:

    • 此解决方案需要再次调用数据库,以获取表中已经存在的信息(通过先前的 SQL 查询)并且可以通过 POST 轻松检索。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      方式一: 如果我可以假设您的课程表有一个主键列(“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...
      }
      

      我没有仔细检查错误,但你明白了。

      【讨论】:

      • 在我的输入标记中,我是否需要在我的名称和值中指定要保存的每一列?
      • 对于方法 1,是的,如果您想在脚本中检索该列数据。
      • 另外,我建议您使用 POST,以避免遇到数据大小限制问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2020-03-31
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多