2017-07-22 17 views
0

私は自分のウェブサイトのサインアップページを作成しています。ユーザプロフィールの画像を変更する準備が整うまでのデフォルトの。私は配列とnew DirectoryIteratorを使用して画像のファイル名を取得する方法を知っていますが、問題は私もblobタイプをデータベースにアップロードしたいので、変更したいときはファイル名だけでなく変更することができます。私は PHP - ファイルディレクトリから画像を取得してSQLデータベースにアップロード

file_get_contents(); 

を使用してみましたが、それは働いていなかったと私は私がやってされたいか、私のファイルディレクトリからファイルを取得し、ファイル名を指定して、それをアップロード

Warning: file_get_contents(default-user-profilepic.png): failed to open stream: No such file or directory in C:\wamp64\www\MT\infoupdate.php on line 128 

のようなエラーが発生しましたおよびfile_tmpをデータベースに追加します。ここに私のコードは、私はそれを正しく理解していれば、あなたがイメージという名前のフォルダ内の画像のセットを持って

PHP

<?php 

session_start(); 

if($_SERVER['REQUEST_METHOD'] =="POST"){ 

    //Set variables 
    $fullname = trim($_POST['fullname']); 
    $username = trim($_POST['username']); 
    $email = trim($_POST['email']); 
    $password = trim($_POST['password']); 
    $storePassword = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10)); 
    $cpassword = trim($_POST['cpassword']); 
    $boolean = true; 

    //Check if values are empty 
    if(!empty($fullname) && !empty($fullname) && !empty($email) && !empty($password) && !empty($cpassword) && !empty($_POST['gender'])){ 

     //Check if email is valid 
     if(filter_var($email, FILTER_VALIDATE_EMAIL) == false){ 

      die ("Email is Not Valid!"); 
     } 
     //Check if passwrod is greater 6 
     if(strlen($password) < 6 && strlen($cpassword) < 6){ 

      die ("Password has to be GREATER than 6 characters!"); 

     } 

     //Check if password has atleast ONE Uppercase, One Lowercase and a number 
     if(!preg_match("(^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$)",$password)){ 

       echo 'Password needs to be at least ONE uppercase, ONE lowercase, and a number!'; 
       exit; 
      } 

     //Check if passwords match 
     if(!password_verify($cpassword, $storePassword)){ 

      die ("Passwords DO NOT Match!"); 
     } 

     try{ 

     // new php data object 
     $handler = new PDO('mysql:host=127.0.0.1;dbname=magicsever', 'root', ''); 
     //ATTR_ERRMODE set to exception 
     $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    }catch(PDOException $e){ 
     die("There was an error connecting to the database"); 

    } 

     //Check if username is in DB 
     $stmtUsername = $handler->prepare("SELECT * FROM generalusersdata WHERE username = :username LIMIT 1"); 

     $stmtUsername->execute(array(':username'=>$username)); 

     if($resultUsername = $stmtUsername->fetch()){ 

      die("Username is already in user! Please try a different one!"); 
     } 

     $userid = $resultUsername['user_id']; 
     //Check if EMAIL is in DB 
     $stmtEmail = $handler->prepare("SELECT * FROM generalusersdata WHERE email = :email LIMIT 1"); 

     $stmtEmail->execute(array(':email'=>$email)); 

     if($resultEmail = $stmtEmail->fetch()){ 

       die("Email already in use! Please try a different one!"); 
      } 

     $extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp'); 

     // init result 

     // directory to scan 
     $directory = new DirectoryIterator('images'); 

     // iterate 
     foreach ($directory as $fileinfo) { 
      // must be a file 
      if ($fileinfo->isFile()) { 
       // file extension 
       $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); 
       // check if extension match 
       if (in_array($extension, $extensions)) { 
        // add to result 
        $file_name = $fileinfo->getFilename(); 
       } 
      } 
     } 

     $isDev = 1; 
     $gender = $_POST['gender']; 
     //set up sql 
     $query = "INSERT INTO generalusersdata(fullname, username, email, password, profile_image, isDev, gender)VALUES(:fullname, :username, :email, :storePassword, :file_name, :isDev, :gender)"; 

     $stmt = $handler->prepare($query); 

     $stmt->bindParam(':fullname', $fullname, PDO::PARAM_STR); 
     $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
     $stmt->bindParam(':email', $email, PDO::PARAM_STR); 
     $stmt->bindParam(':storePassword', $storePassword, PDO::PARAM_STR); 
     $stmt->bindParam(':file_name', $file_name, PDO::PARAM_STR); 
     $stmt->bindParam(':isDev', $isDev, PDO::PARAM_STR); 
     $stmt->bindParam(':gender', $gender, PDO::PARAM_STR); 
     if(!$stmt->execute()){ 

      $_SESSION['error'] = true; 
      header("Location: errorsignup.php"); 
      exit; 

     } 

     $_SESSION['username'] = $username; 
     setcookie("username", $username, time() + 60*60*24*365); 
     header("Location: developerUpload.php"); 

    //Empty else  
    }else{ 

     echo "Missing Values!"; 
     exit; 
    } 
} 


?> 
+1

を「それは働いていなかったと私が得た_butあなたの画像フォルダがMITのフォルダ内にある場合、あなたはにあなたのディレクトリイテレータの行を変更しようとすることができますエラーの多く._ "私たちとエラーを共有することができますか? –

+0

申し訳ありませんが、なぜあなたは画像ディレクトリをループしていますか?わかりません。 $ file_nameを設定した後にブレークがないので、最後のファイルには常にエンディングします。 –

+0

そして、それをディスクに保存している間になぜそれをBLOBとして保存するのですか?私にとって奇妙な別の部分。 –

答えて

1

です。すべてのユーザーがデフォルトのプロフィール画像を受け取ります。彼らは彼らの写真を変更する場合は、そのフォルダから別のものを選択します。それが正しい場合は、blobとしてアップロードする必要はありません。あなたは、あなたのuserテーブルにあなたのビューでは、デフォルトの画像のファイル名を格納します新規ユーザーのために

  • 、すなわちファイル名だけを格納します

    1. : プロファイルの要約を、あなたは、ここであなたがそれを行うことができる方法がありますimg-tagを使用して画像ファイル をソースとして配置します。
    2. プロフィール画像を変更すると、データベースのファイル名だけが更新されます。

    おそらく、上記のプロセスがオプションです。

    ファイルのパスが正しくないので、あなたのコードは、あなたの警告

    Warning: file_get_contents(default-user-profilepic.png): failed to open stream: No such file or directory in C:\wamp64\www\MT\infoupdate.php on line 128 
    

    を生産しています。あなたは相対パスで作業しています。つまり、あなたの現在のパスはあなたのinfoupdate.phpです。 MITフォルダ内の要求されたファイルを検索しようとします。私はあなたのディレクトリ構造を知らないので、私はより良い説明を提供することはできません。

    $directory = new DirectoryIterator('/images'); 
    

    またはその代わりに、絶対パスを使用します:

    $directory = new DirectoryIterator('C:\wamp64\www\MT\images'); 
    
  • +0

    あなたが持っているファイルからすべてのユーザーが更新されますが、私はちょうどデフォルトのプロフィール画像としてアップロードする画像が必要でした。私は "絶対パス"を使用したので、助けてくれてありがとうございました:D – Jagr

    +0

    こんにちはMuratBa、私のコンピュータは私の前でシャットダウンされ、この質問の保存されていないコードはすべて削除されました。しかし、私が失ったのは、 "directoryIterator"の部分だけでしたが、問題は、 "$ディレクトリ"から "longblob"としてデータベースにファイルまたはイメージを送信する方法を覚えていないことです。手伝ってくれますか? – Jagr

    関連する問題