检索循环文本框


Retrieve Loop textbox

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>';

毕业.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 个文本框值,但现在我只得到第一行。

数据库结构

   Field   Type          Collation      Attributes     Extra
     id    bigint(10)                    UNSIGNED     AUTO_INCREMENT
   letter  varchar(255)  utf+general_ci  
   markint  bigint(10)
     gt     bigint(10)

你的文本框名称不是letter的,因为你正在使用它们 - 它们是letter_0letter_1等。

此外,interval是一个MySQL保留词,您需要使用反引号对其进行转义:`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) ");
}

现在,这不会"验证"你的数据,但至少它有助于防止SQL注入和简单的PHP错误。

您的帖子数据应包含 $_POST['interval0']$_POST['interval1']$_POST['interval2'] ...

您必须搜索每个$_POST才能获得所有答案。坦率地说,我很惊讶您按原样获取代码中的任何发布数据。

您应该修改以下内容

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]}) ");
}