2012-10-30 63 views
0

我在foreach循環中有這種形式,所以它在同一頁面上顯示多次。收音機/複選框沒有保存到db

除了單選按鈕和複選框之外,一切都會在每個表單中提交罰款。他們不會將值保存到數據庫。

編輯:我已經縮小到ajax導致錯誤,但無法弄清楚如何糾正它。

<form action="process.php" method="post" name="editInvoice'.$invoice_id.'" id="editInvoiceForm'.$invoice_id.'" class="editInvoiceForm edit_invoice_container" enctype="multipart/form-data"> 
<div class="form_item_row"> 
<input type="radio" value="Unsent" '.$unsent.' name="status"/><span class="choice">Unsent</span> 
<input type="radio" value="Sent" '.$sent.' name="status"/><span class="choice">Sent</span> 
<input type="radio" value="Paid" '.$paid.' name="status"/><span class="choice">Paid</span>   
</div>   
<div class="form_item_row"> 
<label for="include_timelog'.$invoice_id.'">Include Time Log</label> 
<input type="checkbox" value="true" '.$include_timelog.' name="include_timelog" id="include_timelog'.$invoice_id.'" /> 
</div> 
<div class="clear"></div>    
<div class="form_item_row_btns"> 
<input type="hidden" value="'.$invoice_id.'" name="hiddenInvoiceID"/> 
<input type="submit" class="btn" value="Update Invoice" name="action"/> 
</div> 
</form> 

$query = "UPDATE invoices SET status = ".$db->prep($_POST['status']).", include_timelog = ".$db->prep((isset($_POST['include_timelog'])?1:0))." WHERE invoice_id = ".$db->prep($invoice_id); 

$(document).ready(function() 
{  
     var action = ''; 

     $(".due_date").datepicker(); 

     $('input[name=action]').click(function(){ 
      action = $(this).val(); 
     }); 

     $(".editInvoiceForm").submit(function() { 
      $('.editInvoiceForm .form_message').html('<img src="images/loadingAnimation.gif" alt="loadingAnimation" width="30" height="8"/>'); 

      var dataToSend = {}; 
      $(this).find(':input').each(function (i,el) { 
       dataToSend[el.name] = $(el).val(); 
      }); 

      dataToSend.action = action; 

      $.ajax({ 
       type: "POST", 
       url: "process.php", 
       data: dataToSend, 
       dataType: "json", 
       cache: false, 
       success: function(data){ 
        //console.log(data.status); 
        if(data.status == 'error'){ 
         $('.editInvoiceForm .form_message').removeClass('status_green').addClass('status_red').html(data.message).append(data.script); 
        }else{ 
         $('.editInvoiceForm .form_message').removeClass('status_red').addClass('status_green').html(data.message).append(data.script); 

        } 

       } 
      }); 
      return false; 
     }); 

}); 

回答

2

因爲該值是一個字符串,你需要在你的SQL周圍狀態值引號。您的include_timelog和invoice_id值是整數,不需要引號。

$query = "UPDATE invoices SET status = '".$db->prep($_POST['status'])."', include_timelog = ".$db->prep((isset($_POST['include_timelog'])?1:0))." WHERE invoice_id = ".$db->prep($invoice_id); 
+0

不,沒有什麼區別。即使我只用表格中的複選框測試它仍然不起作用。 – jonthoughtit

+0

你可以用幾件事更新你的問題:1)複製並粘貼print_r($ query)的結果? 2)$ db-> prep的代碼。 3)收音機盒標籤中的未發送,已發送付費變量的價值是多少? –