-4

データベースに画像をアップロードしましたが、表示したいときに画像が表示されません..表示できない理由がわかりません..コーディングに問題がある可能性があります..助けてもらえますか??

アップロード.php

<?php

$id = $_POST['account'];
$code = $_POST['code'];
$price = $_POST['price'];

echo $file = $_FILES['image']['tmp_name'];
if (!isset($file))
  echo "Please select an image.";
else
{
 $image = addslashes (file_get_contents($_FILES['image']['tmp_name']));
 $image_name = addslashes ($_FILES['image']['name']);
 $image_size = getimagesize($_FILES['image']['tmp_name']);

 if($image_size==FALSE)
  echo "That's not an image.";
else
{
if (!$insert = mysql_query("INSERT INTO menu 
    VALUES('$code','$price','$image','$id')"))
echo "Problem uploading images.";
else
{
  $lastid = $code;
  echo "Image uploaded.<p />Your image:<p /><img src=get.php?id=$lastid>";
}

   }
 }
 ?>

get.php

 <?php
 $con = mysql_connect("localhost","root","");
 if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

 mysql_select_db("food", $con);


 $id = addslashes($_REQUEST['FoodId']);

 $image = mysql_query("SELECT * FROM menu WHERE FoodId=$id");
 $image = mysql_fetch_assoc($image);
 $image = $image['image'];

 header("Content-type: image/jpeg");

 echo $image;
 ?>
4

3 に答える 3

2

1)小さなボビー テーブルを思い出してください。データベースへの入力を常にサニタイズします。

2) 古い は使用しないでくださいmysql_* functions。それらは安全ではなく、減価償却されています (ここの赤いボックスを参照してください)。代わりに、PDO または MySQLi の使用を検討してください。習得に時間がかからず、慣れれば使いやすさなど、あらゆる点ではるかに優れています。

3) 画像をサーバーに保存し、画像の URL のみをデータベースに保存する方がはるかに優れています。これにはいくつかの理由があります。特に、ユーザーが巨大な画像をアップロードできるようにすると、画像が一握り以上になるまでに、データベースのサイズが数 GB になり、読み取りが非常に遅くなり、定期的なバックアップがさらに難しくなります。

サーバーへのファイルのアップロード:希望の名前でファイルをアップロードして保存する方法

次に、ファイル名をデータベースに保存するだけです。次に、データベースからファイル名を取得し、その画像を表示したいときにアプリの img タグに追加するだけです。

于 2012-09-19T13:37:15.090 に答える
0

img要素を閉じないのはなぜですか?

また、文字列から var を取得することをお勧めします。

echo "Image uploaded.<p>Your image:</p><img src=\"get.php?id=$lastid\" />";
于 2012-09-19T13:29:02.510 に答える
0

DB を手動で調べて、画像が正常に保存され、実際に読み取り可能であることを確認してください。保存された画像の内容を投稿してください。

参考までに、通常は、画像を DB ではなくサーバー上のフォルダーに保存し、画像へのパスを DB に保存することをお勧めします。

画像へのパスを保存したい場合は、次のようになります。

<?php

$id = mysql_real_escape_string($_POST['account']);
$code = mysql_real_escape_string($_POST['code']);
$price = mysql_real_escape_string($_POST['price']);

$allowedExts = array("jpg", "jpeg", "gif", "png");
if(!isset($_FILES))
{
    die('No Image Uploaded - Please check form enctype="multipart/form-data".');
}
$fileinfo = pathinfo($_FILES['image']['name']);
$extension = $fileinfo['extension'];
if(!in_array($extension,$allowedExts))
{
    die('Invalid file type.');
}
$file   = '/uploadedimages/' . uniqid() .'.'. $extension;
if(!move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . $file))
{
    die('Problem Storing Image in folder /uploadedimages/ - Please check folder exists and is writable.');
}

$insert = mysql_query("INSERT INTO menu VALUES('$code','$price','$file','$id')");
if(!$insert)
{
    die('Problem adding to db.');
}
/*
the following two echos demostrate two methods of showing the image, 
the first adds the variable by splitting the string and rejoining it,
the second nests the image inside the variable without the need to edit it.

The difference is the single and double quotes, single quotes take any content 
inside them as litteral, meaning 
    $string = "hello";
    $new_string = '$string Dave.';
    will print $string Dave. Not hello Dave.
Double quotes will accept variables and add the content they hold.
    $string = "hello";
    $new_string = "$string Dave.";
    will print hello Dave.
*/
echo 'Image Uploaded.<p>Your Image</p><img src="' . $file . '" />';

echo "Image Uploaded.<p>Your Image</p><img src=\"$file\" />";

フォルダーは /uploadedimages/ であり、書き込み可能にする必要があります (chmod777)

別のファイルからの呼び出し。以前に使用したクエリを使用して、いつでも DB からイメージを呼び出すことができます。

$res = mysql_query("SELECT * FROM menu WHERE FoodId=$id");
$row = mysql_fetch_assoc($res);
$image = $row['image'];
?>
<img src="<?=$image?>" />

明らかに $id は、php ページで既に定義されているものです。

編集:他の誰かが私に投稿した編集は不要でした-変数で一重引用符を使用しても問題はなく、変数を追加している場所が明確に示されます.二重引用符の使用方法を示したい場合は、両方のオプションを指定する必要があります違いを説明します。あなたの編集は粘着性があり、二重引用符の後にスペースが追加されています。

于 2012-09-19T13:31:13.177 に答える