page_form.php
echo '<div style="text-align:center;margin-left:25px;">
<form action="grad.php" method="post">
<table width-"100%">
<tr><th style="padding:12px;">LETTER </th>
<th style="padding:12px;">INTERVAL</th>
<th style="padding:12px;">GT</th>
</tr>';
for($i=0;$i<=5;$i++)
{
echo '<tr><td style="padding:12px;"><input type="text" name="letter_'.$i.'"></td>
<td style="padding:12px;"><input type="text" name="interval'.$i.'"></td>
<td style="padding:12px;"><input type="text" name="gt'.$i.'"></td>
</tr>';
}
echo '<tr><td><input type="submit" name="submit" value="submit"></td></tr>';
echo '</table>
</form>
</div>';
grad.php
$letter = $_POST['letter'];
$interval = $_POST['interval'];
$gt = $_POST['gt'];
$s = mysql_query("INSERT INTO grad_table(letter,markint,gradepoint) VALUES('$letter',$interval,$gt) ");
我已经在forloop中提供了所有文本框。当我点击提交时,我需要获得所有5个文本框值,但是现在我只获得第1行。
数据库结构
Field Type Collation Attributes Extra
id bigint(10) UNSIGNED AUTO_INCREMENT
letter varchar(255) utf+general_ci
markint bigint(10)
gt bigint(10)
答案 0 :(得分:1)
您的文本框名称不是letter
,因为您正在使用它们 - 它们是letter_0
,letter_1
等。
另外,interval
是MySQL reserved-word,你需要使用反引号来逃避它:`interval`
。
要检索所有这些内容,您可以对其所有名称进行硬编码,例如$letter1 = $_POST['letter_1'];
,或者您可以在另一个循环中执行此操作:
for ($i=0; $i<5; $i++) {
$letter = $_POST['letter_' . $i];
$interval = $_POST['interval' . $i];
$gt = $_POST['gt' . $i];
$s = mysql_query("INSERT INTO `grad_table` (`letter`, `interval`, `gt`) VALUES ('$letter',$interval,$gt)");
}
这里要注意的一件大事是,在将用户输入插入数据库之前,应该真正验证用户输入。首先,您可以在访问变量之前使用isset()
以确保用户提交数据。其次,您可以使用mysql_real_escape_string()
来清理字符串输入,并使用intval()
来表示整数:
for ($i=0; $i<5; $i++) {
// check that each field is posted
if (!isset($_POST['letter_' . $i]) || !isset($_POST['interval' . $i]) || !isset($_POST['gt' . $i])) continue;
// assign & sanitize
$letter = mysql_real_escape_string($_POST['letter_' . $i]);
$interval = intval($_POST['interval' . $i]);
$gt = intval($_POST['gt' . $i]);
$s = mysql_query("INSERT INTO `grad_table` (`letter`, `interval`, `gt`) VALUES ('$letter',$interval,$gt) ");
}
现在,这并没有&#34;验证&#34;你的数据,但至少它有助于防止SQL注入和PHP错误。
答案 1 :(得分:0)
您的帖子数据应包含$_POST['interval0']
,$_POST['interval1']
,$_POST['interval2']
......
您必须浏览每个$_POST
才能获得所有答案。我坦率地感到惊讶的是,您正在使用您的代码获取任何发布数据。
答案 2 :(得分:0)
你应该修改以下
for($i=0;$i<=5;$i++)
{
echo '<tr><td style="padding:12px;"><input type="text" name="letter['.$i.']"></td>
<td style="padding:12px;"><input type="text" name="interval['.$i.']"></td>
<td style="padding:12px;"><input type="text" name="gt['.$i.']"></td>
</tr>';
}
然后你可以做以下
foreach($_POST['letter'] as $i=>$v) {
mysql_query("INSERT INTO grad_table(letter,interval,gt) VALUES('{$_POST['letter'][$i]}',{$_POST['interval'][$i]},{$_POST['gt'][$i]}) ");
}