使用php将多个复选框中的值插入mysql数据库中的多行

时间:2015-05-19 02:43:22

标签: php mysql

我已经熬夜了两晚,但我还没能解决这个问题。我是网站新手以及 PHP 请原谅我的经验不足。这个想法是当用户选择几个课程时,它应该被发送到数据库并存储在不同的行中。现在发生的是它只在数据库中存储了两次第一个值。谢谢。 代码:

<?php
include 'core/init.php';
protect_page();
include 'includes/overall/header.php';
$user_id=$_SESSION['user_id'];
?>

<h2>Register</h2>

<?php

if(isset($_GET['success']) && empty($_GET['success'])){
    echo 'You have successfully registered!';
}
else{
        if(empty($_POST)===false){
        $course[]=$_POST['course_code'];
        $user_id= $user_data['user_id'];
        $username=$user_data['username'];

        foreach($course as $c){

        $data= '\''.implode('\',\'',$c).'\'';

        mysql_query("INSERT INTO `lenroc_ssims`.`registercourses`(`user_id`, `username`, `course_code`) VALUE ('$user_id','$username', $data)");

            header('location:courses.php?success');
            exit();
            }
        }
    ?>
    <form action="" method="post">
    <?php

    $sql = "SELECT * FROM course";
    $result = mysql_query($sql)or die(mysql_error());

    echo "<table>";
    echo "<tr><th>COURSE CODE</th><th>COURSE TITLE</th><th>UNIT</th><th>SEMESTER</th><th>LEVEL</th></tr>";

    while($row = mysql_fetch_array($result)){
    $course_code        = $row['course_code'];
    $course_title       = $row['course_title'];
    $course_unit        = $row['course_unit'];
    $semester           = $row['semester'];
    $level              = $row['level'];
    echo "<tr><td style='width: 100px;'>".$course_code."</td><td style='width: 600px;'>".$course_title."</td><td>".$course_unit."</td><td>".$semester."</td><td>".$level."</td><td><input type=\"checkbox\" name=\"course_code[]\" value=".$course_code."></td></tr>";
    } // End our while loop
    echo "</table>";
    ?>
    <input type="submit" value="Register">
    </form>

<?php
}
include 'includes/overall/footer.php';
?>

2 个答案:

答案 0 :(得分:1)

您的代码很危险。它对sql注入没有抵抗力。您应该停止使用mysql_函数并切换到mysqli或PDO。

但现在只需要修复bug,就可以在这部分中更改代码:

foreach($course as $c){
    mysql_query("INSERT INTO `lenroc_ssims`.`registercourses`(`user_id`, `username`, `course_code`) 
                 VALUES ('$user_id','$username', $c)");
}
header('location:courses.php?success');
exit();

答案 1 :(得分:0)

内部循环中的

重定向停止了进程,因此只执行了一次。对于良好的实践,不要将sql查询放在循环中,这会使进程变慢。

$values = '';
foreach($course as $c){
    $values .= "('$user_id','$username', '$c'), ";
}

$values = rtrim($values, ',');
mysql_query("INSERT INTO `lenroc_ssims`.`registercourses`(`user_id`, `username`, `course_code`) VALUES {$values}");
header('location:courses.php?success');
exit();

如果你不同意,为什么你不写评论?