2013-03-15 81 views
2

我试图使用类内的方法将图像文件上传到数据库。它应该像一个函数一样工作。尝试使用类方法将文件上传到数据库

我有2个PHP文件。第一个,接收图像,并调用该方法的文件:

<?php 
if (!empty($_FILES)){ 
    require_once('masterclass.php'); 

    $galeria = $_POST['gal']; 
    $fecha = $_POST['fecha']; 
    $titulo = $_FILES['Filedata']['name']; 
    $imagen = $_FILES['Filedata']['tmp_name']; 

    $mc = new masterclass; 
    $mc->saveImage($galeria, $fecha, $titulo, $imagen, 800, 600, 80); 
} 
?> 

第二个,是应该做的工作方法:如果我直接在方法做的工作

public function saveImage($galeria, $fecha, $titulo, $tmpImagen, $maxWidth, $maxHeight, $quality){ 
    if(isset($galeria, $fecha, $titulo, $tmpImagen, $maxWidth, $maxHeight, $quality)){ 
     $ms->dbc(true); // connect to database 

     $fecha = $this->formatFecha($fecha); // format date string 

     $origen = imagecreatefromjpeg($tmpImagen); 
     $x = imagesx($origen); 
     $y = imagesy($origen); 

     if($x > $maxWidth){ 
      $nx = $maxWidth; 
      $ny = $y*$nx/$x; 
     } 
     if($y > $maxHeight){ 
      $ny = $maxHeight; 
      $nx = $x*$ny/$y; 
     } 
     else{ 
      $nx = $x; 
      $ny = $y; 
     } 

     $destino = imagecreatetruecolor($nx,$ny); 
     imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y); 
     imagejpeg($destino, $tmpImagen, $quality); 
     $imagen = addslashes(fread(fopen($tmpImagen, "rb"), filesize($tmpImagen))); 

     $peticion = "insert into galeria_fotos (galeria, fecha, titulo, imagen) values ('$galeria', '$fecha', '$titulo', '$imagen')"; 
     mysql_query($peticion) or die($this->isError(2)); 

     $ms->dbc(false); // disconnect from database 
    } 
    else{ 
     die($this->isError(2)); 
    } 
} 

第一个PHP文件的作品。但是,当我从类中使用saveImage()时不会。 自从去年以来,我一直在使用JavaScript,并且我对PHP很冷淡。

对不起西班牙语中的变量名,但我认为这是完全可以理解的。

作为额外的信息,我可以说,我试图调用方法时直接发送$_FILES数组,没有结果。

希望你能帮助我。谢谢你们。问候:)

+1

我的眼睛正在受伤 – TFennis 2013-03-15 18:23:32

+0

嗨,这需要进行基本的调试。它究竟在哪里失败?我注意到你用'isset($ galeria,...)来启动函数...'是否满足条件,即每个参数集? – 2013-03-15 18:25:19

+0

@TFennis,令我害怕,我是一个不熟练的PHP开发人员,而且我的英文数量有限(和我在这里,试图获得帮助),但你的评论并没有帮助我。谢谢无论如何... – kosmos 2013-03-15 18:28:18

回答

0

我试图重现您的问题。但是,我不能。我对自己的世界做了一些改变,但我相信会涵盖你发布的所有内容。

按照我的例子:

的index.php

<html> 
<head></head> 
<body> 
    <form action="upload.php" enctype="multipart/form-data" method=post> 
     <input type="file" id="f_up" name="f_up"> 
     <input type="submit" value=go> 
    </form> 
</body> 
</html> 

upload.php的

<?php 
require_once('masterclass.php'); 
if (!empty($_FILES)){ 
    require_once('masterclass.php'); 

    $galeria = $_POST['gal']; 
    $fecha = $_POST['fecha']; 
    $titulo = $_FILES['f_up']['name']; 
    $imagen = $_FILES['f_up']['tmp_name']; 

    $mc = new masterclass; 
    $mc->saveImage($imagen, 800, 600, 80); 
} 

masterclass.php

<?php 
class masterclass{ 
    public function saveImage($tmpImagen, $maxWidth, $maxHeight, $quality){ 
     $db = mysql_connect('127.0.0.1','root') or die('could not connect'); 
     mysql_select_db('examples',$db); 
     $origen = imagecreatefromjpeg($tmpImagen); 
     if(isset($tmpImagen, $maxWidth, $maxHeight, $quality)){ 

      //$fecha = $this->formatFecha($fecha); // format date string 

      $origen = imagecreatefromjpeg($tmpImagen); 
      $x = imagesx($origen); 
      $y = imagesy($origen); 

      if($x > $maxWidth){ 
       $nx = $maxWidth; 
       $ny = $y*$nx/$x; 
      } 
      if($y > $maxHeight){ 
       $ny = $maxHeight; 
       $nx = $x*$ny/$y; 
      } 
      else{ 
       $nx = $x; 
       $ny = $y; 
      } 

      $destino = imagecreatetruecolor($nx,$ny); 
      imagecopyresized($destino,$origen,0,0,0,0,$nx,$ny,$x,$y); 
      imagejpeg($destino, $tmpImagen, $quality); 
      $imagen = addslashes(fread(fopen($tmpImagen, "rb"), filesize($tmpImagen))); 

      $peticion = "insert into upload_image (image) values ('$imagen')"; 
      mysql_query($peticion,$db) or die('error'); 


     } 
     else{ 
      die($this->isError(2)); 
     } 
    } 
} 

此代码在MySQL 5.5的罚款。 27和PHP 5.3.15 。让我们多了解一下你的环境。

相关问题