从表单处理多个数组

时间:2014-08-24 20:40:10

标签: php arrays forms foreach

我正在尝试从表单处理多个数组,但我经常遇到只提交最后一个字段的问题。

表单从简单的xml输出中回显结果(IP地址及其rDNS设置),并以可编辑的形式和表格发布这些结果。

<?php include_once("API.php");
$ips=array('xx.xx.xx.xx','xx.xx.xx.xx','xx.xx.xx.xx');

foreach($ips as $ip){
  $API->GetRdns($ip);
  $xml = simplexml_load_string($API);
}

foreach ($xml->RdnsDetails as $RdnsDetails) :?>

<tr>
  <td><?php echo $ip; ?></td>
  <td><input type="text" name="hostname" value="<?php echo $RdnsDetails->hostname; ?>"></td>
  <td><input type="text" name="extra" value="<?php echo $RdnsDetails->extra; ?>"></td>
</tr>

<?php endforeach; ?>

单击提交按钮时,必须提交更改。

<button type="submit" name="submit">Submit</button>

<?php if (isset($_POST['submit'])){
  foreach ($ips as $ip) {
    $API->Sent($ip,$_POST[hostname],$_POST[extra])    
  }
?>

如何为每个IP($ ip)提交值'hostname'和'extra'?

3 个答案:

答案 0 :(得分:0)

您应该将提交按钮绑定到<form>以获取值

<form>
<?php foreach ($xml->RdnsDetails as $RdnsDetails) :?>
<tr>
  <td><?php echo $ip; ?></td>
  <td><input type="text" name="hostname" value="<?php echo $RdnsDetails->hostname; ?>"></td>
  <td><input type="text" name="extra" value="<?php echo $RdnsDetails->extra; ?>"></td>
</tr>
<?php endforeach; ?>
<button type="submit" name="submit">Opslaan</button>
</form>

另一个问题是你错过了''这里:

$API->Sent($value,$_POST['hostname'],$_POST['extra'])  

答案 1 :(得分:0)

默认情况下,表单只会为表单中的每个“名称”实体发送​​一个值。您可以尝试将括号添加到输入的[name]属性中,以便将值作为数组发送吗? 我想我现在了解了一点,你需要IP和主机名/额外值之间的关联。如果将ip添加为隐藏表单字段

,该怎么办?
    <?php foreach ($xml->RdnsDetails as $RdnsDetails) :?>
    <tr>
      <td><?php echo $ip; ?></td>
<td><input type="hidden" name="ips[]" value="<?php echo $ip; ?>"></td>
      <td><input type="text" name="hostname[]" value="<?php echo $RdnsDetails->hostname; ?>"></td>
      <td><input type="text" name="extra[]" value="<?php echo $RdnsDetails->extra; ?>"></td>
    </tr>
    <?php endforeach; ?>

然后你可以在后端处理这样的事情:

<?php
$ips = $_POST['ips']; 
$hostnames = $_POST['hostname']; 
$extras = $_POST['extras']; 
for($i=0;$i<count($ips);$i++) 
{
     echo "IP: " . $ips[i] . ", Hostname: " . $hostnames[i] . ", Extra: " . $extras[$i]; 
} 

答案 2 :(得分:0)

您应该尝试创建数组而不是单个值。试试这个:

<tr>
  <td><?php echo $ip; ?></td>
  <td><input type="text" name="ip[<?php echo $ip; ?>]['hostname']" value="<?php echo $RdnsDetails->hostname; ?>"></td>
  <td><input type="text" name="ip[<?php echo $ip; ?>]['extra']" value="<?php echo $RdnsDetails->extra; ?>"></td>
</tr>

您可以通过以下方式获取此信息:

<?php if (isset($_POST['submit'])){
  foreach ($_POST['ip'] as $ip => $info) {
    $API->Sent($value,$info['hostname'],$info['extra']);    
  }
?>