2014-12-11 6 views
1

В моем скрипте php есть два оператора sql. Второй (соединение 2) не выполняется. Я верю, потому что значение для «id» не установлено, поскольку оно находится в частном классе. Мне было интересно, есть ли у кого-нибудь предложение о том, как это исправить?Значение не доступно в пределах частного класса

 <?php 
    //process pdf file upload 
     if (isset($_FILES["flyer"]["name"])); { 
      $allowedExtsf = array("pdf"); 
      $tempf = explode(".", $_FILES["flyer"]["name"]); 
      $extensionf = end($tempf); 
      if (($_FILES["flyer"]["type"] == "application/pdf") && ($_FILES["flyer"]["size"] < 524288000) && in_array($extensionf, $allowedExtsf)) 
      { 

         if (file_exists("../flyers/" . $_FILES["flyer"]["name"])) 
          { 
    //if file exists, delete the file on the server 
           unlink("../flyers/" . $_FILES["flyer"]["name"]); 
          } 
    //move currrent pdf to the flyers folder 
      move_uploaded_file($_FILES["flyer"]["tmp_name"],"../flyers/" . $_FILES["flyer"]["name"]); 
    //Make url of pdf file     
      $ad_link="http://www.website.com/flyers/" . $_FILES["flyer"]["name"]; 

    //SQL statement 1, insert all form fields, file url and current date time 
      } 
      else { 
       $ad_link = NULL; 
      } 
     require('../dbcon2.php'); 
    //Connection 1 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $stmt = $conn->prepare("INSERT INTO listings (title, address, lot_size, zoning, build_size, sale_price, lease_price, comment, transaction, ad_link, date_added) VALUES (:title, :address, :lot_size, :zoning, :build_size, :sale_price, :lease_price, :comment, :transaction, :ad_link, now())"); 
    //Bind 
      $stmt->bindParam(':title', $_POST['title']); 
      $stmt->bindParam(':address', $_POST['address']); 
      $stmt->bindParam(':lot_size', $_POST['lot_size']); 
      $stmt->bindParam(':zoning', $_POST['zoning']); 
      $stmt->bindParam(':build_size', $_POST['build_size']); 
      $stmt->bindParam(':sale_price', $_POST['sale_price']); 
      $stmt->bindParam(':lease_price', $_POST['lease_price']); 
      $stmt->bindParam(':comment', $_POST['comment']); 
      $stmt->bindParam(':transaction', $_POST['transaction']); 
      $stmt->bindParam(':ad_link', $ad_link); 
     $stmt->execute(); 
     $id = $conn->lastInsertId(); 
     $title = $_POST['title']; 
     $address = $_POST['address']; 
     $lot_size = $_POST['lot_size']; 
     $zoning = $_POST['zoning']; 
     $build_size = $_POST['build_size']; 
     $sale_price = $_POST['sale_price']; 
     $lease_price = $_POST['lease_price']; 
     $comment = $_POST['comment']; 
     $transaction = $_POST['transaction']; 
     $conn = null; 
     } 
    //Create class 
     class CropAvatar { 
      private $src; 
      private $id; 
      private $title; 
      private $address; 
      private $lot_size; 
      private $zoning; 
      private $build_size; 
      private $sale_price; 
      private $lease_price; 
      private $comment; 
      private $transaction; 
      private $data; 
      private $file; 
      private $dst; 
      private $type; 
      private $extension; 
    //location to save original image 
      private $srcDir = '../0images/listimg/orig'; 
    //location to save cropped image 
      private $dstDir = '../0images/listimg/mod'; 
      private $msg; 
    //Add to consttruct 
     function __construct($src, $data, $file, $id, $title, $address, $lot_size, $zoning, $build_size, $sale_price, $lease_price, $comment, $transaction) { 
      $this -> setSrc($src); 
      $this -> setData($data); 
      $this -> setFile($file); 
      $this -> setId($id); 
      $this -> setTitle($title); 
      $this -> setAddress($address); 
      $this -> setLot_size($lot_size); 
      $this -> setZoning($zoning); 
      $this -> setBuild_size($build_size); 
      $this -> setSale_price($sale_price); 
      $this -> setLease_price($lease_price); 
      $this -> setComment($comment); 
      $this -> setTransaction($transaction); 
      $this -> crop($this -> src, $this -> dst, $this -> data, $this -> lastid, $this -> title, $this -> address, $this -> lot_size, $this -> zoning, $this -> build_size, $this -> sale_price, $this -> lease_price, $this -> comment, $this -> transaction); 
     } 
       public function setId($id) { 
         $this->id = $id; 
     } 
       public function setTitle($title) { 
         $this->title = $title; 
     } 
       public function setAddress($address) { 
         $this->address = $address; 
     } 
       public function setLot_size($lot_size) { 
         $this->lot_size = $lot_size; 
     } 
       public function setZoning($zoning) { 
         $this->zoning = $zoning; 
     } 
       public function setBuild_size($build_size) { 
         $this->build_size = $build_size; 
     } 
       public function setSale_price($sale_price) { 
         $this->sale_price = $sale_price; 
     } 
       public function setLease_price($lease_price) { 
         $this->lease_price = $lease_price; 
     } 
       public function setComment($comment) { 
         $this->comment = $comment; 
     } 
       public function setTransaction($transaction) { 
         $this->transaction = $transaction; 
     } 
     //NNEED TO SET THE VARIABLES 

       private function setSrc($src) 
       { 
        if (!empty($src)) 
        { 
         $type = exif_imagetype($src); 
         if ($type) 
         { 
          $this -> src = $src; 
          $this -> type = $type; 
          $this -> extension = image_type_to_extension($type); 
          $this -> setDst(); 
         } 
        } 
       } 
       private function setData($data) 
       { 
        if (!empty($data)) 
        { 
         $this -> data = json_decode(stripslashes($data)); 
        } 
       } 
       private function setFile($file) 
       { 
        $errorCode = $file['error']; 
        if ($errorCode === UPLOAD_ERR_OK) 
        { 
         $type = exif_imagetype($file['tmp_name']); 
         if ($type) 
         { 
          $dir = $this -> srcDir; 
          if (!file_exists($dir)) 
          { 
           mkdir($dir, 0777); 
          } 
          $currdate=date('YmdHis'); 
          $extension = image_type_to_extension($type); 
          $src = $dir . '/' . $currdate . $extension; 
          if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_JPEG || $type == IMAGETYPE_PNG) { 
           if (file_exists($src)) 
           { 
            unlink($src); 
           } 
          $result = move_uploaded_file($file['tmp_name'], $src); 
    //Connection 2 - Update sql row according to row id with the url of cropped image 
          $listing_img="http://www.website.com/0images/listimg/mod/" . $currdate . $extension; 
          $GLOBALS[ 'listing_img' ]; 
         require('../dbcon2.php'); 
          $GLOBALS[ 'id' ]; 
          $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
          $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
          $sql="UPDATE listings SET listing_img='$listing_img' WHERE id=$this->id"; 
          $conn->exec($sql); 
          $conn = null; 
    //Error handling 
         if ($result) { 
          $this -> src = $src; 
          $this -> type = $type; 
          $this -> extension = $extension; 
          $this -> setDst(); 
         } else { 
          $this -> msg = 'Failed to save image file'; 
         } 
        } else { 
         $this -> msg = 'Please upload image with the following types only: JPG, PNG, GIF'; 
        } 
       } else { 
        $this -> msg = 'Please upload image file'; 
       } 
      } else { 
       $this -> msg = $this -> codeToMessage($errorCode); 
      } 
     } 
     private function setDst() { 
      $dir = $this -> dstDir; 
      if (!file_exists($dir)) { 
       mkdir($dir, 0777); 
      } 
      $this -> dst = $dir . '/' . date('YmdHis') . $this -> extension; 
     } 
     private function crop($src, $dst, $data) { 
      if (!empty($src) && !empty($dst) && !empty($data)) { 
       switch ($this -> type) { 
        case IMAGETYPE_GIF: 
         $src_img = imagecreatefromgif($src); 
         break; 
        case IMAGETYPE_JPEG: 
         $src_img = imagecreatefromjpeg($src); 
         break; 
        case IMAGETYPE_PNG: 
         $src_img = imagecreatefrompng($src); 
         break; 
       } 
       if (!$src_img) { 
        $this -> msg = "Failed to read the image file"; 
        return; 
       } 
       $dst_img = imagecreatetruecolor(220, 220); 
       $result = imagecopyresampled($dst_img, $src_img, 0, 0, $data -> x, $data -> y, 220, 220, $data -> width, $data -> height); 
       if ($result) { 
        switch ($this -> type) { 
         case IMAGETYPE_GIF: 
          $result = imagegif($dst_img, $dst); 
          break; 
         case IMAGETYPE_JPEG: 
          $result = imagejpeg($dst_img, $dst); 
          break; 
         case IMAGETYPE_PNG: 
          $result = imagepng($dst_img, $dst); 
          break; 
        } 
        if (!$result) { 
         $this -> msg = "Failed to save the cropped image file"; 
        } 
       } else { 
        $this -> msg = "Failed to crop the image file"; 
       } 
       imagedestroy($src_img); 
       imagedestroy($dst_img); 
      } 
     } 
       private function codeToMessage($code) { 
        switch ($code) { 
         case UPLOAD_ERR_INI_SIZE: 
          $message = 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; 
          break; 
         case UPLOAD_ERR_FORM_SIZE: 
          $message = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; 
          break; 
         case UPLOAD_ERR_PARTIAL: 
          $message = 'The uploaded file was only partially uploaded'; 
          break; 
         case UPLOAD_ERR_NO_FILE: 
          $message = 'No file was uploaded'; 
          break; 
         case UPLOAD_ERR_NO_TMP_DIR: 
          $message = 'Missing a temporary folder'; 
          break; 
         case UPLOAD_ERR_CANT_WRITE: 
          $message = 'Failed to write file to disk'; 
          break; 
         case UPLOAD_ERR_EXTENSION: 
          $message = 'File upload stopped by extension'; 
          break; 
         default: 
          $message = 'Unknown upload error'; 
        } 
        return $message; 
       } 

         public function getResult() { 
        return !empty($this -> data) ? $this -> dst : $this -> src; 
       } 
         public function getMsg() { 
        return $this -> msg; 
       } 
         public function getId() { 
        return $this -> id; 
       } 
         public function getTitle() { 
        return $this->title; 
       } 
         public function getAddress() { 
        return $this->address; 
       } 
         public function getLot_size() { 
        return $this->lot_size; 
       } 
         public function getZoning() { 
        return $this->zoning; 
       } 
         public function getBuild_size() { 
        return $this->build_size; 
       } 
         public function getSale_price() { 
        return $this->sale_price; 
       } 
         public function getLease_price() { 
        return $this->lease_price; 
       } 
         public function getComment() { 
        return $this->comment; 
       } 
         public function getTransaction() { 
        return $this->transaction; 
       } 
      } 
       $crop = new CropAvatar($_POST['avatar_src'], $_POST['avatar_data'], $_FILES['avatar_file'], $id, $title, $address, $lot_size, $zoning, $build_size, $sale_price, $lease_price, $comment, $transaction); 
       $response = array(
       'state' => 200, 
       'message' => $crop -> getMsg(), 
       'result' => $crop -> getResult(), 
       'id' => $crop -> getId(), 
       'title' => $crop -> getTitle(), 
       'address' => $crop -> getAddress(), 
       'lot_size' => $crop -> getLot_size(), 
       'zoning' => $crop -> getZoning(), 
       'build_size' => $crop -> getBuild_size(), 
       'sale_price' => $crop -> getSale_price(), 
       'lease_price' => $crop -> getLease_price(), 
       'comment' => $crop -> getComment(), 
       'Transaction' => $crop -> getTransaction() 
     ); 
      echo json_encode($response); 
    ?> 
+1

Постарайтесь включить в раздел кода, относящийся к вопросу. – djv

+1

Вы получаете какие-либо ошибки? – brenjt

+0

Этот класс совершенно излишне convolute –

ответ

4

Вы еще не подготовили свой запрос. Вы просто перешли от объявления вашего запроса к выполнению.

$sql="UPDATE listings SET listing_img='$listing_img' WHERE id=$this->id"; 
$q = $conn->prepare($sql); 
$q->execute($sql); 

Плюс, я заменил exec с execute, так что вам дал фатальную ошибку.


Обратитесь следующий за различий между обоих:


Сноски:

Как указано в комментарии ниже: настоятельно рекомендуется использовать заполнители для этого запроса, как и для другого.

  • Простое использование API PDO, не защищает от SQL-инъекции, поэтому вам необходимо использовать prepared statements.
+1

Есть ли причина, по которой вы не используете заполнители? –

+0

@vp_arth Разве вы не спрашиваете OP? –

+1

@vp_arth Я согласен с вашим комментарием, и я сделал редактирование на этот счет, спасибо. –

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