Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Common causes of server-side issues when using safari and IE

The php script below processes form data, text fields, two file uploads. The script has two sql statements, in firefox 33.1, this script works entirely. Script is not working in safari for windows 5.1.7 or IE 11. Specifically, it is the second sql statement that is not running in either Saf or IE

$sql="UPDATE listings SET listing_img='$listing_img' WHERE id=$this->id"'

This statement pulls $this->id from outside of the class, so wondering if that could be the problem?

Safari 5.1.7 gives back true for case UPLOAD_ERR_NO_FILE: (line207), however it's not true, the file did upload.

Is this possible? Why would a browser have any bearing on something server-side anyways?

Should I be looking in the js file for problems here or could the bug be here in the php file just as well

Are there any common causes of safari and IE compatibility for PHP right now?

I know lots of questions, ridiculously long script, not the best of questions but I'm lost here. what's the next logical step for trouble shooting this?

        <?php
    //process pdf 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)) 
              {
                 if ($_FILES["flyer"]["error"] > 0) 
                 {
                     echo "Return Code: " . $_FILES["flyer"]["error"] . "<br>";
                 }   
                     else 
                         {
                        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
            }
        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, 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();
          $last_id = $conn->lastInsertId();

    //Create class
        class CropAvatar {
            private $src;
            private $id;
            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;
    //construct
        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, $this -> lastid);
        }
                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);
    //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[ 'last_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;
                }
            }
        $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);
                }
        catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }
         $conn = null;
    ?>
like image 354
rhill45 Avatar asked Nov 20 '14 23:11

rhill45


1 Answers

Answering your questions:

Is this possible? Why would a browser have any bearing on something server-side anyways?

No, for standard php at least it wouldn't be the case.

what's the next logical step for trouble shooting this?

You would debug the server side script, what can be achieved with NetBeans for instance, and see what is been received by the server for this variables.

like image 90
Flávio Filho Avatar answered Oct 23 '22 21:10

Flávio Filho