1

我有一个大表单,其中包含 X 个帖子,每个帖子有 15 个字段以及 1 个隐藏字段。

假设我有 14 个帖子。这意味着我的表单将发送 211 个字段(14x15 个字段加上 1 个隐藏字段)。

用户不必填写所有字段。

我想计算表单发送的帖子数量,但我似乎遇到了困难。

使用 count($_POST) 返回 152。这让我相信 count() 忽略了空字段。

因此,使用 (count($_POST) - 1) / 15 之类的公式会返回错误的结果 (10.0666),并且如果将来字段数量发生变化,效率会很低。

那么,有人对如何正确计算我的帖子有任何想法吗?

我的表格如下所示:

<form name="scraped" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" method="post">
        <input type="hidden" name="OSscraper_hidden" value="N">
        <?php
            $inpCnt = 0;
            foreach($articles as $item) {
        ?>
        <input type="text" name="title_<?php echo $inpCnt; ?>">
        <input type="text" name="name_<?php echo $inpCnt; ?>">
        <input type="text" name="url_<?php echo $inpCnt; ?>">
        <input type="text" name="img_<?php echo $inpCnt; ?>">
        <input type="text" name="pet_<?php echo $inpCnt; ?>">
        <input type="text" name="color_<?php echo $inpCnt; ?>">
        <input type="text" name="value_<?php echo $inpCnt; ?>">
        <input type="text" name="height_<?php echo $inpCnt; ?>">
        <input type="text" name="weight_<?php echo $inpCnt; ?>">
        <input type="text" name="hair_<?php echo $inpCnt; ?>">
        <input type="text" name="eyes_<?php echo $inpCnt; ?>">
        <input type="text" name="race_<?php echo $inpCnt; ?>">
        <input type="text" name="phone_<?php echo $inpCnt; ?>">
        <input type="text" name="address_<?php echo $inpCnt; ?>">
        <input type="text" name="zip_<?php echo $inpCnt; ?>">
        <?php 
            $inpCnt++;
        } ?>
        <input type="submit" value="Submit">
    </form>
4

3 回答 3

2

将您的表单更改为如下所示:

<input type="text" name="foo[<?php echo $inpCnt; ?>][title]">
<input type="text" name="foo[<?php echo $inpCnt; ?>][name]">
<input type="text" name="foo[<?php echo $inpCnt; ?>][url]">

然后你会得到:

$_POST['foo'] = [
  0 => ['title' => '...', 'name' => '...', 'url' => '...'],
  1 => ...,
  ...
];

它使您不必自己进行分组,并且更容易对输入进行计数或迭代。

于 2013-01-27T20:11:10.020 回答
0

为什么不只是count($articles)*15回显到隐藏的输入中。无论如何,您正在使用另一个隐藏的输入......

于 2013-01-27T19:58:55.507 回答
0

试试这段代码,这里有演示 请只使用这个想法而不是确切的副本。

<?php

error_reporting(E_ALL ^ E_NOTICE);
//debugging

if(@$_POST['submit'] == 'Submit'){
 echo '<pre>';
    print_r($_POST);
 echo '</pre>';
 echo "<br>\n";
 echo 'Number of posts = count($_POST["posts"])='.count(@$_POST['posts'])."<br>\n";

 //finding number of posts that are set and not empty
 $count = 0;
 foreach($_POST['posts'] as $v1){
  //$v is an array
  foreach($v1 as $v1k=> $v1v){
   if(strlen($v1v) > 0){
    ++$count;
    $inputs[$v1k] = $v1v;
   }
  }
 }


 echo 'Count of non-empty posts = $count = '.$count."<br>\n";
 echo '<pre>';
    print_r($inputs);
 echo '</pre>';
}
?>
<form name="scraped" action="" method="post">
        <input type="hidden" name="OSscraper_hidden" value="N">
        <?php
            $articles =array('test');
            $inpCnt = 0;
            foreach($articles as $item) {
        ?>
        <input type="text" name="posts[][title_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][name_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][url_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][img_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][pet_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][color_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][value_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][height_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][weight_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][hair_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][eyes_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][race_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][phone_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][address_<?php echo $inpCnt; ?>]">
        <input type="text" name="posts[][zip_<?php echo $inpCnt; ?>]">
        <?php 
            $inpCnt++;
        } ?>
        <input type="submit" value="Submit" name="submit">
    </form>
于 2013-01-27T20:29:08.727 回答