2012-04-14 12 views
2

以下は、ファイル(fileImage)をフォルダ(ImageFiles)にアップロードするコードの一部です。しかし、私がやりたいことは、INSERT VALUESコードを使ってファイルの場所(ファイルがアップロードされた場所)をデータベースにINSERTすることです。ファイルの場所を "ImageFile"フィールドに挿入し、 "ImageId"に文字列 "IMG"を表示し、その文字列の後に数字を入れたいとします。例:私のデータベーステーブルのこれらの値を正しくデータベースに挿入する方法

それは次のように読み込む場合:

ImageId  ImageFile 

IMG1  ImageFiles/penguins.png 
IMG2  ImageFiles/desert.png 
IMG3  ImageFiles/jellyfish.jpg 

を私は自分のコンピュータからファイルImageFilesフォルダに「tulips.png」をアップロードした場合次に、その後、データベースに挿入すべきです

ImageId ImageFile 

IMG4  ImageFiles/tulips.png 

これをコード化するにはどうすればよいですか?

 move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
     "ImageFiles/" . $_FILES["fileImage"]["name"]); 
     $result = 1; 

     $imagesql = "INSERT INTO Image (ImageId, ImageFile) 
    VALUES (""); 

mysql_query($imagesql); 
+0

実際に 'ImageId'行はIMG [some number]で名前が付けられていますか? – Repox

+0

はいこれはIMG [some number]という名前です – user1324106

答えて

3

イメージを識別するために文字列を使用する代わりに、自動インクリメントIDを使用する必要があります。

これは、1つのフィールドを挿入するだけで、自動作成フィールドが自動的に更新されるため、プロセスが簡単になります。

$imagesql = "INSERT INTO Image (ImageFile) VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')"; 

ImageIdは、代わりにAUTO INCREMENTのPRIMARY KEYとしてINT型にする必要があります。それはまた、テーブルを設計するための良い方法です。

0

まず第一に:デシベルの値を挿入する場合は、必ずmysql_real_escape_stringを使用し、以下のファイルを正常にアップロードし、INSERTのVALUESの一部のみのコーディングが含まれている現時点では私のコードです。

その後:

$query = "INSERT INTO `Image` (`ImageId`, `ImageFile`) 
      VALUES ('".mysql_real_escape_string($_FILES["fileImage"]["tmp_name"])."','". 
        mysql_real_escape_string($_FILES["fileImage"]["name"])."' 
     );"; 
+0

これは、OPが望んでいないImageIdとして、一時ファイル名を追加しますか? – Repox

2

あなたはこの

$imagesql = "INSERT INTO Image (ImageId, ImageFile) 
VALUES ('$imageName','$imageFile');"; 

のようなクエリに値を追加しかし、最初にあなたがすべての問題を避けるために正しく値を逃れることを確認する必要があります。また、mysql_関数を使用することは推奨されません。代わりにmysqli_同等物を使用するか、またはより良いまだPDO(PDOとそれが自動的にDBがあなたのためにエスケープ処理します。

2

あなたは、MySQLの自動インクリメントを使用することができます..あなたを約IMGIMG2を心配する必要はありません...など

を参照してください:http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html

例:

仮定:ImageIdは自動インクリメントフィールド

です

http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html

$tmpName = $_FILES ["fileImage"] ["tmp_name"]; 
$fileName = $_FILES ["fileImage"] ["tmp_name"]; 

move_uploaded_file ($tmpName, $fileName); 
$sql = "INSERT INTO Image (ImageId, ImageFile) VALUES (NULL,'%s');"; 
mysql_query (sprintf ($sql, mysql_real_escape_string ($fileName))); 

あなたがあなたのイメージ

$sql = "SELECT ImageId, ImageFile FROM Image"; 
$result = mysql_query ($sql); 
while ($row = mysql_fetch_assoc ($result)) { 
    echo "IMG", $row ["ImageId"], " = ", 'ImageFiles/' , $row ["ImageFile"], PHP_EOL; 
} 

を取得したい場合は、あなたがこの

A. IMGImageFiles/がそれらを保存し、数回一定で使うべき理由は効率的ではありません

B. integerベースのIDはvarcharより速く、 `JOIN

Cでよりよく実行されます。IMGXを取得するには、Xが増分値であれば、複数のSQL呼び出しが必要です。効率的ではありません

+0

こんにちは、ImageIdは自動インクリメントされていません、それはvarcharです。文字列 'IMG'は常に表示されますが、文字列の最後には次の数字が表示されます。最後のImageIdが 'IMG3'の場合、次のImageIdは 'IMG4'で、次は 'IMG5'などです – user1324106

4

PHP PDOオブジェクトを使用すると、コードを簡略化し、(Prepared Statementを使用して)より安全にすることができます。ここで

は、あなたがそれを行うだろうかの例です:まず

、これは物事を簡単になるだろうとAUTO_INCREMENT-EDのINTではなく「IMG番号」として、あなたのIDを保存する([挿入する必要はありませんその後、ID値)

DROP TABLE IF EXISTS tbl_img_store; 
CREATE TABLE tbl_img_store(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id), 
    filename VARCHAR(25) --increase this if you think you need to 
) ENGINE=InnoDB; 

また、あなたのデータベースをより効率的にするために店の構成設定にテーブルを作成します。

DROP TABLE IF EXISTS tbl_img_config; 
CREATE TABLE tbl_img_config(
    img_path VARCHAR(50) 
); 
INSERT INTO tbl_img_config (img_path) VALUES ("http://img.mysite.com/?i="); 

今すぐ戻ってPHPに、あなたはすぐに挿入することができますこのような画像の読み込み:

# Create a DB connection 
$db = new PDO("mysql:host='X.X.X.X';dbname='mydb'", $user, $pass); 

# Compile an array of image paths 
$img1path = "img1.png"; 
$img2path = "img2.png"; 
$img3path = "img3.png"; 
$images = array($img1path, $img2path, $img3path); 

# Create a query to insert the paths to the db 
$sql = "INSERT INTO tbl_img_store (filename) VALUES ('?'),('?'),('?');"; 
$query = $db->prepare($sql); 
$query->execute($images); 

# Check rows affected 
$rows = $query->rowCount(); 
echo "$rows images were saved."; 

希望します。

1

これは私が行うことです。あなたの質問への回答は、SELECT LAST_INSERT_ID()のmysql_queryの2番目のファイルの最後を見てください。私はIDをINSERTするのではなく、データベースにauto_incrementをさせることに注意してください。

イメージはこのようになります。その一部を、upload.phpからアップロードされています

<?php 

session_start(); 

if (!session_is_registered("error")) 
    session_register("error"); 

$error = array(); 

if (!session_is_registered("imgVars")) 
    session_register("imgVars"); 

foreach($_POST as $varname => $value) 
    $imgVars[$varname] = trim(EscapeShellCmd(stripslashes($value))); 

$imgVars = array(); 

if ($imgVars["is_image"] != 'J') { 
    $imgVars["is_image"] = 'N'; 
    if ($_FILES["image"]["size"] > 0) { 
     $size = GetImageSize($_FILES["image"]["tmp_name"]); 
     $width = $size[0]; 
     $height = $size[1]; 
     if(($width != 224) || ($height != 168)) { 
      $error["image"] = 'Image dimensions must be exactly 224 x 168 pixel!'; 
      $imgVars["is_image"] = "N"; 
     } 
     preg_match("/(\.\w+)$/", 
      $_FILES["image"]["name"],$match); 
     $imagetype = $match[1]; 
     if (!in_array(strtolower($imagetype), array(".jpg",".jpeg",".gif",".png"))) { 
      $error["image"] = 'You may upload only images of type JPEG, GIF and PNG!'; 
      $imgVars["is_image"] = "N"; 
     } 
     if ($imgVars["is_image"] == "J") { 
      $filename = time().$imagetype; 
      copy($_FILES["image"]["tmp_name"], "img/".$filename); 
      $imgVars["image_url"] = "img/".$filename; 
      $imgVars["image_type"] = $imagetype; 
     } 
    } else { 
     $error["image"] = 'Please upload an image!'; 
    } 
} 

if (count($error)) 
{ 
    header('Location: upload.php'); 
    exit(); 
} 

// connect to database 

$query = "INSERT INTO images SET image_url = '" . $imgVars["image_url"] . "'; 


if (!($result = @ mysql_query ($query, $connection))) 
    die("Your mysql error routine here."); 

$rs = mysql_query("SELECT LAST_INSERT_ID()", $connection); 
$lid = mysql_fetch_row($rs); 
$image_id = $lid[0]; 

if ($imgVars["is_image"] == 'J') { 
    rename ($imgVars["image_url"], "img/".$image_id.$imgVars["image_type"]); 
    $query = "UPDATE images SET image_url = 'img/".$image_id.$imgVars["image_type"]."' WHERE image_id = '".$image_id."'"; 
    if (!(@ mysql_query ($query, $connection))) 
     die("Your mysql error routine here."); 
} 

session_unregister("formVars"); 
session_unregister("fehler"); 

header('Location: danke.php'); 
exit(); 

?> 
:次に、アップロードされたファイルはprocess.phpを介して処理される

<form> 
<?php 

session_start(); 

if (isset($error["image"])) echo '<span class="error">'.$error["image"].'</span>'; else echo 'Select an image<span class="required"> *</span>'; 

if ($imgVars["is_image"] == "J") { 
    echo ' 
<input type="hidden" name="image_url" value="'.$imgVars["image_url"].'"> 
<input type="hidden" name="image_type" value="'.$imgVars["image_type"].'"> 
<input type="hidden" name="is_image" value="J"> 
<img src="'.$imgVars["image_url"].'" width="224" height="168" alt="Image"> 
<p>Change image?</p>'; 

?> 
<input type="file" name="image"> 
<input type="submit" name="upload" value="Upload" title="Upload your image"> 
</form> 

の一部は次のようになります

このコードでは、テストせずに元のファイルから翻訳してトリムしたので、このコードで誤植があるかもしれません。

関連する問題