2016-05-16 2 views
-1

У меня есть форма, которую я использую для регистрации пользователей. И затем у меня есть поле изображения, используя класс resize, чтобы сохранить изображение в папке и сохранить имя в базе данных. У меня две проблемы:Загрузка изображения не работает над формой

Изображение не изменяется и не помещается в папку, а код сохраняет только имя изображения, а не расширение, и он также должен хранить расширение.

Так вот мой код:

try { 

    $myValidation = new classes_ValidateForm ('registerUser', $_POST); 
    $validationResult = $myValidation->getStatus(); 
    if (!is_array($validationResult)) { 

    $arqName = $_FILES['arquivo']['name']; 
    $arqTemp = $_FILES['arquivo']['tmp_name']; 
    $pasta = 'img/'; 

//extensao do arquivo enviado 

    $extensaoTemp = explode('.',$arqName); 

    $extensao = strtolower(end($extensaoTemp)); 

//nome do arquivo TimesTamp 

    $nome = time(). '.' . $extensao; 

    $upload = move_uploaded_file($arqTemp, $pasta . $nome); 

    if ($upload === true) 

    { 



      $ficheiro = $pasta.$nome; 

      $resizeObj = new resize($ficheiro); 

      $resizeObj -> resizeImage(1600, 1200, 'auto'); 

      $resizeObj -> saveImage("img/$nome", 100); 

      $resizethumb = new resize($ficheiro); 

      $resizethumb -> resizeImage(200, 125, 'crop'); 

      $resizethumb -> saveImage("img/thumbnails/$nome", 100); 

    } 

    $myUser = new classes_User ($_POST, 'newUser'); 
     $myUserManager = new classes_UserManager($myControlPanel); 

     $userResult = $myUserManager->addUser($myUser, $_POST['password'], $nome); 

     echo $userResult; 
     die(); 

} 
} 

А вот функция для добавления пользователя:

public function addUser($myUser, $password, $image) { 

    if (!is_a ($myUser, 'classes_User')) { 

     throw new InvalidArgumentException('Invalid Object'); 
    } 

    // 1 Get Username and email 
    $username = $myUser->getUsername(); 
    $email = $myUser->getEmail(); 

    $query = "SELECT * FROM users WHERE username='$username' OR email='$email'"; 
    $myDb = $this->_controlPanel->getMyDb(); 
    $result = $myDb->performQuery($query); 

    if ($result == "Query Error") { 

     return ("ERROR ADDING USER"); 
    } 

    elseif ($result->num_rows==1) { 

     return (false); 
    } 

    else { 

     $name = $myUser->getName(); 
     $encpassword = md5($password); 
     $idtype = $myUser->getUserType(); 



     $query = "INSERT INTO users (name, username, email, password, id_type, image) VALUES ('$name', '$username', '$email', '$encpassword', '$idtype', '$image')"; 

     $result = $myDb->performQuery($query); 

     if($result != true) { 

      return ("Error Adding User:Query"); 
     } 

     else { 

      echo "<h2> You have been registered. You will be redirected to the login page.</h2>"; 
      header("Refresh:3; url=login.php"); 
     } 
    } 
} 

Im с помощью этого изменения размера класса:

https://gist.github.com/leonelsr/3291939#file-resize-class-php

Что я делаю неправильно здесь? Он хранит $ nome в базе данных, но не с расширением фотографии, как предполагается. И изображение также не сохраняется в папке.

+0

убедитесь, что вы используете 'ENCTYPE =«многослойную/форма-данные»' в вашей форме. –

ответ

0

Может быть, вы должны Используйте SplFileInfo класса, чтобы получить расширение файлов, как это:

<?php 

     try { 

      $myValidation  = new classes_ValidateForm ('registerUser', $_POST); 
      $validationResult = $myValidation->getStatus(); 

      if (!is_array($validationResult)) { 
       $arqName  = $_FILES['arquivo']['name']; 
       $arqTemp  = $_FILES['arquivo']['tmp_name']; 
       $pasta   = 'img/'; 

       //extensao do arquivo enviado 
       // TRY GETTING THE EXTENSION IN A SIMPLE FASHION... 
       // SIMPLICITY, SOMETIMES, IS PREFERABLE 
       //$extensaoTemp = explode('.',$arqName); 
       //$extensao  = strtolower(end($extensaoTemp)); 

       // SO WE GET THE FILE EXTENSION USING THE SplFileInfo CLASS LIKE SO: 
       $info   = new SplFileInfo($flName); 
       $extensao  = $info->getExtension(); 


       //nome do arquivo TimesTamp 
       $nome   = time(). '.' . $extensao; 


       // MAYBE CHECK FIRST THAT THE DIRECTORY EXIST BEFORE MOVING IT. 
       // AND IF IT DOESN'T YOU MAY WANT TO CREATE IT LIKE SO:     
       if(!is_dir($pasta)){ 
        mkdir($pasta, 0777, true); 
       } 

       $upload   = move_uploaded_file($arqTemp, $pasta . $nome); 

       if ($upload === true) { 
        $ficheiro  = $pasta.$nome; 
        $resizeObj  = new resize($ficheiro); 
        $resizeObj  ->resizeImage(1600, 1200, 'auto'); 
        $resizeObj  ->saveImage("img/$nome", 100); 
        $resizethumb = new resize($ficheiro); 
        $resizethumb ->resizeImage(200, 125, 'crop'); 
        $resizethumb -> saveImage("img/thumbnails/$nome", 100); 
       } 

       $myUser   = new classes_User ($_POST, 'newUser'); 
       $myUserManager = new classes_UserManager($myControlPanel); 
       $userResult  = $myUserManager->addUser($myUser, $_POST['password'], $nome); 

       echo $userResult; 
       die(); 

      } 
     }catch(Exception $e){ 

     } 
Смежные вопросы