1

データベースなどに保存するのにうまく機能するコードをいくつか持っています。今やりたいことは、フィールドが保存された後です。エコーされた最後のIDを隠しフィールドに入力して、それを使用できるようにします今後の挿入/更新クエリを決定します。

私のフォームは次のとおりです。

<div id="formHolder">
<form type="post" action="add_room.php" id="mainForm">
    <label for="itemName[]">Item</label>
    <input type="text" name="itemName[]">
    <label for="itemPhoto[]">Item</label>
    <input type="text" name="itemPhoto[]">
    <input type="hidden" name="hiddenId[]" value="">
    <div class="save">Save Item</div>
</form>
</div>

私のjQueryは:

<script>
    $(document).ready(function() {
        $('body').on('click', '.save', function(e) {
            var string = $(this).closest('form').serialize();
            $.ajax({
                type: "POST",
                url: "add_room.php",
                data: string,
                cache: false,
                success: function(data){
                    $('#message').text('The id of the inserted information is ' + data);
                }
            });
        });
    });
    $(document).ready(function(){
        $('#addForm').on('click', function(){
            $('<form><label for="itemName[]">Item</label><input type="text" name="itemName[]"><label for="itemPhoto[]">Photo</label><input type="text" name="itemPhoto[]"><input type="hidden" name="hiddenId[]" value=""><div class="save">Save Item</div></form>').fadeIn(500).appendTo('#formHolder');
        });
    });
</script>

最後に、私のphpは次のとおりです。

<?PHP

    include('dbConfig.php');

    $item = $_POST['itemName'];
    $photo = $_POST['itemPhoto'];

    foreach($item as $key => $val) {

        if ($stmt = $db->prepare("INSERT test (test_title, test_desc) VALUES (?, ?)"))
        {
            // Use an s per variable passed to the string, example - "ss", $firstname, $lastname
            $stmt->bind_param("ss", $val, $photo[$key]);
            $stmt->execute();
            $stmt->close();

            echo $db->insert_id;
            //echo "success";
        }
        // show an error if the query has an error
        else
        {
            echo "ERROR: Could not prepare SQL statement.";
        }
    }

?>

フィールドデータをデータベースに追加したり、追加のフィールドを追加したりするのに、すべてがうまく機能します。隠しフィールドに保存するために、各 ajax 投稿のエコーされた ID を保存することはできませんが、#message div に保存することは問題ありません。何か案は?私は .val(); を使ってみました。しかし、それはうまくいきませんでした、私は困惑しています

アンディ

4

3 に答える 3

5

成功関数内でこれを試してください

$("[type=hidden]").val(data);

または、このようにはるかに優れた隠しフィールドIDを設定できる場合

<input type="hidden" name="hiddenId[]" id="hiddenId" value="">

コードはこのようになります

 $("#hiddenID").val(data);

それが役立つことを願っています

于 2013-07-04T13:18:56.613 に答える
0

ajaxdata成功関数の変数には、php ファイルからのすべての出力が含まれているため、複数の項目を追加する場合、新しく追加されたすべての ID が連結された文字列になります。

私がすることは次のようなものです:

  • html フォームフィールドでカウンターを使用して、どのフィールドに対処する必要があるかを正確に把握できるようにします<input type="text" name="itemName[1]">
  • エコーアウトする代わりに、このキーと値を PHP の配列に追加します$array[$key] = $db->insert_id;
  • PHP 挿入ループの後、JavaScript 側で必要なデータをエコーアウトします。echo json_encode($array);
  • ajax 成功関数でデータをループして、正しい値を正しい要素に割り当てます。

json を受け入れるには、おそらく ajax 呼び出しを少し変更する必要があります。

于 2013-07-04T13:26:49.607 に答える