在DB列中保存图像网址路径 [英] Save image url path in DB columns

查看:162
本文介绍了在DB列中保存图像网址路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在更新注册用户的DB中的姓名,电子邮件,通过PHP表单。它的工作很好。

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 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>

将相关代码保存在db b

<?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);

?>

之后,现在我使用下面的代码通过相同的php表单将图像上传到文件夹。 / p>

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列:userName,userEmail,tax,photo

db columns : userName, userEmail, tax , photo

在google的帮助下我做了所有上面的,我是新的php,所以请衷心帮助我。

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

推荐答案

添加新函数保存文件并使用全局php var $ _ FILES

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

1
将新列添加到您的DB以存储文件路径,我们将其命名为 photo

2
为您的用户类添加新功能:

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
主文件应如下所示: / 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);

?>

希望这有助于

这篇关于在DB列中保存图像网址路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆