2014-11-05 92 views
0

在這個腳本中有兩個SQL語句,第一個處理所有TXT領域和PDO得到一個行ID:SQL語句不接受變量定義

$last_id = $conn->lastInsertId(): 

第二個SQL語句是一個私有的類內,應該將兩個文件的URL插入同一行(如第一條語句所做的那樣)。

第一個sql語句執行正常。 第二個不是,我認爲這是因爲它不理解$ last_id是什麼。

任何建議,以獲得第二個PDO的工作?

<?php 
require('../dbcon2.php'); 
//Connection 1 
try { 
     $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, date_added) VALUES (:title, :address, :lot_size, :zoning, :build_size, :sale_price, :lease_price, :comment, :transaction, now())"); 
      $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->execute(); 
     $last_id = $conn->lastInsertId(); 
} 
catch(PDOException $e) 
{ 
echo $sql . "<br>" . $e->getMessage(); 
} 
$conn = null; 
//Create class 
    class CropAvatar { 
     private $src; 
     private $data; 
     private $file; 
     private $dst; 
     private $type; 
     private $extension; 
     private $srcDir = '../0images/listimg/orig'; 
     private $dstDir = '../0images/listimg/mod'; 
     private $msg; 

function __construct($src, $data, $file, $last_id) { 
    $this -> setSrc($src); 
    $this -> setId($last_id); 
    $this -> setData($data); 
    $this -> setFile($file); 
    $this -> crop($this -> src, $this -> dst, $this -> data); 
} 
     private $last_id; 
     public function setId($last_id) { 
       $this->id = $last_id; 
} 
     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); 
         $listing_img="http://www." . $Website . ".com/0images/listimg/mod/" . $currdate . $extension; 
    //Process file upload 
         $allowedExtsf = array("pdf"); 
         $tempf = explode(".", $_FILES["flyer"]["name"]); 
         $extensionf = end($tempf); 
         if (($_FILES["flyer"]["type"] == "application/pdf") 
         && ($_FILES["flyer"]["type"] <2000000000) 
         && in_array($extensionf, $allowedExtsf)) 
         { 
          $flyername=$_FILES["flyer"]["name"]; 
          if ($_FILES["flyer"]["error"] > 0) 
          { 
          echo "Return Code: " . $_FILES["flyer"]["error"] . "<br>"; 
          } 
           else 
           { 
            if (file_exists("../flyers/" . $_FILES["flyer"]["name"])) 
            { 
            echo $_FILES["flyer"]["name"] . " already exists. "; 
            } 
             else 
             { 
             move_uploaded_file($_FILES["flyer"]["tmp_name"],"../flyers/" . $_FILES["flyer"]["name"]); 
             } 
           } 
         $ad_link="http://www." . $Website . ".com/flyers/" . $_FILES["flyer"]["name"]; 
     //Connection 2 
     try { 
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql="UPDATE listings SET ad_link='$ad_link', listing_img='$listing_img' WHERE id=$last_id"; 
      $conn->exec($sql); 
      } 
     catch(PDOException $e) 
      { 
      echo $sql . "<br>" . $e->getMessage(); 
      } 
     $conn = null; 
      } 
     //Error handling 
         if ($result) { 
          $this -> src = $src; 
          $this -> type = $type; 
          $this -> extension = $extension; 
          $this -> setDst(); 
         } else { 
          $this -> msg = 'Failed to save file'; 
         } 
        } else { 
         $this -> msg = 'Please upload image with the following types: 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; 
     } 
    } 
$crop = new CropAvatar($_POST['avatar_src'], $_POST['avatar_data'], $_FILES['avatar_file'], $last_id); 
    $response = array(
     'state' => 200, 
     'message' => $crop -> getMsg(), 
     'result' => $crop -> getResult() 
    ); 
    echo json_encode($response); 
?> 
+0

你永遠不應該直接從'$ _POST'去數組綁定到綁定參數。即使你使用PDO。 – 2014-11-05 22:58:05

+1

你的意思是這個$ stmt-> bindParam(':title',$ _POST ['title']); ? – rhill45 2014-11-05 22:59:40

+0

是的,關於你的問題,儘管在你的update語句中你使用了'$ last_id'而不是'$ this-> id' - >改變這個'UPDATE listing SET ad_link ='$ ad_link',listing_img ='$ listing_img'WHERE id = $ last_id'到'UPDATE列表SET ad_link ='$ ad_link',listing_img ='$ listing_img'WHERE id = $ this-> id' – 2014-11-05 23:06:02

回答

1
在你的更新語句

您使用$last_id而不是$this->id

改變這一點:

UPDATE listings SET ad_link='$ad_link', listing_img='$listing_img' WHERE id=$last_id 

到:

UPDATE listings SET ad_link='$ad_link', listing_img='$listing_img' WHERE id=$this->id