0

我有一个将记录插入表的页面。我遇到了一点麻烦,如果用户决定他不想包含图片,我如何提交没有错误的表单。或者有没有办法设置文件字段以从文件夹中选择默认图像并将其设置为文件条目,如果用户没有选择?

我已经能够解决这个问题。下面是代码:

$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));
    }
4

1 回答 1

1

如果允许用户在不发送图片的情况下存储数据,那么仅在文件上传成功的情况下进行录制并不是一个好主意。

您应该重组代码,以便仅在上传图像时才进行图像上传,因此所有涉及的代码都$_FILES['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));
// [...]

这样,如果用户不上传图片,您就可以处理错误,并且还可以在没有图片的情况下记录数据。

编辑:我已经修改了上面的代码以反映插入语句中始终存在照片字段的需要。

编辑2:我在这次编辑中完全实现了文件上传块,以更接近提问者的实际情况,同时保持它的通用性。

于 2012-10-16T11:51:42.203 回答