如果php中的文件字段为空,如何提交没有错误的表单?
我有一个将记录插入表的页面。我遇到的一点问题是,如果用户决定不想包含图片,我如何提交表单而不出错。或者,如果用户没有选择,是否有方法设置文件字段以从文件夹中选择默认图像并将其设置为文件条目 我已经解决了这个问题。代码如下:如果php中的文件字段为空,如何提交没有错误的表单?,php,html,mysql,sql,Php,Html,Mysql,Sql,我有一个将记录插入表的页面。我遇到的一点问题是,如果用户决定不想包含图片,我如何提交表单而不出错。或者,如果用户没有选择,是否有方法设置文件字段以从文件夹中选择默认图像并将其设置为文件条目 我已经解决了这个问题。代码如下: $editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) { $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STR
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ($_FILES['photo'] && $_FILES['photo']['error'] == 0) {
$set['photo'] = "'" . $pix . "'";
$image = @getimagesize($_FILES['photo']['tmp_name']);
$size = ($_FILES["photo"]["size"]<= 512000);
if($image && $size = TRUE)
$pix= $_FILES['photo']['name'];
$kaboom = explode(".", $pix);
$pixExt = end($kaboom);
$photo= rand()."_".time().".".$pixExt;
$tmpName = $_FILES['photo']['tmp_name'];
$target = "../events/";
$target = $target . $photo;
}
move_uploaded_file($tmpName, $target);
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "pd")) {
$insertSQL = sprintf("INSERT INTO events (title, detail, `date`, photo) VALUES (%s, %s, %s, '$photo')",
GetSQLValueString($_POST['title'], "text"),
GetSQLValueString($_POST['detail'], "text"),
GetSQLValueString($_POST['date'], "text"));
mysql_select_db($database_connMain, $connMain);
$Result1 = mysql_query($insertSQL, $connMain) or die(mysql_error());
$insertGoTo = "confirm.php?user=" . $row_rsadmin['aID'] . "";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
$editFormAction=$\u服务器['PHP\u SELF'];
if(isset($\u服务器['QUERY\u字符串]])){
$editFormAction.=“?”.htmlentities($\u服务器['QUERY\u字符串]);
}
如果($\u文件['photo']&&&$\u文件['photo']['error']==0){
$set['photo']='''.$pix'.';
$image=@getimagesize($_文件['photo']['tmp_名称]]);
$size=($_FILES[“photo”][“size”]如果允许用户存储数据而不发送图片,则仅在文件上载成功时进行录制不是一个好主意
您应该重新构造代码,以便只有在上载了图像的情况下才会上载图像,因此所有涉及$\u文件['photo']
的代码都应该位于块内,如下所示:
if ($_FILES['photo'] && $_FILES['photo']['error'] == 0) {
// upload file here
}
此外,处理此块之外的数据库功能也很重要,因此您必须在文件上载块之外创建一个记录集,并在其中添加与图像相关的值
// [...]
$set = array(
'title' => "'" . GetSQLValueString($_POST['title'], "text") . "'",
// and so on ...
'photo' => "null"
);
if ($_FILES['photo'] &&
$_FILES['photo']['error'] == 0 &&
$_FILES['photo']['size'] <= 512000) {
$kaboom = explode(".", $pix);
$photo = rand() . "_" . time() . "." . end($kaboom);
$target = "../events/" . $photo;
if (move_uploaded_file($_FILES['photo']['tmp_name'], $target)) {
$set['photo'] = "'" . $photo . "'";
}
}
// [...]
$insertSQL = sprintf("INSERT INTO events (`%s`) VALUES (%s)",
implode("`,`", array_keys($set)),
implode(",", $set));
// [...]
/[…]
$set=数组(
'title'=>“”。GetSQLValueString($_POST['title'],“text”)。“”,
//等等。。。
“照片”=>“空”
);
如果($\u文件['photo']&&
$\u文件['photo']['error']==0&&
$\u文件['photo']['size']感谢aorcsik。如果我将它们放在块中,我仍然必须在insertSQL语句中放入$photo,该语句应该包含一个值或一个空条目。如果$photo的值为空,我是否仍然会有相同的错误?是否有一种方法可以说,如果$photo为空,则继续在表中插入记录并忽略$photo或将$photo设置为空插入记录前的默认图像?如果您有一个数据库结构,需要在insert语句中显示photo值,则可以进行一些修改,我会将其添加到答案的末尾。非常感谢@aorcsik的帮助。在您的帮助下,我能够实现我想要的。我稍微修改了代码。将更新先前发布的代码反映了这些更改。实际上,我还将在上载块中包含move\u uploaded\u file()
,我会相应地更新我的代码。另外,请注意条件中的$size=TRUE
,因为这是一个赋值,并且总是会导致TRUE
,您应该在那里使用=
。