0

SOや他の場所で似たようなさまざまな質問を見て、自分がやりたいことは不可能だと恐ろしい思いをしますが、ここに行きます。

テキスト入力行のテーブルであるページがあります。ユーザーは各行に情報を入力し、データを別のファイルに送信してPDFを作成します。

問題は、データの量が変わる可能性があるため、ユーザーがテーブルに行を自由に追加できるようにする必要があることです。

[そこに行く前に、私はこれにJavascriptを使用できないことを指摘する必要があります。JSでは簡単に実行できることはわかっていますが、ページにアクセスできる必要があります。]

これは、私が(うまくいけば)要点を説明するために一緒に石畳にした非常に単純化されたバージョンです:

<?php 
  if (filter_has_var(INPUT_POST, 'add_rows')) {
    $howmanyrows = filter_input(INPUT_POST, 'howmanyrows', FILTER_SANITIZE_NUMBER_INT);
    //get all the data from table and put it in an array, 
    //then add 5 (or however many) new rows to said array.
  }
  else if (filter_has_var(INPUT_POST, 'send_data')) {
    //get table data, add to session and redirect to other page with a header()
  }
 ?>
<html>
  <form action="" method="POST">
    <table>
      <?php //table rows added using an array of data 
        foreach ($data as $d): ?>
          <tr><td><input type="text" value="<?php echo $d; ?>"></td></tr>
      <?php endforeach; ?>

    </table>
    <input type="text" name="howmanyrows" value="5">
    <input type="submit" name="add_rows">

    <input type="submit" name="send_data">

  </form>
...
</html>

ご覧のとおり、現時点では、ページ全体を含むフォームが1つだけで、ページをそれ自体に送信するという不格好な設定があります。クリックされたボタンに応じて、新しい行が追加されるか、データがPDF作成ページに送信されます。

多くの理由から、これは理想的ではありません。私が本当にやりたいのは、2つの別々のフォーム、つまりネストされたフォームを持つことです。しかし、前者は入力値を両方に送信することを許可せず、後者は明らかに悪い形式(しゃれは意図されていません)であり、機能しません。

これを私がやりたいことをさせることは可能ですか?それについて行くための別の方法についての提案はありますか?

4

1 に答える 1

0

私はあなたが最高の非JavaScriptソリューションを持っていると思います-確かに私がそれを使って実行する方法です。

簡単にするための1つのことは、同じ名前の複数の入力を使用できることです。

<input name="tablerow[]" type="text" value="A" />
<input name="tablerow[]" type="text" value="B" />
<input name="tablerow[]" type="text" value="C" />

そして、これらは$_POST['tablerow']を配列として通過します。配列の長さはフィールドの数です。次に、それにフィールドを追加します。


アクセシビリティのために、ユーザーが最初の「新しい」フィールドに直接ホップできるようにするリンクを上部に追加する必要があります。そうしないと、新しいフィールドにアクセスするためにフォーム全体をタブで移動する必要があります。(JSが本当に避けられないかどうか、そして彼らがこのシナリオを回避できるかどうかについては、上記の私のコメントを参照してください!)

于 2012-05-24T12:22:40.147 に答える