-1

こんにちは、このスクリプトはうまく機能しますが、3つの画像をアップロードすると、3つの画像の名前をデータベースの同じ行に追加しようとしています.$extensionには画像の3つの名前が表示されますが、 image1 、 images2 、 images3 の下の同じデータベース行に 3 つの名前を取得する方法がわかりません 私が知っていることはすべて試しましたが、運が悪かったです。

`$connection = mysql_connect("localhost", "????", "????");
mysql_select_db("????", $connection);
$uploaddir = "upload/";
$MaxSize = "600000";
$number_of_files = count($_FILES['userfile']);
for($i=0;$i<=$number_of_files;$i++) {
$filename_format = uniqid(Img_);
if (!$_FILES['userfile']['size'][$i] == 0)
{
if ($_FILES['userfile']['size'][$i] > $MaxSize)
{
echo "ERROR: file too big";
exit;}
$tempfile = $_FILES['userfile']['tmp_name'][$i];
$uploadfile = $_FILES['userfile']['name'][$i];
$extension = $_FILES['userfile']['type'][$i];
if (strstr($extension,"jpeg"))
{
$extension=".jpg";
}
elseif (strstr($extension,"gif"))
{
$extension=".gif";
}
elseif (strstr($extension,"png"))
{
$extension=".png";
}
else
{
echo "ERROR: Only gif/jpeg/png allowed.";
exit;
}
if(copy($tempfile, $uploaddir.$uploadfile))
{
echo "Copy Successfull!";
}
else
{
echo "ERROR: something happened trying to copy the temp file to the folder";
}
if(rename($uploaddir.$uploadfile,$uploaddir.$filename_format.$extension))
{
}else{
$query = "INSERT INTO photos (image1, image2, image3) VALUES ('WHAT TO PUT      HERE?','HERE','AND HERE')";  
$result = mysql_query($query);
echo " and renamed to $filename_format$extension";
}
}
else
{
echo "ERROR: Problem renaming the file.. $uploadfile";
}
}`.
4

2 に答える 2

0

これは、実際には優れたデータベース設計ではありません。誰かが4つの画像をアップロードした場合はどうなりますか?彼らが10をアップロードした場合はどうなりますか?このアプローチでは、同じものに対して複数の列を処理する必要があり、格納できる値の数に任意の制限が課されるため、コードが複雑になります。

アップロードされたファイルごとに個別のデータベースレコードを使用することをお勧めします。ファイルのグループがすべて「一緒に」アップロードされたことを示したい場合は、行が一緒にアップロードされた写真のセットを表すphoto_groupsテーブルを作成し、photosテーブルの各レコードにphoto_groupsテーブルのレコードのIDを含めます。そうすれば、1つの写真グループに複数の写真レコードを関連付けることができます。

于 2012-04-07T19:24:54.133 に答える
0

特定の行に可変数の列を配置することは想定されていません (実際、私の知る限り、SQL のほとんどのフレーバーでは不可能です)。

たとえば、添付ファイルのあるフォーラム投稿がある場合は、次のようにする必要があります。

+---------------------------------------------+
| Table `forum_posts`                         |
+-----------+--------------+--------+---------+
| post_name | post_content | etc... | post_id |
+-----------+--------------+--------+---------+
| "Example  | "Blah blah   | ...    |    5    |
|  post"    |  blah..."    |        |         |
+-----------+--------------+--------+---------+

ここで、post_id は自動インクリメントの主キー (基本的に、このテーブルの各行には一意の post_id があることを意味します) であり、次のように画像を新しいテーブルに配置する必要があります。

+----------------------------------------------+
| Table `forum_post_images`                    |
+------------+------------+---------+----------+
| image_url  | image_name | post_id | image_id |
+------------+------------+---------+----------+
| image1.png | "Lol!"     |   10    |     1    |
+------------+------------+---------+----------+
| image2.jpg | "asdf"     |   1     |     2    |
+------------+------------+---------+----------+
| image3.gif | "Example"  |   3     |     3    |
+------------+------------+---------+----------+

ここでは、各画像には一意の ID (必要な場合に備えて) と、それが属する投稿の ID があります。これで、フォーラムの投稿とそれに添付された画像を読み込むために、2 つの個別のクエリを実行できるようになりました。

SELECT * FROM `forum_posts` WHERE `post_id` = 5;

SELECT * FROM `forum_post_images` WHERE `post_id` = 5;

これは、2 つのクエリで、投稿情報とそれに添付された画像を返します。同じアプローチを使用して、特定のアプリケーション用にこの種の設計を変更できます。

于 2012-04-07T20:42:47.277 に答える