2

私は可能な限り単純な形式の画像アップロードで作業しています.

コードは次のようになります

<form action="index.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="Upload image">
</form>

<?php
$image = addslashes(file_get_contents($_FILES['image'][tmp_name]));
mysql_query("INSERT INTO store_images VALUES ('','$image')");
?>

画像を選択してアップロードし、更新を 1 回または 2 回押します。テーブル「store_images」を見ると、画像が 2 回、3 回などアップロードされています。

別の画像をアップロードするオプションを台無しにすることなく、どうすればそれを回避できますか?

4

4 に答える 4

3

で開始する:

古いmysql_*関数で新しいコードを書くのはやめてください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決定できない場合は、この記事が選択に役立ちます。学習したい場合は、ここに PDO 関連の非常に優れたチュートリアルがあります。

今あなたの問題のために:

画像のアップロードが成功したら、リダイレクトを行う必要がありますheader('Location: http://example.com/the/address')。これは同じページでもかまいません。リダイレクトを行うため、データはページ上になくなり、再度挿入されることはありません。

于 2012-05-22T21:12:55.860 に答える
2

フォームで乱数、ハッシュなどを生成し、画像とともにデータベースに挿入します。挿入する前に、既存のハッシュについてデータベースを確認してください。

于 2012-05-22T21:12:49.003 に答える
0

データベースの最初の値を確認し、$imageそこにない場合にのみ、アップロード/挿入します

于 2012-05-22T21:11:15.057 に答える
-1

テーブルにファイルの重複を入れたくない場合 (推奨) 、ファイルの md5 ハッシュを作成し、それをファイルの列に格納して、md5 列を一意にします。

テーブルにファイルの複製が必要な場合は、上記とまったく同じことを行い、 md5 列とファイル名を一意にするだけです。これにより、別のユーザーがまったく同じ画像を別の名前で再度挿入できるようになります。

同じ名前のファイルの重複を許可する場合は、@jimpic が提案したことを実行してください。これにより、あなたまたは他のユーザーが同じファイル名の同じファイルの複製を挿入できるようになりますが、それは意図的に行った場合に限られます。

挿入するたびに別のページにリダイレクトしないでください。可能であれば、通常のブラウザの戻る/進む機能を妨げない方がよいでしょう。ユーザーにとっては、1 ページの更新のように感じますが、実際にはブラウザーには 2 のように動作し、戻るボタンで「フォーム データを再送信しますか?」と尋ねられるため、人々を悩ませます。

于 2012-05-22T21:16:01.527 に答える