php mysql输入只保存零到db

时间:2014-12-05 14:55:59

标签: php mysql database mysqli

<div class="control-group invoice-properties">
    <label class="control-label"><?php echo lang('quote_type'); ?></label>
    <div class="controls">
        <input type="text" id="quote_type" class="input-small" value="<?php echo $quote->quote_type; ?>" style="margin: 0px;">    
    </div>
</div>          

以上代码位于表单中。当我加载表单时,它从数据库中检索值。因此,当我直接在数据库中输入一个数字时,它会检索到这个。但是当我保存它时总是保存零。当我输入8时,它变为0(零)。

任何人都知道为什么会这样。提前谢谢。

以下是保存/检索的代码,至少我认为它是这样做的。

public function save() {
    $this->load->model('quotes/mdl_quote_items');
    $this->load->model('quotes/mdl_quotes');
    $this->load->model('item_lookups/mdl_item_lookups');

    $quote_id = $this->input->post('quote_id');

    $this->mdl_quotes->set_id($quote_id);

    if ($this->mdl_quotes->run_validation('validation_rules_save_quote')) {
        $items = json_decode($this->input->post('items'));

        foreach ($items as $item) {
            if ($item->item_name) {
                $item->item_quantity = standardize_amount($item->item_quantity);
                $item->item_price    = standardize_amount($item->item_price);

                $item_id = ($item->item_id) ? : NULL;

                $save_item_as_lookup = (isset($item->save_item_as_lookup)) ? $item->save_item_as_lookup : 0;

                unset($item->item_id, $item->save_item_as_lookup);

                $this->mdl_quote_items->save($quote_id, $item_id, $item);

                if ($save_item_as_lookup) {
                    $db_array = array(
                        'item_name'        => $item->item_name,
                        'item_description' => $item->item_description,
                        'item_price'       => $item->item_price
                    );

                    $this->mdl_item_lookups->save(NULL, $db_array);
                }
            }
        }

        $db_array = array(
                'quote_number'       => $this->input->post('quote_number'),
                'quote_type'    => $this->input->post('quote_type'),
                'quote_date_created' => date_to_mysql($this->input->post('quote_date_created')),
                'quote_date_expires' => date_to_mysql($this->input->post('quote_date_expires')),
                'quote_status_id'    => $this->input->post('quote_status_id')
        );

        $this->mdl_quotes->save($quote_id, $db_array);

        $response = array(
                'success' => 1
        );
    } else {
        $this->load->helper('json_error');
        $response = array(
            'success'           => 0,
            'validation_errors' => json_errors()
        );
    }

    if ($this->input->post('custom')) {
        $db_array = array();

        foreach ($this->input->post('custom') as $custom) {
            // I hate myself for this...
            $db_array[str_replace(']', '', str_replace('custom[', '', $custom['name']))] = $custom['value'];
        }

        $this->load->model('custom_fields/mdl_quote_custom');
        $this->mdl_quote_custom->save_custom($quote_id, $db_array);
    }

    echo json_encode($response);
}

修改1

最后的评论和答案指出名称字段不可见。我已将与此对应的所有文件上传到http://websiterheine.eu/quotes.zip

当您查看views / view.php时,任何输入都没有名称字段。但除了我提出的问题之外,所有输入都正常工作。

请查看.zip。

修改2

帕特里克指出.zip不是保存。所以没人会下载。因此,我将在JSFIDDLE上发布文件。小提琴不会工作,因为我只将其用作文件的占位符。

**views/view.php**

http://jsfiddle.net/ty9f7y9u/

**models/mdl_quotes.php**

http://jsfiddle.net/4vngkegm/1/

**controllers/ajax.php**

http://jsfiddle.net/forv452m/1/

**controllers/quotes.php**

http://jsfiddle.net/1gjc3q6n/

编辑3

我刚刚检查过。任何文件中都没有$ _POST。因此,保存所有表单值非常奇怪。

我从未遇到过这样的表单,没有名称属性,也没有$ _POST值。这个表单是如何保存和加载的?究竟是什么?

4 个答案:

答案 0 :(得分:1)

每个表单字段都必须有一个名称,以便您在PHP代码中引用它。通常,您可以添加如下名称:

<input name="your_field_name" type="...

然后在处理表单的PHP代码中引用该名称。

$input = $_POST['your_field_name'];

您的值现在将保存在$input中,并可根据需要插入数据库。

在您的特定情况下,您的代码似乎需要一系列输入项,在此处:

$items = json_decode($this->input->post('items'));

要使现有代码适用于新更改,只需使用数组语法命名字段:

<input name="items[]" type="...

答案 1 :(得分:1)

这是因为您在输入标记中缺少name属性

<input type="text" id="quote_type" class="input-small" value="<?php echo $quote->quote_type; ?>" style="margin: 0px;">

将此更改为

<input type="text" id="quote_type" name="quote_id" class="input-small" value="<?php echo $quote->quote_type; ?>" style="margin: 0px;">

P.S。使用内联CSS并不是那么好

答案 2 :(得分:1)

更改

<input type="text" id="quote_type" class="input-small" value="<?php echo $quote->quote_type; ?>" style="margin: 0px;">

<input type="text" id="quote_type" name="quote_number" class="input-small" value="<?php echo $quote->quote_type; ?>" style="margin: 0px;">

添加输入的name属性。如果您的字段名称为quote_number,请添加name="quote_number"

希望它有所帮助。

答案 3 :(得分:0)

我在其他人的帮助下找到了它wtf8_decode谢谢你的帮助。还有其他人谢谢你。

所以解决方案是在views / view.php中添加一行

quote_type: $('#quote_type').val(),

$.post("<?php echo site_url('quotes/ajax/save'); ?>", {
        quote_id: <?php echo $quote_id; ?>,
        quote_number: $('#quote_number').val(),
        quote_date_created: $('#quote_date_created').val(),
        quote_date_expires: $('#quote_date_expires').val(),
        quote_status_id: $('#quote_status_id').val(),
        items: JSON.stringify(items),
        custom: $('input[name^=custom]').serializeArray()
    },

所以它看起来像这样:

$.post("<?php echo site_url('quotes/ajax/save'); ?>", {
        quote_id: <?php echo $quote_id; ?>,
        quote_number: $('#quote_number').val(),
        quote_type: $('#quote_type').val(),
        quote_date_created: $('#quote_date_created').val(),
        quote_date_expires: $('#quote_date_expires').val(),
        quote_status_id: $('#quote_status_id').val(),
        items: JSON.stringify(items),
        custom: $('input[name^=custom]').serializeArray()
    },

现在它正常运作!