2013-03-15 82 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 。讓我們多瞭解一下你的環境。

相關問題