保存数据库中文件夹中存在的图像的图像路径

时间:2016-10-26 07:04:46

标签: php

我正在通过php表格在注册用户的DB中更新名称,电子邮件。工作正常。

形式

<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 [profile.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表单将图像上传到文件夹。

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 ""; 
} 

现在图像只是保存在文件夹中,我需要的是我希望该图像路径保存在数据库中并将该图像路径分配给数据库中的上传用户。

我尝试了下面的代码,但没有工作:

class.user.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 "";
        }
    }

profile.php

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

我从最近2天开始挣扎,请帮助我。 完整代码:class.user.php:http://pastebin.com/vh8FvHP2,profile.php:http://pastebin.com/s0zJuJik,数据库连接:http://pastebin.com/rYLWBAHi

如果一旦我获得50分,我将提供50点赏金点....

1 个答案:

答案 0 :(得分:0)

  

文件内: class.user.php ;为什么不在成功移动上传文件后才将照片保存到数据库?这里的Snippet尝试从该Perspective中看到它:

<?php   

    // Verify MIME 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
        }
        // SAVE THE  PHOTO TO DATABASE
        // ONLY IF THE PHOTO HAS BE SAVED ON THE FILE-SYSTEM
        if(move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $uid . '/'. $photoname)){

            // NOTICE THERE'S NO COLONS (:) HERE - JUST KEY-VAL PAIRS       
            $updateData = array('uid' => $uid, 'pix' => "upload/" . $uid . "/" . $photoname);
            $stmt = $dbConn->conn->prepare("UPDATE tbl_users SET photo=:pix 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.";
    }