0

The script below processes form data. I have two sql statements, one outside the private php class CropAvatar that inserts text field data to sql, another sql statement within the CropAvatar class that inserts two file URL's to sql. I would like the second sql statement to enter the file URL's into the last row that the previous sql statement inserted into. I'm currently defining that id via

 $id = mysqli_insert_id();

However if I add 'WHERE id=$id' to the second sql statement it does not work, that statement is not seeing the value of id. I believe it could be because the first statement is outside the private class CropAvatar and the second inside the class. How to I pass $id into the private class for this to work?

    <?php
    $title = $_POST['title'];
    $address = $_POST['address'];
    $sale_price = $_POST['sale_price'];
    $lease_price = $_POST['lease_price'];
    $build_size = $_POST['build_size'];
    $lot_size = $_POST['lot_size'];
    $zoning = $_POST['zoning'];
    $comment = $_POST['comment'];
    $transaction = $_POST['transaction'];
    require('../dbcon.php');
    $sql="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())";
    mysqli_query($con,$sql);
    $id = mysqli_insert_id();
        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, $insert_id) {
        $this -> setSrc($src);
        $this -> setInsertId($insert_id);
        $this -> setData($data);
        $this -> setFile($file);
        $this -> crop($this -> src, $this -> dst, $this -> data);
    }
            private $insert_id;

            public function setInsertId($insert_id) {
                     $this->insert_id = $insert_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;
    $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"];
          require('../dbcon.php');
    $sql="UPDATE listings SET ad_link='$ad_link', listing_img='$listing_img' WHERE id=$this->insert_id";
    mysqli_query($con,$sql);
    mysqli_close($con);
    }


                            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'], $id);
        $response = array(
            'state'  => 200,
            'message' => $crop -> getMsg(),
            'result' => $crop -> getResult()
        );

        echo json_encode($response);
    ?>

2 Answers 2

1

Simply add it to the __construct method arguments:

function __construct($src, $data, $file, $insert_id) {
    $this -> setSrc($src);
    $this -> setInsertId($insert_id);
    $this -> setData($data);
    $this -> setFile($file);
    $this -> crop($this -> src, $this -> dst, $this -> data);
}

So you will need to pass it when creating the CropAvatar object:

$crop = new CropAvatar($_POST['avatar_src'], $_POST['avatar_data'], $_FILES['avatar_file'], $id);

You will also need to define the local variable and the setter inside the CropAvatar class:

private $insert_id;

public function setInsertId($insert_id) {
    $this->insert_id = $insert_id;
}

And then you can refer to it as $this->insert_id wherever you need it.

Sign up to request clarification or add additional context in comments.

6 Comments

I believe I've modified it as you suggested but am now getting null values in for the two file url's. Can you suggest a correction?
You mean in the database, after running the code, the "ad_link" and "listing_img" value is null for your files?
Correct, I've reposted the script with the changes you suggested. I'm probably making a stupid mistake. Do you see any problems with what it up there now? I'm still learning about php classes and am kind of new to this
Is your file a PDF? Because your UPDATE query is inside the PDF verification if. You could try echo'ing values inside your ifs to see what code get executed..
thank you. there are two files, and yes one of them is a pdf. the thing is, without the WHERE clause sql worked. since i added this UPDATE listings SET ad_link='$ad_link', listing_img='$listing_img' WHERE id=$this->insert_id . . . .no success though
|
1

If you want $id to be used in the class just need to add in your construct:

private $id;

function __construct($src, $data, $file, $id){
  $this->id = $id;
}

And use it like always:

$crop = new CropAvatar($_POST['avatar_src'], $_POST['avatar_data'], $_FILES['avatar_file'], $id);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.