2017-02-18 28 views
0

こんにちは私は自分のサイトのフォルダにファイルをアップロードすることができますが、私のファイルから自分のデータベースへのパスを取得する方法を理解できていません... enter image description heremysqlへの画像アップロード

<?php 
if(isset($_FILES['file'])) 
{ 

move_uploaded_file($_FILES['file']['tmp_name'],'files/'.$_FILES['file']['name']); 

session_start(); 
$username = $_SESSION['user']; 
$userpic = ???? <-- what am i supposed to call here to put the path to my image file 

include ("connect.php"); 
$sql = $con->prepare('INSERT INTO users (username,userpic) VALUES (?,?)'); 
$sql->bind_param("ss",$username,$userpic); 
$sql->execute(); 
$sql->close(); 
$con->close(); 
} 
else{ 
echo "no files"; 
} 
?> 

だから、どのように私はず...誰かが画像を直接「userpic」テーブルに挿入されますべき画像をアップロードする際の事の事は動作するはずの方法は、IVEはこのような他の記事を読んでいるが、彼らは非常に同じことをaintのこれを達成する?助けてくれてありがとう! (PHP上で最も明るいのではありませんが、私は試しています)

答えて

1

ファイルがアップロードされたときに、クライアントが提供する名前を使用してファイルを保存する場合は、潜在的に画像を上書きします(例:2人のユーザーがme.pngをアップロードする場合) - へのユーザー名を使用するより良いだろう画像を保存して、あなたも私たちがセッションからユーザー名を使用し、その空白でないを確認し、このコードでは

<?php 
session_start(); 
$username = $_SESSION['user']; 
if(empty($username)){ 
    echo "Error: no username found"; 
} 
else if(isset($_FILES['file'])){ 
    //create a path to move file to 
    $newpath = 'files/'.$username; 

    if (move_uploaded_file($_FILES['file']['tmp_name'], $newpath)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
    } else { 
    echo "Error: Possible file upload attack!\n"; 
    } 
} 
else{ 
    echo "No Files to save"; 
} 

...自分の写真にユーザーを接続するためにMySQLのテーブルを必要としません。 これを使って画像をファイルフォルダに保存します。

ファイルは、ファイル・ディレクトリの外に保存される原因となるユーザー名で../含める:

注これは、セキュリティ上の問題の数を無視します。 ユーザー名を既に検証している場合は問題ありません。もう1つの解決策は、ユーザー名のハッシュを作成し、代わりにこの方法を使用することです。$newpath = 'files/'.md5($username);

エラーを確認しないか、

http://php.net/manual/en/features.file-upload.errors.php

PHP image upload security check list

どのようにこれらの画像は、この後に使用するつもりですか? filesディレクトリがhtdocs内にある場合、内容はすべて利用可能になります。htdocsの外に格納するほうが良いでしょう。例えば、 。 $newpath = '/var/myappdata/userimages/'.md5($username);

あなたは、ファイルを読み込んで、別のファイルuserimage.php作成することができます。これは、あなたが、例えば、追加のチェックを行うことができます

<?php 
session_start(); 
$username = $_SESSION['user']; 
$path = '/var/myappdata/userimages/'.md5($username); 
readfile($path); 

をユーザが画像を見ることを許可されていること。

ここではまだ説明できないほどの膨大な量がありますが、これは十分に前進してくれるはずですが、これを実動に移す前にファイルアップロードのセキュリティについて詳しくお読みください。

あなたの元の質問

あなたは、データベース内の画像に関する情報を保存したいなかった場合は、このような何か行うことができます:私は言ったように

<?php 
session_start(); 
include ("connect.php"); 

$username = $_SESSION['user']; 
if(empty($username)){ 
    echo "Error: no username found"; 
} 
else if(isset($_FILES['file'])){ 
    //create a path to move file to 
    $filename = basename($_FILES['file']['name']); 

    $newpath = 'files/'.$filename; 
    if (move_uploaded_file($_FILES['file']['tmp_name'], $newpath)) { 
     echo "File is valid, and was successfully uploaded.\n"; 
     $sql = $con->prepare('INSERT INTO users (username,userpic) VALUES (?,?)'); 
     $sql->bind_param("ss",$username,$filename); 
     $sql->execute(); 
     $sql->close(); 
     $con->close();   
    } else { 
     echo "Error: Possible file upload attack!\n"; 
    } 
} 
else{ 
    echo "No Files to save"; 
} 

を - 2場合は、競合に実行されますユーザーは同じファイルをアップロードします。

+0

私は私の全体のSQLの質問を削除し、そのコードを書く必要がありますか?それは私のために動作しませんでしたtho –

+0

私は私の答えを更新しました – Theo

+0

説明のためのThnaksたくさん私は画像をアップロードするときに自分自身を守る方法をもっと見ていきます.. –

0

あなたはデータベースにURL全体を保存するつもりはありません。サーバー上にある場所へのパスが必要です。これは、tmpファイルを新しい場所に移動する部分です。あなたの場合、それは次のようになります。

$userpic = 'files/'.$_FILES['file']['name']; 
関連する問題