言語: PHP / MySQL
私は頭がおかしくなっています、本当に今尋ねなければなりません...複数ファイルのアップロードフォームがあります:
<input type="file" name="fileupload[]" multiple>
Javascript の助けを借りて、この入力に変更が加えられるたびに、別の入力内にファイル名のリスト + フォーマットされた文字列 (ファイル名から取得された) が追加されるため、変更時に以下に示すようなレイアウトになります(単にいくつかの画像を追加しました):
ほぼ同様: http://jsfiddle.net/pxfunc/WWNnV/4/
// このようなレイアウトの HTML 表現は... (3 つの画像を追加したと仮定)
<input type="file" name="fileupload[]" multiple>
- 画像名-1.jpg
<input type="text" value="Image Name 1" name="keyword[]">
- justsome_file.png
<input type="text" value="Justsome File" name="keyword[]">
- some_Img-031.gif
<input type="text" value="Some Img 031" name="keyword[]">
<input type="submit" value="Upload">
ファイルをアップロードするだけでなく、ファイル名に基づいたデフォルトのタイトルを付けてデータベースに追加したいので、このようにしています(そして、アップロードするときに画像ごとにこのタイトルを設定/変更するオプションもあります)。私のフォームに問題はありません。
問題:私のジレンマは、フォーム データ/アクションが送信される PHP ページ内にあります。
次のいずれかしかできません。
- 正しい画像をアップロードしますが、すべて同じタイトルになります
- 正しいタイトルを挿入しますが、すべて同じ画像を取得します
これが私のPHPアクションページです:(現在、正しい画像をアップロードしていますが、すべて同じタイトルです)
<?php
// CONNECT TO DATABASE...
// INCLUDE UPLOAD CLASS LIBRARY
include (dirname(__FILE__).'/lib/class.upload.php');
$files = array();
foreach ($_FILES['fileupload'] as $k => $l)
{
foreach ($l as $i => $v)
{
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
$imagename = $_POST['keyword'][$i];
}
}
// create an array here to hold file names
$uploaded = array();
foreach ($files as $file)
{
$generate_name = rand(100,99999);
$generate_name_extra = rand(200,9999);
$filenamex = "COVER_PHOTO_".$generate_name.$generate_name_extra."_".time();
$filenamex_thumb = $filenamex."_thumb";
$handle = new upload($file);
if ($handle->uploaded) {
$this_upload = array();
///// 1 ////////////////////////////////////////////////////////////////////
$handle->file_new_name_body = $filenamex_thumb;
$handle->file_force_extension = true;
$handle->image_resize = true;
$handle->image_x = '300';
$handle->image_ratio_y = true;
$handle->jpeg_quality = '100';
// ABSOLUTE PATH BELOW
$handle->process($absoRoot.'covers/thumbs/');
////////////////////////////////////////////////////////////////////////////
if ($handle->processed) {
// store the image filename
$this_upload['image'] = $handle->file_dst_name; // Destination file name
$this_upload['body'] = $handle->file_dst_name_body; // Destination file name body
$this_upload['extension'] = $handle->file_dst_name_ext; // Destination file extension
$category_id = $_POST['cat'];
$hiddenvalues = explode ("|",$_POST["cat"]);
$category = $hiddenvalues[0];
$category_name = $hiddenvalues[1];
$sql = 'INSERT INTO cover (id, img, keyword, category_name, cat_id) VALUES ("", "'.$this_upload['image'].'", "'.$imagename.'", "'.$category_name.'", "'.$category.'")';
mysql_query($sql);
}
$handle->clean();
header("Location: ./upload.php");
$message = "";
} else {
echo ' file not uploaded to the wanted location';
echo ' Error: ' . $handle->error . '';
}
} ?>
(私はColin VerotによるUpload Classを使用して画像のアップロードを処理し、FAQ チュートリアルを使用して、このページの複数の画像のアップロードを処理します:複数のアップロードについては? )
これは、画像をアップロードするだけであれば完璧に機能しますが、各画像データをデータベースに追加する機能を追加しました。& ここがややこしいところです。
キーは正しい foreach 内に SQL クエリを配置するか、おそらく別のクエリを作成することだと確信していますが、それを試してみましたが、画像のアップロードまたはタイトルのいずれかに対して 1 つの良い結果しか得られず、両方に対しては決して得られません。
画像をサイトにアップロードし、そのデータ (画像パスを含む) をデータベースに保存する必要があります。
私のコードを調べて、この問題を解決する方法を教えてください。考えられるすべてを試した後、私はすでに非常に混乱しているので、スニペットの手がかりは今のところ本当に素晴らしいでしょう. どうもありがとう!