-1

So, my image doesn't want to insert. I have no clue why, I'm trying to combine it with other inserts and this is why it doesn't want to work. I have the exact same code, but seperately working fine. No clue why it doesn't find the name of it. Any idea's?

Here's the error:

Notice: Undefined index: name in /Applications/MAMP/htdocs/MAJOREIND/dao/UsersDAO.php on line 39 Notice: Undefined index: extension in /Applications/MAMP/htdocs/MAJOREIND/dao/UsersDAO.php on line 40 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null' in /Applications/MAMP/htdocs/MAJOREIND/dao/UsersDAO.php:41 Stack trace: #0 /Applications/MAMP/htdocs/MAJOREIND/dao/UsersDAO.php(41): PDOStatement->execute() #1 /Applications/MAMP/htdocs/MAJOREIND/controller/UsersController.php(78): UsersDAO->insert(Array) #2 [internal function]: UsersController->boeken() #3 /Applications/MAMP/htdocs/MAJOREIND/controller/Controller.php(9): call_user_func(Array) #4 /Applications/MAMP/htdocs/MAJOREIND/index.php(65): Controller->filter() #5 {main} thrown in /Applications/MAMP/htdocs/MAJOREIND/dao/UsersDAO.php on line 41

Here's the class code:

public function boeken() {
    $errors = array();

    if(empty($_SESSION['user'])){
        if(!empty($_POST)) {

    if(!empty($_FILES['image'])){   
        if(!empty($_FILES['image']['error'])){
            $errors['image']='Something went wrong';
        }

        if(empty($errors['image'])){
            $size = getimagesize($_FILES['image']['tmp_name']);
            if(empty($size)){
                $errors['image'] = 'Uploaded image is not an image';
            }
        }

        if(empty($errors['image'])){
            if($size[1] != $size[0]){
                $errors['image'] = 'Image must be a square';
            }
        }

        if(empty($errors['image'])){
            $sourceFile = $_FILES['image']['tmp_name'];
            $destFile = WWW_ROOT . 'uploads' . DS . $_FILES['image']['name'];

            $lastDotPos = strrpos($_FILES['image']['name'], '.');
            $name = "lol";
            $name = substr(($_FILES['image']['name']), 0, $lastDotPos);
            $extension = substr($_FILES['image']['name'], $lastDotPos + 1);

            move_uploaded_file($sourceFile, $destFile);
            $image = new Eventviva\ImageResize($destFile);
            $image->resizeToHeight(100);
            $image->save(WWW_ROOT . 'uploads' . DS . $name . '_th.' . $extension);

            move_uploaded_file($sourceFile, $destFile);
            $image = new Eventviva\ImageResize($destFile);
            $image->resizeToHeight(400);
            $image->save(WWW_ROOT . 'uploads' . DS . $name . '.' . $extension);

             if(empty($_FILES['image']['name'])){
                $errors['name'] = 'Kies een profielfoto';
             }

            if(empty($errors)) {
                //$hasher = new \Phpass\Hash;
                $passwordHash = $this->hasher->hashPassword($_POST['password']);

                $user = array(
                        "naam"=>$_POST["naam"],
                        "email"=>$_POST["email"],
                        "password"=>$passwordHash
                    );

                $insertedUser = $this->userDAO->insert($user);

                $userBooking = array(
                        "email"=>$_POST['email'],
                        "tours"=>$_POST["tours"],
                        "amount"=>$_POST["amount"],
                        "message"=>$_POST["message"],
                        'name'=>$name,
                        'extension' => $extension
                    );


                $insertedBooking = $this->userDAO->insertBooking($userBooking);

                if(!empty($insertedUser)) {
                    $_SESSION['info'] = 'Registration successful';
                    $this->redirect('index.php');
                } else {
                    $_SESSION['error'] = 'Registration failed';
                }
            } else {
                $_SESSION['error'] = 'Please complete the form';
            }

                    //$data = array('profilepic' => $profilepic);
                    //$inserted = $this->userDAO->insert($data);
                    //if(!empty($inserted)){
                        // $_SESSION['info'] = 'The image was inserted';
                        // $this->redirect('index.php?page=add');
                    //}
                }
            }


            if(empty($_POST['naam'])) {
                $errors['naam'] = 'Vul een naam in';
            }

            if(empty($_POST['email'])) {
                $errors['email'] = 'Vul een email in';
            } else {
                //check unique email
                $existing = $this->userDAO->selectByEmail($_POST['email']);
                if(!empty($existing)) {
                    $errors['email'] = 'Email bestaat reeds';
                }
            }

            if(empty($_POST['password'])) {
                $errors['password'] = 'Vul een paswoord in';
            }

            if($_POST['confirm_password'] != $_POST['password']) {
                $errors['confirm_password'] = 'Ongelijke paswoorden';
            }

            if(empty($_POST['tours'])) {
                $errors['tours'] = 'Kies een tour in';
            }

            if(empty($_POST['amount'])) {
                $errors['amount'] = 'Kies aantal personen in';
            }
        }
    }else{

        if(!empty($_POST)) {

            if(empty($_POST['tours'])) {
                $errors['tours'] = 'Kies een rondleiding';
            }

            if(empty($_POST['amount'])) {
                $errors['amount'] = 'Kies het aantal personen';
            }

            if(empty($errors)) {

                $user = array(
                        "user_id"=>$_SESSION['user']['id'],
                        "email"=>$_SESSION['user']['email'],
                        "tours"=>$_POST["tours"],
                        "amount"=>$_POST["amount"],
                        "message"=>$_POST["message"],
                    );

                $insertedBooking = $this->userDAO->insertBooking($user);
                if(empty($insertedBooking)) {
                    $_SESSION['info'] = 'Booking successful';
                    $this->redirect('index.php');
                } else {
                    $_SESSION['error'] = 'Booking failed';
                }
            } else {
                $_SESSION['error'] = 'Please complete the form';
            }
        }

    }

    $this->set('errors', $errors);
}

This is my html code for it:

                <label for="addimg">
                    <img src="images/photo.png"/>
                </label>
                <input type="file" name="image" id="addimg" class="form-control" value="<?php if(!empty($_POST['image'])) echo $_POST['image'];?>" />
            <span class="error-message"<?php if(empty($errors['image'])) echo 'style="display: none;"';?>><?php
            if(empty($errors['image'])) echo 'Please select an image';
            else echo $errors['image'];
            ?></span>

And this is the query function:

public function insert($data) {
    $errors = $this->getValidationErrors($data);
    if(empty($errors)) {
        $sql = "INSERT INTO `users` (`naam`, `email`, `password`, `name`, `extension`) VALUES (:naam, :email, :password, :name, :extension)";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindValue(':naam', $data['naam']);
        $stmt->bindValue(':email', $data['email']);
        $stmt->bindValue(':password', $data['password']);
        $stmt->bindValue(':name', $data['name']);
        $stmt->bindValue(':extension', $data['extension']);
        if($stmt->execute()) {
            $insertedId = $this->pdo->lastInsertId();
            return $this->selectById($insertedId);
        }
    }
    return false;
}
dertkw
  • 7,798
  • 5
  • 37
  • 45
Kenji Bailly
  • 107
  • 9

1 Answers1

1
      $user = array(
                    "naam"=>$_POST["naam"],
                    "email"=>$_POST["email"],
                    "password"=>$passwordHash
                );

            $insertedUser = $this->userDAO->insert($user);

3 fields in the above function

public function insert($data) {
$errors = $this->getValidationErrors($data);
if(empty($errors)) {
    $sql = "INSERT INTO `users` (`naam`, `email`, `password`, `name`, `extension`) VALUES (:naam, :email, :password, :name, :extension)";
    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(':naam', $data['naam']);
    $stmt->bindValue(':email', $data['email']);
    $stmt->bindValue(':password', $data['password']);
    $stmt->bindValue(':name', $data['name']);
    $stmt->bindValue(':extension', $data['extension']);
    if($stmt->execute()) {
        $insertedId = $this->pdo->lastInsertId();
        return $this->selectById($insertedId);
    }
}
return false;

}

5 fields in the function to insert, you are missing two fields. what are name and extension, the extension looks like part of the bookinginsert function, name is also.

as is your insert function should look like this:

public function insert($data) {
$errors = $this->getValidationErrors($data);
if(empty($errors)) {
    $sql = "INSERT INTO `users` (`naam`, `email`, `password`) 
    VALUES (:naam, :email, :password, :name, :extension)";
    $stmt = $this->pdo->prepare($sql);
    $stmt->bindValue(':naam', $data['naam']);
    $stmt->bindValue(':email', $data['email']);
    $stmt->bindValue(':password', $data['password']);
    if($stmt->execute()) {
        $insertedId = $this->pdo->lastInsertId();
        return $this->selectById($insertedId);
    }
}
return false;
}
Giacomo1968
  • 25,759
  • 11
  • 71
  • 103
David
  • 5,897
  • 3
  • 24
  • 43
  • OMFG I'm such an idiot. I made the wrong array: $user = array( "naam"=>$_POST["naam"], "email"=>$_POST["email"], "password"=>$passwordHash, 'name'=>$name, 'extension' => $extension ); Oh lol... – Kenji Bailly Jun 15 '14 at 00:02
  • no probs we all do it:) does that solve the issue? – David Jun 15 '14 at 00:28