分享

上传和显示图片 - php - 生活点滴

 乐乐妈 2009-09-21
上传和显示图片
php保存图片
保存上传图片有两种方法。一种是在mysql数据库中保存图片文件,另一种是在mysql中只保存文件名,而图片文件保存在php.ini配置文件中设置的upload临时目录,也就是upload_tmp_dir参数中。
 
一、为了用mysql保存图片文件,我们需要建立一个数据表用来保存数据。下面在数据库(test)建立名为image的数据表,该表只有两个字段,一个字段为用户名,一个用来保存图片,建立image表的SQL句如下:
   use test;
   create table image(
      id varchar(20) not null,
      photo longlob,
      primary key (id)
      );
Notice: photo用来保存图片文件,因此需要定义为longblob型数据。
此外,我们还需要建立一个简单的网页界面,用来上传图片。
下面为上传图片的代码:
<html>
<body>
<form name="image" method="post" action="save_image.php" enctype='multipart/form-data'>
<table width="80%" border="0" cellspacing="1" cellpadding="3" align="center">
<tr>
<th clospan="2"><font size="4">上传图片范例</font></th>
</tr>
<tr>
<td>username</td>
<td><input type="text" name="id" maxlength="20"></td>
</tr>
<tr>
<td>the pthoto:</td>
<td><input type="file" name="photo" size='25'></td>
</tr>
<tr>
 <td align=right>
<input type="submit" name="Submit" value="upload">
</td>
<td>
<input type="rest" name="Rest" value="rest">
</td>
</tr>
</table>
</form>
</body>
</html>
二、在mysql中保存文件的方法
   在mysql中保存图片文件的程序命名为save_image.php 代码如下:
<?
$conn=mysql_connect("localhost","dbuser","dbpwd");
mysql_db_select("test",$conn);
?>
<?php
$id=$_POST['id'];
$check_sql="select * from image where id = 'id'";
$check_re=mysql_query($check_sql);
$num=mysql_num_rows($check_re);
if($num!=0){
  echo "<table width='100%' align=center><tr><td align=center>";
 echo "该用户名已经存在,请选择另一个<br>";
    echo "<font color=red>上传失败!</font><br><a href='javascript:history.back(-1)'>返回</a>";
    echo "</td></tr></table>";
 exit();
}
// 方法一:在mysql中保存图片文件,
// 如果有图片文件,打开图片文件,将图片文件中的数据用函数
// addslashes处理,然后传递给变量$data,
// addslashes函数是给字符串加入斜线,使字符串能够顺利写入数据库中
// 这样变量$data 中保存的就是图片文件的数据了
if ($photo<>""){
 $fp=fopen($photo,"r");
 $data=addslashes(fread($fp,filesize($photo)));
}
$password=md5($password);
$sql="insert into image (id,photo) values('$id','$data')";
mysql_query($sql,$conn) or die ("插入数据失败: ".mysql_error());
// 关闭连接
mysql_close($conn);
// 显示上传图片成功
// 重定向到注册成功页面
header("Location:display_image1.php?id=$id");
本程序需要连接mysql数据库,然后判断用户输入的用户是否在数据库中已经存在,如果存在,提示用户已经存在,上传达室图片失败,然后操作mysql写入图片文件数据。
  图片上传成功后,程序自动重定向到display_image.php程序,显示刚才输入的用户名和上传达室图片, display_image.php程序代码如下:
<?php
// 连接数据库
$conn = mysql_connect("localhost", "phpdb", "phpdb");
mysql_select_db("test",$conn);
?>
<html>
<body>
<?
$id=$_GET['id'];
echo "<table align=center><tr><td ><font color=red>上传图片成功!</font></td></tr>";
echo "<tr><td >下面是你的上传的图片:</td></tr>";
// 上传资料
$sql="select * from image where id='$id'";
$re=mysql_query($sql,$conn);
$result=mysql_fetch_array($re);
?>
 <tr>
      <td>用户名:</td>
      <td>
        <?echo $result[id];?></td>
    </tr>
   
 <?
 // 对应方法一保存图片文件在mysql中的显示图片方法
 // 需要用一个show.php文件显示图片
 if($result[photo]<>""){ 
  $image=mysql_result($re,0,"photo");
     echo "<tr> ";
  echo "<td>照片:</td>";
     echo "<td>";
  //echo "<img src='$result[photo]'>";
  echo "<img src='show.php?id=$id'>";
     echo "</td>";
     echo "</tr>";
 } 
 ?>
</table>
</body>
</html>
其中在显示图片时,用到了一个子程序,show.php该子程序show.php的代码如下:
<?php
// 连接数据库
$conn = mysql_connect("localhost", "phpdb", "phpdb");
mysql_select_db("test",$conn);
?>
<?
// 连接数据库查询
$sql="select * from image where id='$id'";
$re=mysql_query($sql,$conn);
// 取出图片文件的内容
$image=mysql_result($re,0,"photo");
echo $image;
?>
这样就可以显示保存在mysql数据库的图片文件。
 
 
第二种方法:
在mysql中只保存上传的图片文件名的程序为save_image2.php.上传界面的程序还是前面的image_upload.html,只是需要将其中的form表单动作指向为程序save_image2.php即将该语句改为:
<form name="form2" method="post" action="save_image2.php" enctype='multipart/form-data'>
保存图片文件名的程序save_image2.php的代码如下:
<?php
// 连接数据库
$conn = mysql_connect("localhost", "phpdb", "phpdb");
mysql_select_db("test",$conn);
?>
<?
// 取得网页的参数
$id=$_POST['id'];
// 判断该用户名是否已经存在
$checksql="select * from image where id='$id'";
$check_re=mysql_query($checksql,$conn);
$num=mysql_num_rows($check_re);
if($num!=0){
 echo "<table width='100%' align=center><tr><td align=center>";
 echo "该用户名已经存在,请选择另一个<br>";
    echo "<font color=red>上传失败!</font><br><a href='javascript:history.back(-1)'>返回</a>";
    echo "</td></tr></table>";
 exit();
}
// 方法二:只保存文件名,
// 保存文件名时,文件在php.ini配置文件中设置的upload临时目录中,也就是upload_tmp_dir 参数中
if ($photo<>""){ 
 if (($photo_type== "image/pjpeg")OR($photo_type == "image/gif")){
  // C:\WINNT\Temp 使PHP.ini配置文件中设置的upload文件的临时目录
  $photodir="C:\WINNT\Temp/";
  if(!(file_exists($photo_name))){
   // 拷贝该图片文件到设定的上传文件临时目录中
     copy($photo,$photodir.$photo_name);
  }
 }
 else{
    echo "<script language=javascript>alert('上传照片只能是JPG或者GIF!');history.go(-1)</script><br>";
  echo "或者<br>";
        echo "文件名已经存在,请为图片改一个文件名";
        exit;
 }
}
else{ 
 $photo_name="";
}
$sql="insert into image (id, photo) values('$id', '$photo_name')";
mysql_query($sql,$conn) or die ("插入数据失败: ".mysql_error());
// 关闭连接
mysql_close($conn);
// 显示上传图片成功
// 重定向到注册成功页面
header("Location:display_image2.php?id=$id");
?>
此方法保存上传的图片时,在mysql中只保存该图片文件名,图片文件真正存放的位置是php 系统中设置的上传文件临时目录或这里重新指定目录, 这里设置的是“C:\winnt\temp"然后拷贝此图片文件到该目录,这一方法与前面的上传文本方法相似。
上传图片成功后,同要自动重定向到一个显示刚上传的图片的程序。此程序命名为display_image2.php其代码如下:
<?php
// 连接数据库
$conn = mysql_connect("localhost", "phpdb", "phpdb");
mysql_select_db("test",$conn);
?>
<html>
<body>
<?
$id=$_GET['id'];
echo "<table align=center><tr><td ><font color=red>上传图片成功!</font></td></tr>";
echo "<tr><td >下面是你的上传的图片:</td></tr>";
// 上传资料
$sql="select * from image where id='$id'";
$re=mysql_query($sql,$conn);
$result=mysql_fetch_array($re);
?>
 <tr>
      <td>用户名:</td>
      <td>
        <?echo $result[id];?></td>
    </tr>
   
 <?
 // 对应方法二只保存图片文件名在mysql中的显示图片方法
 // 直接从文件保存目录C:\WINNT\Temp/中取出文件
 if($result[photo]<>""){ 
  $photodir="C:\WINNT\Temp/".$result[photo];
     echo "<tr> ";
  echo "<td>照片:</td>";
     echo "<td>";
  echo "<img src='$photodir'>";
     echo "</td>";
     echo "</tr>";
 }
 ?>
</table>
</body>
</html>
至此,上传图片的两种处理方法就介绍完了,如何显示用这两种方法上传图生也顺带介绍了,用户要以根据情况选择一个方法处理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多