1

投稿ごとに 15 のフィールドと 1 つの非表示フィールドがある X 量の投稿を含む大きなフォームがあります。

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 に答える