【问题标题】:Radio/Checkboxes not saving to db单选/复选框未保存到数据库
【发布时间】:2012-10-19 09:02:28
【问题描述】:

我在 foreach 循环中有这个表单,所以它在同一页面上显示多次。

除了单选按钮和复选框外,每个表单中的所有内容都可以正常提交。他们不会将值保存到数据库中。

编辑:我已将其范围缩小到导致错误的 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;
        });

});

【问题讨论】:

    标签: php ajax arrays checkbox radio-button


    【解决方案1】:

    您需要在 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);
    

    【讨论】:

    • 不,没有什么不同。即使我只使用表单中的复选框对其进行测试,它仍然不起作用。
    • 你能用一些东西更新你的问题吗:1)复制并粘贴 print_r($query) 的结果? 2) $db->prep 的代码。 3)单选框标签中未发送、已发送、已付费变量的值是多少?
    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 2011-01-14
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多