使用SQL循环将多个表单行提交到表中

3
我已经从学生表中收集了多行数据,并且它们的列表显示得很好。
<?php

                    $sql = "SELECT * FROM `students` WHERE `class`='$class' && `academicyear`='$academicyear'";

                    $result = mysqli_query($conn, $sql);
                    if (mysqli_num_rows($result) > 0) {
                        // output data of each row
                        while($row = mysqli_fetch_assoc($result)) {

                    ?>
                                    <tr>
                                      <td><?php echo @++$n ; ?> </td>
                                      <td><?php echo $row["studentid"]?> <input type="text" name="studentid" value="<?php echo $row["studentid"]?>" style="visibility: hidden; width: 10px;"></td>
                                      <td><?php echo $row["fname"]?> &nbsp <?php echo $row["sname"]?> <input type="text" name="name" value="<?php echo $row["fname"]?>  <?php echo $row["sname"]?>" style="visibility: hidden; width: 10px;"></td>
                                      <td style="display: none; width: 10px;"><input type="text" name="class"  value=" <?php echo $class; ?>"> </td>
                                      <td style="display: none; width: 10px;"><input type="text" name="academicyear"  value=" <?php echo $academicyear; ?>"></td>
                                      <td style="display: none; width: 10px;"><input type="text" name="rowcount"  value=" <?php echo $rowcount; ?>"> </td>
                                    </tr>
                           <?php

                        }
                    } else {
                        echo "";
                    }
                    mysqli_close($conn);
                    ?> 

我的困难在于如何将这些多行内容提交到另一个名为classlist的表中。

<?php
// Receiving variables
@$pfw_ip= $_SERVER['REMOTE_ADDR'];
@$example1_length = addslashes($_POST['example1_length']);
@$studentid = addslashes($_POST['studentid']);
@$name = addslashes($_POST['name']);
@$class = addslashes($_POST['class']);
@$academicyear = addslashes($_POST['academicyear']);
@$rowcount = addslashes($_POST['rowcount']);


// Validation
//saving record to MySQL database

@$pfw_host = "localhost";
@$pfw_user = "root";
@$pfw_pw = "";
@$pfw_db = "myschool";
$pfw_link = mysql_connect($pfw_host, $pfw_user, $pfw_pw);
if (!$pfw_link) {
 die('Could not connect: ' . mysql_error());
}
 $pfw_db_selected = mysql_select_db($pfw_db, $pfw_link);
 if (!$pfw_db_selected) {
 die ('Can not use $pfw_db : ' . mysql_error());
 }

 $i=0;
 while ($i<= $rowcount) {
 @$pfw_strQuery = "INSERT INTO `classlist`(`studentid`,`name`,`class`,`academicyear`) VALUES (\"$studentid\",\"$name\",\"$class\",\"$academicyear\")" ;

 $rowcount = $rowcount - 1;
 }

 //insert new record
 $pfw_result = mysql_query($pfw_strQuery);
 if (!$pfw_result) {
 die('Invalid query: ' . mysql_error());
 }

 mysql_close($pfw_link);

 header('location:classlist.php');


?> 

我仅收到了提交到classlist表中的最后一行数据,然后出现了错误--无效查询,重复查询。
请帮忙解决。

学习使用预处理语句来防止 SQL 注入。 - Jens
此外,mysql_* 函数已经被弃用,是时候转向 PDO / MySQLi 了。 - Raptor
你的DDL长什么样? - Jens
你的脚本非常不安全。请查看网站http://bobby-tables.com并学习准备语句(prepared statements)。 - Twinfriends
1
停止使用已弃用的 mysql_* API。请使用 mysqli_*PDO - Jens
我知道使用mysql_是不好的,但我们应该先关注OP的问题,并建议尽快升级到PDO或mysqli。此外,所有这些mysql_帖子可能都是由于互联网上散布的旧PHP教程造成的。 - hungrykoala
1个回答

0

在 SQL 中,必须使用单引号来包装字符串

 @$pfw_strQuery = "INSERT INTO `classlist`(`studentid`,`name`,`class`,`academicyear`) VALUES ('$studentid','$name','$class','$academicyear')" ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接