计算$ _POST

时间:2013-01-27 19:40:50

标签: php forms loops post count

我有一个大表单,其中包含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>

3 个答案:

答案 0 :(得分: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 => ...,
  ...
];

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试此代码,演示为here 请使用这个想法而不是完整的副本。

<?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>