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 に答える