-1

GET メソッドで取得した数値に従って、複数の値を格納するための HTML Textbox の動的な数値を表示するプロジェクトを行っています。各テキストボックスに一意の名前とIDを1から昇順で付けています(textbox1、textbox2のように)。送信ボタンをクリックすると、すべてのテキストボックスの値を一度に挿入する挿入ステートメントを起動する必要があります。配列でできることはわかっていますが、私の質問は、配列内のすべてのテキストボックスの値を取得する方法と、insert ステートメントを実行する方法です。

私は次のコードを実行しました:

送信ボタンの PHP コードは次のとおりです。

 $schedules = array();
    if(isset($_POST['submit']))
    {
        for($d=1; $d<=$_GET['totalDay'] ;$d++)
        {
            array_push($schedules,$_POST['txtSchedule'.'$d']);
        }
        print_r($schedules);
    }

htmlコードは次のとおりです。

<form method="post">
<table>
  <tr>
    <td>Day</td>
    <td>Schedule</td>
 </tr>
  <?php
  if(isset($_GET['tour_code']) and ($_GET['totalDay']!=1))
  {
    $tour_code = $_GET['tour_code'];
    $total = $_GET['totalDay'];

    $i=0;
    do
    {
      $i=$i+1;
  ?>
  <tr>
    <td><?php echo $i;?></td>
    <td>
      <input name="txtSchedule<?php echo $i;?>" type="text"  size="30"/>
    </td>
  </tr>
  <?php
      $start = date('Y-m-j',strtotime($start.'+1 days'));
  }while($i!=$total);
  }
  ?>
</table>
<input type="submit" name="submit" value="Add Tour Details" />

しかし、空の配列を取得しています。 注: $total は、URLString の $GET メソッドを介して取得されます。

以下は HTML の出力です。 ここに画像の説明を入力

4

4 に答える 4

1

最初に最も簡単なこと。エラーが発生しました。使用できません

array_push($schedules,$_POST['txtSchedule'.'$d']);

$d で DOUBLE QUOTES を使用する必要があります (単一引用符は d を評価しません。実際には 0、1、...、n ではなく、文字通りドル記号で "txtSchedule$d" を読み取ります)。

array_push($schedules,$_POST['txtSchedule'."$d"]);
//or no quotes at all
array_push($schedules,$_POST['txtSchedule'.$d]);

(それはあなたの問題を解決するかもしれません)


しかしここで、フォームの命名規則を介して、処理ページの $_POST オブジェクトで配列を使用できるようにする方法に取り掛かりましょう。

あなたは配列構文を使用していませんが、非常に近いです。PHP では、送信されるものはすべて想定された形式である必要があり、txtSchedule0、txtSchedule1、...txtScheduleN の繰り返しは Array() ではありませんが、$_POST[] はそれぞれを含む配列です (入力フィールドには、小さなものが 1 つ欠けています - 角括弧)。

あなたがする必要があるのは、配列として入力に名前を付けることです。配列名の後に角括弧(arrayName [])が続きます。ここでは、txtScheduleという名前の入力配列を作成する方法を示します(print_r($ _POST [' txtSchedule']) Array()) を取得します

<input name="txtSchedule[<?php echo $i;?>]" type="text"  size="30"/>

PHP を使い始めたときに同じ問題が発生しました。 [<?php echo $i;?>] の周りの角括弧を忘れていました。

入力の配列に対して反復を実行する場合は、次のことを確認してください。

for($i=0; $i < count($_POST['txtSchedule']); $i++){
    echo "They entered " . $_POST['txtSchedule'][$i] . " in the $i" . "th position";  
}

... <input name="arrayName[$i]"> 構文、またはもっと単純に <input name="arrayName[]"> を使用して、送信時に配列を順番に自動生成する入力は HTML ページにありました。命名規則は非常に重要であり、間違っているため (arrayName[0]、arrayName[1]、... arrayName[n] の代わりに arrayName0、arrayName1、... arrayNameN を使用)、決して使用できません。配列としてあなたに。

于 2012-12-29T09:31:51.713 に答える
0

純粋に SQL 構文を見ている場合は、追加のレコードを追加して、クエリの最後に追加の値セットを指定するだけで挿入できます。

INSERT INTO myTable (fieldName1, fieldName2) values ("Value1A", "Value1B"), ("Value2A", "Value2B")

PHP ロジックを見ている場合、私の最初の提案は、GET の代わりに http POST メソッドを使用することです。次に、$_POSTフィールドの処理から始めます。

$data= array();

foreach($_POST as $key => $value) {
  if (preg_match('/^TextBox\d+$/', $key)) {
    $data[] = $mysqli->real_escape_string($value);
  }
}

利用可能なデータに基づいて SQL クエリを構築する

if (count($data) > 0) {
  $sql = 'INSERT INTO `myTable` VALUES("' . implode('"),("', $data).'")';

  // log query

  // execute query

  // process query results

  // redirect user to a thankyou page
  header('Location: thankyou.php');
}

コードは、mysqli 接続インスタンスが利用可能であることを想定していることに注意してください。$mysqli

于 2012-12-28T21:01:50.897 に答える
0

あなたの質問を正しく理解している場合、各テキストボックスからユーザー入力を取得して配列に保存しようとしていますか? もしそうなら、jqueryを使用してすべてのテキストボックスを選択し、それらをループして値を取得します

于 2012-12-28T20:53:21.680 に答える
-1

これがあなたが探しているものかどうかはわかりませんが、少なくとも開始する必要があります..

  String []ar=request.getParameterValues("name");
     String cmd=request.getParameter("cmd");
     if(cmd==null) cmd=""; 
     if(cmd.equals("Submit")){
     for(int i=0;i<ar.length;i++) {
      insert logic;

 <form method="post" action="page3.jsp">
 <br/><input type="text" name="name"/>
 <br/><input type="text" name="name"/>
 <br/><input type="text" name="name"/>

 <br/> <input type="submit" value="Submit" name="cmd"/>
 </form>

元の投稿http://www.daniweb.com/web-development/jsp/threads/197777/insert-dynamic-textbox-value-in-database

于 2012-12-28T20:56:08.297 に答える