我有 HTML 表单,其中包含一些文本输入和文件输入。我想使用 jquery 表单插件提交表单,它工作正常,但问题是当我在文件输入中没有选择文件时,文件输入字段成为$_POST
的一部分,空值我不希望它出现在$_POST
数组中。
请帮忙。
这是我的代码我正在使用CodeIgniter - @ Let代码
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'] = '';
}
答案 0 :(得分:1)
上传的任何文件都在$ _FILES数组中。您可以在php手册中找到所需的所有信息:http://www.php.net/manual/en/features.file-upload.post-method.php
答案 1 :(得分:1)
您获得$_POST
值数组,并且从数组中删除空元素的快速方法是使用array_filter
而不使用回调函数。这也将删除 0s (零)。
$myArray = array_filter( $_POST );
答案 2 :(得分:0)
为什么你不需要在$ _POST中包含这个字段?如果它是空的,你应该在服务器上忽略它。
如果有任何原因,您可以尝试在发送表单之前从DOM中删除该元素。 (http://api.jquery.com/remove/)。
答案 3 :(得分:0)
如何在发布输入文件是否存在之前检查它,如果没有,则删除该标记然后发布。
答案 4 :(得分: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. ";
}
}
}
?>
照片数据库商店表的结构在this link: