0

我有带有一些文本输入和文件输入的HTML表单。我想使用jquery表单插件提交表单,它工作正常,但问题是当我在文件输入中选择没有文件时,文件输入字段成为$_POST空值的一部分,我不希望它在$_POST数组中。

请帮忙。

这是我正在使用 CodeIgniter 的代码 - @Let's Code

public function saveDataSourceAttributesValues() {
    $data_source_id = $this->input->post('data_source_id');
    $attributes_values_row_id = $this->input->post('row_id');
    $text_attributes = $this->input->post(); // Text Input fields
    $images_attributes = $_FILES; // Files Input field

    if ($attributes_values_row_id == '') {
        $last_row_id = $this->DataSourceModel->getDataSourceAttributesValuesLastRowId($data_source_id);
        if ($last_row_id) {
            $row_id = (int) $last_row_id + 1;
        } else {
            $row_id = 1;
        }
    } else {
        //Edit case
        $row_id = $attributes_values_row_id;
    }

    if (!empty($text_attributes)) {
        foreach ($text_attributes as $attribute_id => $value) {
            if (is_numeric($attribute_id)) {
                $temp_data = array(
                    'data_source_id' => $data_source_id,
                    'data_source_attribute_id' => $attribute_id,
                    'value' => $value,
                    'row_id' => $row_id,
                    'created' => date('Y-m-d H:i:s')
                );

                if ($attributes_values_row_id == '') {
                    $this->CommonModel->insert('data_source_attribute_value', $temp_data);
                } else {
                    $this->DataSourceModel->updateDataSourceAttributeValue($attribute_id, $row_id, $temp_data);
                }
            }
        }
    }

    if (!empty($images_attributes)) {

        $this->load->library('upload');
        $config['upload_path'] = './data_sources/images/';
        $config['allowed_types'] = '*';
        $config['max_size'] = '10000';
        //$config['overwrite'] = TRUE;
        //$config['remove_spaces'] = TRUE;

        foreach ($images_attributes as $attribute_id => $value) {
            if (is_numeric($attribute_id)) {
                $config['file_name'] = str_replace(' ', '_', $_FILES[$attribute_id]['name']);
                $image_path = $config['upload_path'] . '/' . $config['file_name'];
                $this->upload->initialize($config);
                if ($this->upload->do_upload($attribute_id)) {
                    $temp_data = array(
                        'data_source_id' => $data_source_id,
                        'data_source_attribute_id' => $attribute_id,
                        'value' => $image_path,
                        'row_id' => $row_id,
                        'created' => date('Y-m-d H:i:s')
                    );

                    if ($attributes_values_row_id == '') {
                        $this->CommonModel->insert('data_source_attribute_value', $temp_data);
                    } else {
                        $this->DataSourceModel->updateDataSourceAttributeValue($attribute_id, $row_id, $temp_data);
                    }
                }
            }
        }
    }

    $response['response'] = 200;
    $response['message'] = 'Data source attributes values has been saved successfully.';
    $response['error'] = '';
    $response['data'] = '';
}
4

5 回答 5

1

您将获得值数组,并且在没有回调函数的情况下使用从数组中删除空元素$_POST的快速方法。不过,这也会删除0(零)。array_filter

$myArray = array_filter( $_POST );
于 2013-07-16T07:31:00.100 回答
1

上传的任何文件都将在 $_FILES 数组中。您可以在 php 手册中找到您需要的所有信息:http ://www.php.net/manual/en/features.file-upload.post-method.php

于 2013-07-16T07:27:53.027 回答
0

为什么你不需要在 $_POST 中有这个字段?如果它是空的,你应该在服务器上忽略它。

如果有任何原因,您可以在发送表单之前尝试从 DOM 中删除元素。(http://api.jquery.com/remove/)。

于 2013-07-16T07:29:22.487 回答
0

如何在发布输入文件是否存在之前检查它,如果不存在则删除该标签然后发布。

于 2013-07-16T07:29:28.710 回答
0

您好我创建了一个上传图像的 php 文件。它可能对你有帮助。我正在上传图像并将其保存到数据库图像及其名称中。

这是 index.php

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    </head>

    <body>
    <form action="get.php" method="post" enctype="multipart/form-data">

    <p>
    <label for="image">Upload an image</label>
    <input type="file" name="image" id="image" />

    </p>
    <p>
      <input type="submit" name="submit" id="submit" value="Submit" />
    </p>
    </form>
    </body>
    </html>

这是get.php

        <?php

            //connect to database
            mysql_connect("localhost","root","") or die(mysql_error());
            mysql_select_db("photo") or die(mysql_error());

            //file properties


            $file = $_FILES['image'];//['tmp_name'];

            if (!isset($file))
            echo "Please select an image.";
            else
            {

            $image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
            $image_name = addslashes($_FILES['image']['name']);
            $image_size = getimagesize($_FILES['image']['tmp_name']);

                if ($image_size==FALSE)
            echo "That's not an image.";
            else
            {
            if (!$insert = mysql_query("INSERT INTO store VALUES('','$image_name','$image')"))
            echo "Problem uploading image.";
            else
            {
            $lastid = mysql_insert_id();
            echo "image uploaded. "; 

            }
            }
            }
            ?>

照片数据库存储表的结构在此链接上:

于 2013-07-16T07:42:43.297 回答