2

我已经建立了一个网站,允许用户上传图像,然后这些图像会显示在主屏幕上。但是我刚刚碰壁了,所以我过去让用户上传图像,然后图像被保存到文件夹和数据库中,但是我该怎么做才能让图像显示在主屏幕上。

 <?php

 // Connect to database

 $errmsg = "";
 if (! @mysql_connect("localhost","alfred1000351","*******")) {
 $errmsg = "Cannot connect to database";
     }
 @mysql_select_db("drp_2cgih5o233");



 $q = <<<CREATE
 create table pix (
 pid int primary key not null auto_increment,
 title text,
 imgdata longblob)
 CREATE;
 @mysql_query($q);

 // Insert any new image into database

  if ($_REQUEST[completed] == 1) {
  // Need to add - check for large upload. Otherwise the code
  // will just duplicate old file ;-)
 // ALSO - note that latest.img must be public write and in a
 // live appliaction should be in another (safe!) directory.
 move_uploaded_file($_FILES['imagefile']['tmp_name'],"latest.img");
 $instr = fopen("latest.img","rb");
 $image = addslashes(fread($instr,filesize("latest.img")));
 if (strlen($instr) < 149000) {
 mysql_query ("insert into pix (title, imgdata) values (\"".
 $_REQUEST[whatsit].
 "\", \"".
 $image.
 "\")");
 } else {
 $errmsg = "Too large!";
 }
 }

 // Find out about latest image

  $gotten = @mysql_query("select * from pix order by pid desc limit 1");
  if ($row = @mysql_fetch_assoc($gotten)) {
  $title = htmlspecialchars($row[title]);
  $bytes = $row[imgdata];
  } else {
  $errmsg = "There is no image in the database yet";
  $title = "no database image available";
  // Put up a picture of our training centre
  $instr = fopen("../wellimg/ctco.jpg","rb");
   $bytes = fread($instr,filesize("../wellimg/ctco.jpg"));
  }

 // If this is the image request, send out the image

if ($_REQUEST[gim] == 1) {
 header("Content-type: image/jpeg");
print $bytes;
exit ();
}
?>

<html><head>
<title>Upload an image to a database</title>
<body bgcolor=white><h2>Here's the latest picture</h2>
<font color=red><?= $errmsg ?></font>
<center><img src=?gim=1 width=144><br>
<b><?= $title ?></center>
<hr>
<h2>Please upload a new picture and title</h2>
<form enctype=multipart/form-data method=post>
<input type=hidden name=MAX_FILE_SIZE value=150000>
<input type=hidden name=completed value=1>
Please choose an image to upload: <input type=file name=imagefile><br>
Please enter the title of that picture: <input name=whatsit><br>
then: <input type=submit></form><br>
<hr>

</body>
</html>
4

1 回答 1

0

这是我的坚持:

  1. 不要抑制从 DB 获得的警告。它们是真实的,也是需要的。从 DB 调用前面删除所有 @ 字符。如果您收到任何通知、警告、错误,请不要压制它们,请更正它们。

  2. 如果您正在编写新代码,请考虑使用 PDO 作为 DB API,而不是旧的、已弃用的 PHP MySQL API。它就像 MySQL API 一样简单易用。

  3. 您只想尝试只创建一次表,将其从多次执行的代码中删除。

  4. 您应该检查 $_REQUEST 参数是否存在,如果不存在则不要比较它们。您还需要将参数名称放在引号中,否则 PHP 会认为您使用的是常量,而您不是。所以线if ($_REQUEST[completed] == 1) {必须固定为if(isset($_REQUEST['completed']) && $_REQUEST['completed'] == 1) {。同样适用于whatisitgim-params。

  5. 该代码if (strlen($instr) < 149000) {无法按预期工作,您无法获得资源长度。您可能正在寻找此功能:if (strlen($_FILES['imagefile']['size']) < 149000) {.

  6. 与 s 相同(与步骤 4 中相同),$row您需要将 literas 放在引号中,因此将这些行修复为:$title = htmlspecialchars($row['title']); $bytes = $row['imgdata'];

  7. 否则它应该可以工作。但是,它包含数据库安全漏洞,这可能会导致您的网站受到威胁,因此我建议您不要将其放到任何真实网站上。只是为了你自己/朋友的乐趣。

于 2012-06-05T06:45:06.680 回答