【问题标题】:Process multiple arrays from form从表单处理多个数组
【发布时间】:2014-08-24 20:40:10
【问题描述】:

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

该表单正在回显来自简单 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) 提交的值“主机名”和“额外”?

【问题讨论】:

    标签: php arrays forms foreach


    【解决方案1】:

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

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

    【讨论】:

    • 走得更远。但是,它只处理最后一个 IP 条目。
    • 您确定您的$ip 每条规则都不同吗?我不知道你在哪里定义它,但也许你需要将它更改为`$RdnsDetails->ip`?
    • 定义为 $ips=array('xx.xx.xx.xx','xx.xx.xx.xx','xx.xx.xx.xx');使用 foreach ($ips as $ip){}。我将使用完整的相关代码编辑我的第一篇文章。 RdnsDetails 变量没问题。
    • 您应该将foreach ($xml-&gt;RdnsDetails as $RdnsDetails) 循环放在foreach($ips as $ip) 循环中。我认为这将完成这项工作!当然也可以用我的例子。
    【解决方案2】:

    您应该将提交按钮绑定到 &lt;form&gt; 以获取值

    <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'])  
    

    【讨论】:

    • 表格已经到位(只复制了上面的相关元素)。不幸的是,括号没有区别。
    【解决方案3】:

    默认情况下,表单只会为表单中的每个“名称”实体发送​​一个值。您可以尝试将括号添加到输入的 [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]; 
    } 
    

    【讨论】:

    • 尝试将其作为数组发送。这里面临的唯一问题是使用 $API->Sent($value,$_POST['hostname'],$_POST['extra']) 时输出是“Array”
    • 我不知道 $API->Sent 应该做什么。但最初的问题是如何为一个表单发送多个名称:值对,而您可以通过使用数组来做到这一点。这意味着您必须在后端将其作为数组处理。
    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多