【发布时间】:2020-10-20 16:31:35
【问题描述】:
我有一个带有多个无线电类型输入的表单,名称相同但值不同。所有的输入都放在表中。我希望用户在每一行中选择一个答案并提交,以便将答案发送到 db。但我得到一个错误:
Error: INSERT INTO `teachers_ans` (mark1, mark2, mark3, mark4, mark5, mark6, mark7, mark8,
mark9, mark10, mark11, 2mark, 3mark, 4mark1, 4mark2, 4mark3, 4mark4, 4mark5, 4mark6, 4mark7,
4mark8, 4mark9, 5mark1, 5mark2, 5mark3, 5mark4, 5mark5, 5mark6, 5mark7, 5mark8, 5mark9,
5mark10, 5mark11, 6mark) VALUES ('1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
'1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1' '1', '1', '1', '1', '1',
'1', '1', '1', 'SSSSSSSSSSSSSSSS') Column count doesn't match value count at row 1
这里是 HTML 和 PHP 代码:
<?php
if (isset($_POST['submit']))
{
// get all inputs values
@$A1_1 = $_POST['mark1'];
@$A1_2 = $_POST['mark2'];
@$A1_3 = $_POST['mark3'];
@$A1_4 = $_POST['mark4'];
@$A1_5 = $_POST['mark5'];
@$A1_6 = $_POST['mark6'];
@$A1_7 = $_POST['mark7'];
@$A1_8 = $_POST['mark8'];
@$A1_9 = $_POST['mark9'];
@$A1_10 = $_POST['mark10'];
@$A1_11 = $_POST['mark11'];
@$A2 = $_POST['2mark'];
@$A3 = $_POST['3mark'];
@$A4_1 = $_POST['4mark1'];
@$A4_2 = $_POST['4mark2'];
@$A4_3 = $_POST['4mark3'];
@$A4_4 = $_POST['4mark4'];
@$A4_5 = $_POST['4mark5'];
@$A4_6 = $_POST['4mark6'];
@$A4_7 = $_POST['4mark7'];
@$A4_8 = $_POST['4mark8'];
@$A4_9 = $_POST['4mark9'];
@$A5_1 = $_POST['5mark1'];
@$A5_2 = $_POST['5mark2'];
@$A5_3 = $_POST['5mark3'];
@$A5_4 = $_POST['5mark4'];
@$A5_5 = $_POST['5mark5'];
@$A5_6 = $_POST['5mark6'];
@$A5_7 = $_POST['5mark7'];
@$A5_8 = $_POST['5mark8'];
@$A5_9 = $_POST['5mark9'];
@$A5_10 = $_POST['5mark10'];
@$A5_11 = $_POST['5mark11'];
@$A6 = $_POST['6mark'];
//init db params
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "teachers";
print_r($_POST);
// create connection to the db
$conn = mysqli_connect($servername, $username, $password, $dbname);
// check connection errors, if found, display it
if (!$conn) { echo "ERROR: " . "<br>" . mysqli_error($conn); }
$sql_send_query = "INSERT INTO `teachers_ans` (mark1, mark2, mark3, mark4, mark5,
mark6, mark7,
mark8, mark9, mark10, mark11, 2mark, 3mark,
4mark1, 4mark2, 4mark3, 4mark4, 4mark5,
4mark6,
4mark7, 4mark8, 4mark9, 5mark1, 5mark2,
5mark3,
5mark4, 5mark5, 5mark6, 5mark7, 5mark8,
5mark9,
5mark10, 5mark11, 6mark)
VALUES ('$A1_1', '$A1_2', '$A1_3', '$A1_4', '$A1_5', '$A1_6',
'$A1_7', '$A1_8', '$A1_9', '$A1_10', '$A1_11',
'$A2', '$A3', '$A4_1', '$A4_2', '$A4_3', '$A4_4', '$A4_5',
'$A4_6', '$A4_7', '$A4_8', '$A4_9', '$A5_1', '$A5_2', '$A5_3'
'$A5_4', '$A5_5', '$A5_6', '$A5_7', '$A5_8', '$A5_9', '$A5_10',
'$A5_11', '$A6')";
if (!mysqli_query($conn, $sql_send_query))
{
echo "Error: " . $sql_send_query . "<br>" . mysqli_error($conn);
}
?>
<form action="" method="post">
<table>
<tr>
<td>1</td>
<td>Question 1</td>
<td><input type="radio" id="mark" name="mark1" value="1"><span>1</span></td>
<td><input type="radio" id="mark" name="mark1" value="2"><span>2</span></td>
<td><input type="radio" id="mark" name="mark1" value="3"><span>3</span></td>
<td><input type="radio" id="mark" name="mark1" value="4"><span>4</span></td>
<td><input type="radio" id="mark" name="mark1" value="5"><span>5</span></td>
</tr>
</table>
</form>
我也尝试过编写不带@ 的变量,但没有帮助。 我应该在这里做什么?请帮忙:)
【问题讨论】:
-
哇,你真的以最困难的方式做到了这一点。您的错误表明您传递的变量数量与插入中的列数不同。
-
你真的应该研究 PHP 数组
-
您的代码易受 SQL 注入攻击。您应该查看准备好的语句和参数化查询。
-
一个提示是 HTML 将只发送为每个
name选择的值。另一个提示是数组表示法,而不是使用名称mark1尝试mark[1],然后您可以使用$_POST['mark'][1]访问选定的值,这意味着您可以轻松地循环它们。 -
这个数据库布局似乎可以更好。