2017-08-26 19 views
-1

私はちょっとしたプロジェクトのために簡単な画像をアップロードするウェブサイトを用意しています。データベース内のファイルパスの列を除いて、すべてうまく動作します。

何らかの理由で、私はそれに言いたい変数を含むことがあります。

$user = $_SESSION['user']; 

//file properties 
$fileName = $_FILES["uploadedImage"]["name"]; 
$fileType = $_FILES["uploadedImage"]["type"]; 
$fileSize = $_FILES["uploadedImage"]["size"]; 
$fileTempName = $_FILES["uploadedImage"]["tmp_name"]; 
$error = $_FILES["uploadedImage"]["error"]; 
$random = substr(md5(microtime()),rand(0,26),16); //create random characters to avoid name duplication. 
$path = "uploads/" . $_SESSION['userName'] . $random . $fileName; 

パスは常に「/アップロード」を含んでいるだけで、時々、ランダムなセッションのユーザー名が含まれているだろう、とさえ同じファイルにのみまれファイル名、。フォームを送信する前にこれらの変数をエコーし​​ています。フォームを送信してデータベースにアップロードする前に、すべて正しいものです。フォームを送信すると、他のすべての列が正しく入力されます。

if (isset($_POST['formSubmit'])) { 

//prevent SQL injections and invalid inputs 
$title = trim($_POST['title']); 
$title = strip_tags($title); 
$title = htmlspecialchars($title); 
$title = mysqli_real_escape_string($db, $title); 


$description = trim($_POST['description']); 
$description = strip_tags($description); 
$description = htmlspecialchars($description); 
$description = mysqli_real_escape_string($db, $description); 

if (empty($title) || strlen($title) < 1) { 
    $titleError = "Title required."; 
    $formError = true; 
} 


if ($formError) { 
    $errorMessage = "Please fill out the upload form properly."; 
} else { 
    $query = mysqli_query($db, "INSERT INTO IMAGE(imageID,userID,title,description,path) 
      VALUES('','$user','$title','$description','$path')"); 

ここではフォームそのものです:

<form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>"> 
     <div class="row"> 
      <div class="col-sm-12"> 
       <span class="errorText"><?php echo $errorMessage; ?></span> 
       <br><br> 
      </div> 
     </div> 
     <div class="row"> 
      <div class='col-sm-1'><!--spacer--></div> 
      <div class="col-sm-2"> 
       <label for="title">Title:</label> 
      </div> 
      <div class="col-sm-6"> 
       <input type="text" id="title" name="title" placeholder="Enter your image title here..." > 
      </div> 
      <div class="col-sm-2"><span class="errorText"><?php echo $titleError; ?></span></div> 
      <div class='col-sm-1'><!--spacer--></div> 
     </div> 
     <br> 
     <div class="row"> 
      <div class='col-sm-1'><!--spacer--></div> 
      <div class="col-sm-2"> 
       <label for="description">Description:</label> 
      </div> 
      <div class="col-sm-6"> 
       <input type="text" id="description" name="description" placeholder="Describe your image here..."> 
      </div> 
      <div class="col-sm-2"><span class="errorText"><?php echo $descriptionError; ?></span></div> 
      <div class='col-sm-1'><!--spacer--></div> 
     </div> 
     <br> 
     <br> 
     <input type="submit" value="Submit" name = "formSubmit" id="formSubmit" class="btn"> 
     <br> 
     <br> 
    </form> 
+4

あなたのSQLインジェクション防止はひどいです。 [大脱走(または、テキスト内のテキストを扱うために必要なもの)](http://kunststube.net/escapism/)を読んでください。 – deceze

+3

フォームにenctype = "multipart/form-data"属性がありません。 – Jarzon

+1

PHPエラーログには何が記載されていますか? – kojow7

答えて

1

形がにenctype = "multipart/form-data" 属性が欠落しています。あなたがMySQLi prepared statementを使用する

<form method="POST" enctype="multipart/form-data"> 

はまた、これが問題に無関係であったとしても、私は強くお勧めします。手動でパラメータをエスケープする必要なく、 SQL injectionを避けるのに役立ちます。

関連する問題