HTML形成多个字段

时间:2010-12-11 12:25:22

标签: php html forms

我的html表单如下:

<form method="post" action="?a=up">
...some mysql query...
while ($i = mysql_fetch_array($result)) {

<input name="name[]" type="text" value="<?=$i['name'];?>" />
<input name="years[]" type="text" value="<?=abs($age);?>"/>
<input name="to[]" type="checkbox" value="<?=$i['id'];?>" />

}
<input name="" type="submit" value="go" />
</form>

我遇到的问题是我无法获取表单字段的值,例如“name”和“years”。 我只能得到一个id列表(“to”复选框的值)。

php代码如下:

$cnt = 0;
for($p = 0; $p <= (sizeof($to)-1); $p++)
{
echo $to[$p].$name[$p].$years[$p]"<br>";
$cnt++;
}

$tm = array($cnt);

我做错了什么?

3 个答案:

答案 0 :(得分:0)

更新


以下是使用isset检查复选框的方法:

if ($_SERVER['REQUEST_METHOD'] === 'POST'){
  $cnt = 0;
  for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++)
  {
    if (isset($_POST['to'][$p]))
    {
      echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>";
      $cnt++;
    }
  }

  $tm = array($cnt);
}

您没有从POST数组中获取字段,以下是您的代码应该如何:

$cnt = 0;
for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++)
{
  echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>";
  $cnt++;
}

$tm = array($cnt);

确保在提交表单时执行以上代码,方法是将其置于此条件:

if ($_SERVER['REQUEST_METHOD'] === 'POST'){
  $cnt = 0;
  for($p = 0; $p <= (sizeof($_POST['to'])-1); $p++)
  {
    echo $_POST['to'][$p] . $_POST['name'][$p] . $_POST['years'][$p] . "<br>";
    $cnt++;
  }

  $tm = array($cnt);
}

最后有一点建议你应该避免使用简短的php标签<?=?>,因为它们会带来安全问题并且很容易嵌入到图像或xml中。 (如果你想使用它们,请确保它们也从php.ini开启)

答案 1 :(得分:0)

即使没有选中复选框,你也希望复选框成为一个成功的控件(并且规范说它一定不是这样)。

您可能应该采取以下措施:

<input name="name[<?php echo htmlspecialchars($i['id']); ?>]" 
       value="<?php echo htmlspecialchars($i['name']); ?>" />
<input name="years[<?php echo htmlspecialchars($i['id']); ?>]"
       value="<?php echo abs($age);?>"/>

答案 2 :(得分:0)

为什么不试试

$cnt = 0;

foreach ( $_POST['to'] as $k => $to ){
    echo $_POST['to'][$k] . $_POST['name'][$k] . $_POST['years'][$k] . "<br />";
    $cnt ++;
}

$tm = array ($cnt);