2016-10-25 8 views
4

Я обновляю имя, адрес электронной почты в БД зарегистрированного пользователя через форму php. его рабочий штраф.Сохранить путь URL-адреса изображения в столбцах базы данных

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> 

формы код, связанный сохранить в БД

после этого, теперь я загружаю изображение в папку с помощью одной и той же формы php с помощью кода ниже.

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

?> 

Теперь изображения просто сохранение в папках, то, что мне нужно, это я хочу, чтобы путь изображения для сохранения в базе данных и назначить этот путь изображений для закачанного пользователя в базе данных., чтобы один зарегистрированный пользователь мог обновить существующее изображение, но не загружать еще одно изображение.

я попытался ниже код, но не работает:

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

дБ колонки: Превед, USEREMAIL, налог, фото

с помощью Google я сделал все выше, я новичок в PHP , поэтому, пожалуйста, любезно помогите мне.

+0

как изображения и DB коды одинаковы. * Необходимое обновление * – Thamilan

+0

@Thamilan обновил код, Спасибо за сообщение ..... –

+0

Вы просите нас написать код для вас! Мы фиксируем ваши попытки кодирования, мы не пишем для вас совершенно новый код. – RiggsFolly

ответ

0

Добавить новую функцию для сохранения файлов и использовать глобальный PHP Var $_FILES

Добавить новый столбец в БД для хранения пути к файлу, давайте назовем его photo

Добавить новые функции для вашего пользователя:

<?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>'; 
    } 
    } 
... 
} 
?> 

Основной файл должен выглядеть следующим образом:

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

?> 

Надеется, что это помогает

+0

извините, его не работает для меня, я дал путь как [ссылка] (http://sbdev2.kidsdial.com:81/ php/site3/upload /) –

+0

все еще не работает, похоже, я где-то пропал без вести, можете ли вы проверить эти коды: class.user.php: http://pastebin.com/Zkue3Tyn, main file: http: // pasteed .co/2e0a4c65 –

+0

Я проверил файл, который вы мне дали. Константа PATH_PHOTOS - это не URL должно быть пропуском на сервере – PassTeT

1

Вот еще одно решение:

Прежде всего выполнить этот запрос вручную, чтобы добавить новый столбец:

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.

Фотография пользователя сохраняется в колонке photo в tbl_users и для каждого пользователя создается вспомогательный каталог в uploads реж. Поддиректором является идентификатор пользователя. Например, для пользователя с userID = 1 его путь загрузки будет uploads/1/<filename>.

Имя файла генерируется динамически - это позволяет избежать кэширования загруженной фотографии с тем же именем, например ... и это лучший подход.

Вы должны внести изменения в код для отображения фото, потому что теперь его имя файла в БД и есть подкаталог в загрузки (который является идентификатором пользователя пользователя)

+0

можете ли вы сказать мне, какой код мне нужно изменить для 'отображения photo' –

+0

Добавьте свой код для отображения изображения здесь – krasipenkov

+0

мне нужно, чтобы сохранить путь изображения в столбце дб, тот тоже не работает для меня, может вам присоединяйтесь сюда: http://chat.stackoverflow.com/rooms/126594/discussion-between-abcd-and-krasipenkov –