Search code examples
phpdatabaseimageimageurl

Save image url path in DB columns


i am updating name , email in DB of registered user through php form. its working fine.

class.usr.php

public function update($uname,$email, $tax)
    {
    try {
    $stmt = $this->conn->prepare('UPDATE tbl_users SET userName = ?, userEmail = ? , tax = ?  WHERE userID = ? ');
    $stmt->execute(array($uname,$email, $tax , $_SESSION['userSession']));
    return $stmt->fetch();
    } catch(PDOException $e) {
        echo '<p class="bg-danger">'.$e->getMessage().'</p>';
    }

form

<form action="profile.php" method="POST" enctype="multipart/form-data">

Name : 
<input type="text" name="txtuname" value="<?php echo $row['userName'] ?>" /><br/>
Email :
<input type="text" name="txtemail" value="<?php echo $row['userEmail'] ?>" /><br>
Image
<input type="file" name="photo" id="fileSelect"><br> 

<input type="submit" name="submit" value="Save" />

</form>

form related code to save in db

<?php

$user_home = new USER();

if(!$user_home->is_logged_in())
{
    header("Location: index.php");
die();
}

if (isset($_POST['submit'])) {
// new data
$uname = $_POST['txtuname'];
$email = $_POST['txtemail'];
$tax = trim($_POST['tax']); // image url path

$uid = (isset($_SESSION['userSession']) ? intval($_SESSION['userSession']) : 0);

if ($uid > 0 && $user_home->update($uname,$email, $tax, $uid))
{
    header("Location: profile1.php");
   die(); 
}
}

$stmt = $user_home->runQuery("SELECT * FROM tbl_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

?>

after this, now i am uploading an image to folder through same php form successfully with below code.

    <?php 
if(isset($_FILES["photo"]["error"])){ 
if($_FILES["photo"]["error"] > 0){ 
echo "Error: " . $_FILES["photo"]["error"] . "<br>"; 

} else{ 
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png"); 
$filename = $_FILES["photo"]["name"]; 
$filetype = $_FILES["photo"]["type"]; 
$filesize = $_FILES["photo"]["size"]; 

// Verify file extension 
$ext = pathinfo($filename, PATHINFO_EXTENSION); 
if(!array_key_exists($ext, $allowed)) die("Error: Please select a valid file format."); 

// Verify file size - 5MB maximum 
$maxsize = 5 * 1024 * 1024; 
if($filesize > $maxsize) die("Error: File size is larger than the allowed limit."); 

// Verify MYME type of the file 
if(in_array($filetype, $allowed)){ 
// Check whether file exists before uploading it 
if(file_exists("upload/" . $_FILES["photo"]["name"])){ 
echo $_FILES["photo"]["name"] . " is already exists."; 

} else{ 
move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]); 

echo "Your file was uploaded successfully."; 
} 
} else{ 

echo "Error: There was a problem uploading your file - please try again."; 
} 

} 

} else{ 
echo ""; 
} 

?>

now images are just saving in folders, what i need is i want that image path to save in database and assign that image path to uploaded user in database. so that one registered user can update the existing image, but not upload one more image.

i tried below code , but not working:

<?php
$folder = "upload/"; 
    $file = basename( $_FILES['image']['name']); 
    $full_path = $folder.$file; 
    $tax= $full_path;

    if(in_array($filetype, $allowed)){ 
// Check whether file exists before uploading it 
if(file_exists("upload/" . $_FILES["photo"]["name"])){ 
echo $_FILES["photo"]["name"] . " is already exists."; 

} else{ 
move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]); 

echo "Your file was uploaded successfully."; 
} 
} else{ 

echo "Error: There was a problem uploading your file - please try again."; 
} 

} 

} else{ 
echo ""; 
} 
?>

db columns : userName, userEmail, tax , photo

with help of google i done all above, i am new to php, so please kindly help me.


Solution

  • Add new function for saving files and use global php var $_FILES

    1 Add new column to your DB to store file path, let's name it photo

    2 Add new functions for your user class:

    <?php
    class User {
    ...
      const PATH_PHOTOS = '/path/to/photo/folder/';
      const BASE_URL = 'http://YOUR_DOMAIN_NAME:YOUR_PORT/YOUR_PATH/';
    
      public function add_photo($file)
      {
        $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
        $file['new_name'] = uniqid(rand(), true) . ".$ext";
        if (!$this->_upload_file($file))
          return false;
        return $this->_remove_previous_photo()->_add_file_to_db(self::PATH_PHOTOS .     basename($file['new_name']));
      }
    
      protected function _remove_previous_photo()
      {
        $photo = $this->get_photo();
        if ($photo)
          unlink($photo);
        return $this;
      }
    
      public function get_photo()
      {
        global $_SESSION;
        $stmt = $this->conn->prepare('SELECT photo FROM tbl_users WHERE userID = ?     ');
        $stmt->execute(array($_SESSION['userSession']));
        $result = $stmt->fetch();
        return reset($result);
      }
    
      public function get_photo_url()
      {
        $pathInfo = pathinfo($this->get_photo());
        $last_dir = end(explode(DIRECTORY_SEPARATOR, $pathInfo['dirname']));
        return self::BASE_URL . "$last_dir/" . basename($this->get_photo());
      }
    
      protected function _upload_file($file)
      {
        $uploadfile = self::PATH_PHOTOS . $file['new_name'];
        return move_uploaded_file($file['tmp_name'], $uploadfile);
      }
    
      protected function _add_file_to_db($file_path)
      {
        try {
          $stmt = $this->conn->prepare('UPDATE tbl_users SET photo = ? WHERE userID = ? ');
          return $stmt->execute(array($file_path, $_SESSION['userSession']));
        } catch (PDOException $e) {
          echo '<p class="bg-danger">' . $e->getMessage() . '</p>';
        }
      }
    ...
    }
    ?>
    

    3 The main file should look like this:

    <?php
    
    $user_home = new USER();
    
    if(!$user_home->is_logged_in())
    {
        header("Location: index.php");
    die();
    }
    
    if (isset($_POST['submit'])) {
    // new data
    $uname = $_POST['txtuname'];
    $email = $_POST['txtemail'];
    $tax = trim($_POST['tax']); // image url path
    
    $uid = (isset($_SESSION['userSession']) ? intval($_SESSION['userSession']) : 0);
    
    if ($uid > 0 && $user_home->update($uname,$email, $tax, $uid) && $user_home->add_photo($_FILES['photo']))
    {
        header("Location: profile1.php");
       die(); 
    }
    }
    
    $stmt = $user_home->runQuery("SELECT * FROM tbl_users WHERE userID=:uid");
    $stmt->execute(array(":uid"=>$_SESSION['userSession']));
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
    ?>
    

    Hope this helps