2

MySQLデータベースに画像名を保存しています。アップロードを実行するたびに、画像名が添付されたリンクが返され、画像名が抽出されてデータベースに保存されます。いくつかの重大な欠陥を修正しましたが、チェックポイントを設定したにもかかわらず、データベースに空白や重複した名前が挿入されるという問題に直面しています。

ファイル名の重複/空白を回避するにはどうすればよいですか?

DBに名前を保存するためのより良いアプローチはありますか?

ここに画像の説明を入力してください

Webサーバー内の画像の場所:

http://www.example.com/imageupload/uploads/medium/50038dc14afb7.jpg

ブラウザのリンク:

http://www.example.org/imageupload/index.php?i=50038dc14afb7.jpg

PHP

<?
    $images = retrieve_images();
    insert_images_into_database($images);

    function retrieve_images()
    {        
        $images = explode(',', $_POST['i']);
        return $images;
    }

    function insert_images_into_database($images)
    {
        if(!$images) //There were no images to return
            return false;        

        $db = dbConn::getConnection();

        foreach($images as $image)
        {
            $sql = "INSERT INTO `urlImage` (`image_name`) VALUES ( ? )";
            $prepared = $db->prepare($sql);
            $prepared->execute(array($image));
        }
    }

?>
4

3 に答える 3

1

まず、空白の名前の問題は、以下をチェックすることで修正できます$_POST['i']

if (!isset($_POST['i'])) {
    echo "No image to upload!";
    die();
}

画像をアップロードした後にリダイレクトしてみましたか?

// When image is uploaded
header("Location: http://example.org/imageupload/index.php");
die();
于 2012-07-16T06:16:06.597 に答える
1

いくつかのこと:

  • 一意のファイル名があることを確認するには、tempnam()( http://php.net/manual/en/function.tempnam.php)を使用します。

  • ページの再読み込みの問題を回避するには、アップロードフォームを別のページに投稿します。これにより、アップロードの完了後に別のページ(または前のフォームページ)にリダイレクトされます。

  • これはあなたの質問とは関係ありませんが、SQLプリペアドステートメントはループの外側にある必要があります。

于 2012-07-16T06:41:51.497 に答える
0

アップロード時に画像名を変更できます。rand()はランダムな値を返す関数であるため、画像名の重複を避けることができます。日時オプションは常に新しい日時を返すため、確実に一意になります。画像名

Ex.$imageName.rand().$extention;
    OR
Ex. $date = new DateTime(now);
    $date = $date->format('Y_m_d_H_i_s');
    $imageName.$date.$extention;
于 2012-07-16T06:27:58.163 に答える