2013-07-04 66 views
1

我有一些代碼很適合保存到數據庫等。我現在想要做的是在字段保存後,我想要回顯的最後一個id被填充到隱藏字段,所以我可以使用確定任何未來的插入/更新查詢。如何在成功的ajax發佈後設置隱藏字段的值?

我的形式是:

<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();但它沒有工作,我難倒

安迪

回答

5

成功函數中嘗試這個

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

,或者如果你能夠更好的設置隱藏字段id多數民衆贊成這樣

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

代碼會是這樣

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

希望這將有助於

+0

嘿,謝謝你的回答。我有代碼 - 成功:function(data){('#message')。文本('插入的信息的ID是'+數據); } 現在,因爲我使用$(this)來提交最接近.save DIV我需要它只有唯一的隱藏字段更新的形式。那麼我會做類似的事情嗎? 成功:功能(數據){ $(this).closest(「[type = hidden])。val(data); } –

+0

我已經要求您對上述代碼的回覆,我需要知道它是否會工作。它需要顯示這個返回的ID在隱藏領域肯定。我不能接受一個答案,如果它不會完全按照我需要的方式 –

+0

一個更多的想法,因爲你設置$(這)它不會工作在成功函數 –

0

您可以使用下面的代碼

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

$("#hiddenId").attr("value",data); 
0

你在阿賈克斯成功函數data變量包含你的PHP文件中所有的輸出,所以如果你是添加多個項目,這將是一個字符串與所有新添加的ID連接在一起。

我會做的是一樣的東西:

  • 使用計數器在HTML表單字段讓你確切地知道哪些字段來解決,是這樣的:<input type="text" name="itemName[1]">;
  • 將此鍵和值添加到您的PHP中的數組而不是回顯出來:$array[$key] = $db->insert_id;;
  • 你的PHP插入循環後,回聲出你需要的JavaScript端的數據:在阿賈克斯成功函數權值分配給正確的元素echo json_encode($array);
  • 遍歷數據。

你可能需要改變你的ajax調用接受json。

+0

由於每個表單都是獨立的,我當前的代碼就像它應該的那樣工作,並將正確的值發送到數據庫等等。獲取id是我遇到的唯一問題。我對此很陌生,所以你可以發佈代碼示例? –

+0

我希望能夠使用該ID來確定一組字段應該被更新(ID存在)或插入新的項目,如果沒有ID :) –

+0

如果每個形式是分開的,你爲什麼用你的陣列形式字段名稱和循環在你的PHP? – jeroen

相關問題