-1

アップロード フィールドを含むフォームがありますが、正常に動作します。アップロードフィールドが空の場合を除いて、アップロードされ、すべてが良好です。データベーステーブルのフィールドも空白になり、古い画像エントリも何もありません!

私のフォーム:

<form enctype="multipart/form-data" action="add.php" method="POST"> 
Name: <input type="text" name="name"><br> 
E-mail: <input type="text" name = "email"><br> 
Phone: <input type="text" name = "phone"><br> 
Photo: <input type="file" name="site_logo"><br> 
<input type="submit" value="Add"> 
</form>

PHP コード:

<?php
    $target = "../upload/";
    $target = $target . basename($_FILES['site_logo']['name']);?>

<?php
  move_uploaded_file($_FILES['site_logo']['tmp_name'], $target);
  // output a list of the fields that had errors
     if (!empty($errors)) {
       echo "<p class=\"errors\">";
       echo "Please review the following fields:<br />";

          foreach($errors as $error) {
       echo " - " . $error . "<br />";
   }
       echo "</p>";
       }
?>

クエリ:

$site_logo=($_FILES['site_logo']['name']);


                $query = "UPDATE ss_settings SET 
                            site_logo = '{$site_logo}'
                        WHERE id = 1 ";
                $result = mysql_query($query, $connection);

データベース接続と更新クエリとすべてを設定しました。プロセスコードを投稿したので、皆さんには明らかです。フィールドが空のときに何もしないようにしたいだけです。

4

5 に答える 5

1

http://www.php.net/manual/en/features.file-upload.errors.phpで説明されているエラー メッセージを確認してください。

ファイルがアップロードされていないかどうかを確認するには:

if ($_FILES['site_logo']['error'] === UPLOAD_ERR_NO_FILE)

より良い方法は、エラーがないかどうかを確認することです。

if ($_FILES['site_logo']['error'] === UPLOAD_ERR_OK)

于 2013-06-14T20:55:38.550 に答える
0

個人的には、サニタイズされていないファイル名は使用しませんが、クエリを実行する前に有効なファイル アップロードを確認するだけで済みます。

したがって、次のようなものです(関数が非推奨になっているため)PDOmysql_*

// first line borrowed from @DaveChen, +1 for that
if ($_FILES['site_logo']['error'] === UPLOAD_ERR_OK)
{
  $stmt = $db->prepare("UPDATE `ss_settings` SET 
                            `site_logo` = :site_logo
                        WHERE `id` = :id ";

  // bind variables
  $stmt->bindValue(':site_logo', $_FILES['site_logo']['name'], PDO::PARAM_STR);
  $stmt->bindValue(':id', $the_ID, PDO::PARAM_INT);

  // execute query
  $stmt->execute();
}
于 2013-06-14T21:37:38.913 に答える
-1

おそらく、空のアップロードの処理を防ぐために、次のようなことを試してください:

if($_FILES['site_logo']['error']==0) { 
  // process 
} else { 
  // handle the error 
}

http://php.net/manual/en/features.file-upload.errors.php

于 2013-06-14T20:56:09.640 に答える
-1

問題は、アップロードが成功したと単純に想定していることです。決して成功を想定しないでください。常に失敗をチェックしてください。PHP['error']が $_FILES にパラメーターを提供するのには理由があります。これを使って:

if ($_FILES['site_logo']['error'] == UPLOAD_ERR_OK) {
   ... upload was successful
} else { 
   die("Upload failed with error code: " . $_FILES['site_logo']['error']);
}

エラーコードはここで定義されています: http://www.php.net/manual/en/features.file-upload.errors.php

コード 4 ( ) を確認する必要がありますUPLOAD_ERR_NO_FILE。これは、ユーザーが何もアップロードしていないことを意味します。

于 2013-06-14T20:56:13.880 に答える