Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在DB列中保存图像url路径_Php_Database_Image_Imageurl - Fatal编程技术网

Php 在DB列中保存图像url路径

Php 在DB列中保存图像url路径,php,database,image,imageurl,Php,Database,Image,Imageurl,我正在通过php表单更新注册用户的姓名、数据库中的电子邮件。工作正常 class.usr.php public function update($uname,$email, $tax) { try { $stmt = $this->conn->prepare('UPDATE tbl_users SET userName = ?, userEmail = ? , tax = ? WHERE userID = ? '); $stmt->execut

我正在通过php表单更新注册用户的姓名、数据库中的电子邮件。工作正常

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>';
    }
公共功能更新($uname、$email、$tax)
{
试一试{
$stmt=$this->conn->prepare('UPDATE tbl_users SET userName=?,userEmail=?,tax=?WHERE userID=?');
$stmt->execute(数组($uname、$email、$tax、$\会话['userSession']);
返回$stmt->fetch();
}捕获(PDO$e){
echo'

。$e->getMessage()。

; }
表格

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

姓名:

添加用于保存文件的新函数并使用全局php var
$\u文件

1 将新列添加到数据库以存储文件路径,我们将其命名为
photo

2 为用户类添加新函数:

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

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

?>


希望这有帮助这里有另一个解决方案:

首先,手动执行此查询以添加新列:

ALTER TABLE `tbl_users` ADD `photo` VARCHAR(255) NOT NULL ;
这是php代码:

<?php
$dbConn = new Database();
$dbConn->dbConnection();

$user_home = new USER();

function uploadUserPhoto($uid) {
    global $dbConn;
    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"];

            $userDir = $uid;

            // 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)) {
                if(!is_dir('upload/'.$uid)) {
                    mkdir('upload/'.$uid);
                }

                $photoname = time().$uid.'_photo'.'.'.$ext;

                // delete all the files in this directory
                $files = glob('upload/'.$uid.'/*'); // get all file names
                foreach($files as $file){ // iterate files
                    if(is_file($file))
                        unlink($file); // delete file
                }

                // Upload the photo
                move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $uid . '/'. $photoname);

                $updateData = array(':userID' => $uid, ':photo' => $photoname);
                $stmt = $dbConn->conn->prepare("UPDATE tbl_users SET photo=:photo WHERE userID=:uid");
                $stmt->execute($updateData);

                echo "Your file was uploaded successfully.";
            } else {
                echo "Error: There was a problem uploading your file - please try again.";
            }
        }
    } else {
        echo "";
    }
}

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))
    {
        uploadUserPhoto($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);
?>

有一个
$dbConnection
变量,它是到DB的连接,但是因为我不知道代码的其余部分,所以应该用合适的DB连接变量替换它

用户的照片保存在
tbl_users
中的
photo
列中,对于每个用户,都在
uploads
dir中创建sub dir。subdir是userID。例如,对于
userID=1
的用户,其上载路径将是
uploads/1//code>

文件名是动态生成的——例如,这避免了缓存同名上传的照片……这是一种更好的方法


您必须更改显示照片的代码,因为现在照片的文件名在DB中,并且上传时有subdir(用户的用户ID)

图像和数据库代码都相同。更新needed@Thamilan更新了代码,谢谢通知……您要求我们为您编写代码!我们修复了您的编码尝试,我们不会为您编写全新的代码。@RiggsFolly谢谢您的评论,我尝试了一些有问题的代码,但对我无效……是的,但我没有看到任何尝试更新用户照片信息对不起,它对我不起作用,我给出的路径仍然不起作用,看起来我在什么地方丢失了,你能检查一下这些代码吗:class.user.php:,主文件:我已经检查了你给我的文件。恒定路径图片-不是URL,应该是服务器上的通行证。你能给我更新的c吗我不确定这些文件在您的服务器上的位置,但肯定应该有一个目录来存储这些文件(权限应该包括对图像的读/写,但出于安全原因没有执行)。在服务器上设置目录时,请确保apache可以访问该目录(对于linux系统,打开终端并键入
su-www-s/sh/bin
转到您创建的文件夹并尝试获取任何文件)。在将您服务器上的路径更改为绝对路径后,您能告诉我显示照片需要更改哪些代码吗?
在此处添加显示图像的代码我需要将图像路径保存在db列中,这对我也不起作用,您能在此处加入吗:db file:,我正确地按照您的答案,但仍然是在我失踪之前?我更新了我的答案
<?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);

?>
ALTER TABLE `tbl_users` ADD `photo` VARCHAR(255) NOT NULL ;
<?php
$dbConn = new Database();
$dbConn->dbConnection();

$user_home = new USER();

function uploadUserPhoto($uid) {
    global $dbConn;
    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"];

            $userDir = $uid;

            // 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)) {
                if(!is_dir('upload/'.$uid)) {
                    mkdir('upload/'.$uid);
                }

                $photoname = time().$uid.'_photo'.'.'.$ext;

                // delete all the files in this directory
                $files = glob('upload/'.$uid.'/*'); // get all file names
                foreach($files as $file){ // iterate files
                    if(is_file($file))
                        unlink($file); // delete file
                }

                // Upload the photo
                move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $uid . '/'. $photoname);

                $updateData = array(':userID' => $uid, ':photo' => $photoname);
                $stmt = $dbConn->conn->prepare("UPDATE tbl_users SET photo=:photo WHERE userID=:uid");
                $stmt->execute($updateData);

                echo "Your file was uploaded successfully.";
            } else {
                echo "Error: There was a problem uploading your file - please try again.";
            }
        }
    } else {
        echo "";
    }
}

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))
    {
        uploadUserPhoto($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);
?>