PHP 表单类型文件 - 如果未选择图像,则不更新数据库中的行
PHP form type file - If no image is selected, don't update row in database
我正在设计一个带有 PHP PDO 的 CMS 供用户更新那里的信息,这部分我让用户更改那里的商业形象,这将上传到服务器并通过 [=34 上传到数据库=]我的管理员。
有了这个,我可以上传图像,它也可以替换它在数据库中的值。我遇到的问题是当用户只想更新其他信息(不是图像)而不是其他信息时,系统提交图像值并替换数据库中相关行中没有值(空白上传)的行?如果没有上传图片,我希望它不会影响这一行。
我一直在看if ($_FILES['image']['error'] === UPLOAD_ERR_NO_FILE)
但不是运气,但我认为我在正确的区域。
HTML
<form action='edit_account.php' method='post' enctype='multipart/form-data'>
<h4>Business Image</h4>
<input type='file' name='image' id='fileToUpload' >
<input type='submit' value='Update Account' />
</form>
PHP
if(isset($_FILES['image'])) {
$username = $_POST['username'];
$target_dir = "images/users/$username/";
$target_file = $target_dir.basename($_FILES['image']['name']);
$upload0K = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
if(isset($_POST['submit'])) {
$check = getimagesize($_FILES['image']['tmp_name']);
if($check !== false) {
echo "<p>File is an image - ".$check["mime"]."</p>";
$upload0K = 1;
} else {
echo "<p>File is not an image</p>";
$upload0K = 0;
}
}
//if (file_exists($target_file)) {
//echo "<p>Sorry, file already exists.</p>";
//$upload0K = 0;
//}
if ($_FILES['image']['size'] > 5000000) {
echo "<p>Sorry, your file is too large.</p>";
$upload0K = 0;
}
///
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
echo "<p>Sorry, only JPG, JPEG, PNG and GIF files are allowed.</p>";
$upload0K = 0;
}
//if(!isset($_FILES['image']) || $_FILES['image']['error'] == UPLOAD_ERR_NO_FILE) {
//echo "Error no file selected";
//}
///
if ($upload0K == 0) {
echo "Sorry, your file was not uploaded.";
}
else {
if (move_uploaded_file($_FILES['image']['tmp_name'], $target_file)) {
echo "<p>The file ". basename( $_FILES["image"]["name"])."has been uploaded.</p>";
} else {
echo "<p>Sorry, there was an error uploading your file.</p>";
}
}
}
SQL插入
$query_params = array(
':email' => $_POST['email'],
':username' => $_POST['username'],
':name' => $_POST['name'],
':image' => $_FILES['image']['name'],
':description' => $_POST['description'],
':moderatedcheck' => $moderatedcheck,
':user_id' => $_SESSION['user']['id']
);
$query = " UPDATE users SET email = :email, username = :username, name = :name, image = :image, description = :description, moderatedcheck = :moderatedcheck";
你的 Sql 可以动态构建,在代码的开头定义一个像 $imageSql = '';
这样的变量,当 $_FILES['image']
被设置时覆盖你的 $imageSql = ', image = :image';
和你的 $query_params[':image'] = $_FILES['image']['name']
最后你的查询将是这样的:
$query = " UPDATE users SET email = :email, username = :username, name = :name".$imageSql.", description = :description, moderatedcheck = :moderatedcheck";
我用这个:
if(is_uploaded_file($_FILES["image"]["tmp_name"])){
//query to update the data with the image
}else{
//query to update the data without the image
}
最好和正确的做法是通过判断图片的错误值,错误值为4表示没有上传文件。文件名或其他属性的其他测试有些不精确。
$imageFile = $_FILES['image'];
if ($imageFile['error'] != 4) {
///this code only runs if a file has been given.
}
更新
I have been looking at if ($_FILES['image']['error'] ===
UPLOAD_ERR_NO_FILE) but not luck, but I think i am in the right area.
$_FILES['image']['error']
是要检查的正确内容,但此值是数字值而不是文本值。查看检查 $_FILES['image']['error'] == 4
是否效果更好。
更新 2
将文件中的 if(isset($_FILES['image'])) {
替换为:
if ($_FILES['image']['error'] != 4)}{
如果有给定的文件,这将只运行下面的代码,尽管可能仍然存在文件大小等错误。
另外SQL插入:
将原来的替换为:
$query_params = array(
':email' => $_POST['email'],
':username' => $_POST['username'],
':name' => $_POST['name'],
':description' => $_POST['description'],
':moderatedcheck' => $moderatedcheck,
':user_id' => $_SESSION['user']['id']
);
$query = " UPDATE users SET email = :email, username = :username, name = :name, description = :description, moderatedcheck = :moderatedcheck";
并添加限定符:
if ($_FILES['image']['error'] == 0 ){
$query_params[':image'] = $_FILES['image']['name'];
$query = " UPDATE users SET email = :email, username = :username, name = :name, image = :image, description = :description, moderatedcheck = :moderatedcheck";
}
如果文件 i) 存在且 ii) 没有错误,这只会将文件名数据添加到插入数组。或者,如果文件 does 有错误,则将文件保存到数据库可能是毫无意义的,但可以用 if ($_FILES['image']['error'] != 4 )
替换该 if 语句。
我正在设计一个带有 PHP PDO 的 CMS 供用户更新那里的信息,这部分我让用户更改那里的商业形象,这将上传到服务器并通过 [=34 上传到数据库=]我的管理员。
有了这个,我可以上传图像,它也可以替换它在数据库中的值。我遇到的问题是当用户只想更新其他信息(不是图像)而不是其他信息时,系统提交图像值并替换数据库中相关行中没有值(空白上传)的行?如果没有上传图片,我希望它不会影响这一行。
我一直在看if ($_FILES['image']['error'] === UPLOAD_ERR_NO_FILE)
但不是运气,但我认为我在正确的区域。
HTML
<form action='edit_account.php' method='post' enctype='multipart/form-data'>
<h4>Business Image</h4>
<input type='file' name='image' id='fileToUpload' >
<input type='submit' value='Update Account' />
</form>
PHP
if(isset($_FILES['image'])) {
$username = $_POST['username'];
$target_dir = "images/users/$username/";
$target_file = $target_dir.basename($_FILES['image']['name']);
$upload0K = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
if(isset($_POST['submit'])) {
$check = getimagesize($_FILES['image']['tmp_name']);
if($check !== false) {
echo "<p>File is an image - ".$check["mime"]."</p>";
$upload0K = 1;
} else {
echo "<p>File is not an image</p>";
$upload0K = 0;
}
}
//if (file_exists($target_file)) {
//echo "<p>Sorry, file already exists.</p>";
//$upload0K = 0;
//}
if ($_FILES['image']['size'] > 5000000) {
echo "<p>Sorry, your file is too large.</p>";
$upload0K = 0;
}
///
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
echo "<p>Sorry, only JPG, JPEG, PNG and GIF files are allowed.</p>";
$upload0K = 0;
}
//if(!isset($_FILES['image']) || $_FILES['image']['error'] == UPLOAD_ERR_NO_FILE) {
//echo "Error no file selected";
//}
///
if ($upload0K == 0) {
echo "Sorry, your file was not uploaded.";
}
else {
if (move_uploaded_file($_FILES['image']['tmp_name'], $target_file)) {
echo "<p>The file ". basename( $_FILES["image"]["name"])."has been uploaded.</p>";
} else {
echo "<p>Sorry, there was an error uploading your file.</p>";
}
}
}
SQL插入
$query_params = array(
':email' => $_POST['email'],
':username' => $_POST['username'],
':name' => $_POST['name'],
':image' => $_FILES['image']['name'],
':description' => $_POST['description'],
':moderatedcheck' => $moderatedcheck,
':user_id' => $_SESSION['user']['id']
);
$query = " UPDATE users SET email = :email, username = :username, name = :name, image = :image, description = :description, moderatedcheck = :moderatedcheck";
你的 Sql 可以动态构建,在代码的开头定义一个像 $imageSql = '';
这样的变量,当 $_FILES['image']
被设置时覆盖你的 $imageSql = ', image = :image';
和你的 $query_params[':image'] = $_FILES['image']['name']
最后你的查询将是这样的:
$query = " UPDATE users SET email = :email, username = :username, name = :name".$imageSql.", description = :description, moderatedcheck = :moderatedcheck";
我用这个:
if(is_uploaded_file($_FILES["image"]["tmp_name"])){
//query to update the data with the image
}else{
//query to update the data without the image
}
最好和正确的做法是通过判断图片的错误值,错误值为4表示没有上传文件。文件名或其他属性的其他测试有些不精确。
$imageFile = $_FILES['image'];
if ($imageFile['error'] != 4) {
///this code only runs if a file has been given.
}
更新
I have been looking at if ($_FILES['image']['error'] === UPLOAD_ERR_NO_FILE) but not luck, but I think i am in the right area.
$_FILES['image']['error']
是要检查的正确内容,但此值是数字值而不是文本值。查看检查 $_FILES['image']['error'] == 4
是否效果更好。
更新 2
将文件中的 if(isset($_FILES['image'])) {
替换为:
if ($_FILES['image']['error'] != 4)}{
如果有给定的文件,这将只运行下面的代码,尽管可能仍然存在文件大小等错误。
另外SQL插入:
将原来的替换为:
$query_params = array(
':email' => $_POST['email'],
':username' => $_POST['username'],
':name' => $_POST['name'],
':description' => $_POST['description'],
':moderatedcheck' => $moderatedcheck,
':user_id' => $_SESSION['user']['id']
);
$query = " UPDATE users SET email = :email, username = :username, name = :name, description = :description, moderatedcheck = :moderatedcheck";
并添加限定符:
if ($_FILES['image']['error'] == 0 ){
$query_params[':image'] = $_FILES['image']['name'];
$query = " UPDATE users SET email = :email, username = :username, name = :name, image = :image, description = :description, moderatedcheck = :moderatedcheck";
}
如果文件 i) 存在且 ii) 没有错误,这只会将文件名数据添加到插入数组。或者,如果文件 does 有错误,则将文件保存到数据库可能是毫无意义的,但可以用 if ($_FILES['image']['error'] != 4 )
替换该 if 语句。