0

このフォームに必要な部分のほとんどを見つけました(フィールドを動的にするなど)が、現在、このフォームの配列部分は正しく送信できないようです。

私が達成しようとしていること:動的に複製して、フォームの一部として独自のテーブルに送信できる選択フィールドを持つフォーム。したがって、1つのフォームに3人を追加して選択すると、フォームの対象となるイベントへの外部キーを使用して、独自の出席テーブルに送信されます。何人の人がこのイベントに参加するかわからないので、ダイナミックにする必要がありましたが、すべてを1つの形式で行う必要があります。そうだからといって。私の上司はそう言います。

これが、[別のフィールドを追加]ボタンのJavaScriptです。

    $(document).ready(function() {
        $('#btnAdd').click(function() {
            var num     = $('.clonedInput').length; // how many "duplicatable" input fields we currently have
            var newNum  = new Number(num + 1);      // the numeric ID of the new input field being added

            // create the new element via clone(), and manipulate it's ID using newNum value
            var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);

            // manipulate the id value of the input inside the new element
            newElem.children(':first').attr('id', 'attendee' + newNum).attr('name', 'attendee[' + newNum + ']');

            // insert the new element after the last "duplicatable" input field
            $('#input' + num).after(newElem);

            // enable the "remove" button
            $('#btnDel').attr('disabled','');

            // business rule: you can only add 5 names
            if (newNum == 6)
                $('#btnAdd').attr('disabled','disabled');
        });

次の形式でフィールドが開始されます。

    <div id="input1" style="margin-bottom:4px;" class="clonedInput">
    <select name="attendee[1]" id="attendee1" style='float:right;margin-right:4.5%;'>
    <option value=''>Please choose one...</option>
    <?php
    while($row_attendees = mysql_fetch_assoc($res_attendees)){
        $attendee_id = $row_attendees['attendee_id'];
        $attendee_name = $row_attendees['name'];

        echo "<option value='".$attendee_id."'>".$attendee_name."     </option>";
    }
    ?>
    </select><label style='width:100px;display:inline-block;line-height:28px;' for="attendee">Attendee</label>
    </div>

私はすべてのものを正しく変更しています。すべての選択入力は正しくIDおよび名前が付けられています。divも同じように更新されています。それはすべて正しく機能します。私が提出するときはそうではありません。これが私のphpです:

    foreach($_POST['attendee'] as $attendee){
    $sql_attendees = "INSERT into marketing_calendar.attending (event_title, attendee_id) VALUES ('".$_POST['title']."','".$attendee."')";  
    $res_attendees = mysql_query($sql_attendees) or die(mysql_error());
}

これをまとめるために使用したすべてのチュートリアルは、これが正しいことを示しています。ただし、機能しません。最初のドロップダウンが何であれ取得しているだけで、他には何も配列に入力されていません。フォームを実行するか、foreachステートメントで出席者変数をエコーする場合、少なくともそれが表示/送信するのはそれだけです。助けてください!:)

事前にトンに感謝します。

更新 $_POST['attendee']の配列を表示するために別のユーザーと話し合ったいくつかの方法を試しましたが、それでも配列に1つのIDが表示され、実際に追加したフィールドはそれほど多くありません。また、selectのname属性の配列から番号を削除してみました。したがって、name='attendee[1]'ではなくname='attendee[]'になります。これも役に立ちません。動的に追加されたフィールドが配列に追加されない理由を誰かに教えてもらえますか?

4

2 に答える 2

1

SQLを次のように変更する必要があります。

foreach($_POST['attendee'] as $attendee){
    $sql_attendees = "INSERT into marketing_calendar.attending (event_title, attendee_id) VALUES ('".$_POST['title']."',".$attendee.")";  
    $res_attendees = mysql_query($sql_attendees) or die(mysql_error());
}

あなたattendee_idはint列です。文字列を表す一重引用符で列の内容をラップしていました。これにより、attendee_id列がnull許容として定義されている場合はnullになります。

于 2013-01-02T16:14:16.560 に答える
1

私はあなたのコードを JSfiddle に入れました: http://jsfiddle.net/rv8Mv/1/

選択が正しく追加されているようです。「送信」ボタンをクリックすると、サーバーに送信される内容のデータ文字列が表示されます。

確認したいことの1つは<form>、質問に含めなかったすべての選択要素を要素内に囲んでいることを確認することです。

サーバー上の PHP コードに問題があると思います。

サーバーで、次のコードを使用してすべての変数を受信して​​いることを確認します。

<?php
    foreach($_POST as $key => $value){
        error_log($key.' -> '.$value;
    }
?>

次に、エラー ログをチェックして、すべての POST 変数の名前と値を確認します。

現在の PHP コードで POST 変数を正しく参照していない可能性があります。

于 2013-01-02T15:44:48.540 に答える