2017-08-26 4 views
-1

J'ai donc un simple site de téléchargement d'images que je crée pour un petit projet. Tout fonctionne très bien, à l'exception de la colonne du chemin d'accès au fichier dans la base de données.

Pour une raison quelconque, il inclut parfois les variables auxquelles je le dis, et parfois non.

$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; 

Le chemin contient toujours « uploads/» mais seulement serait parfois contenir le nom d'utilisateur de la session, au hasard, et que rarement le nom du fichier, même sur les mêmes fichiers. Je fais écho à ces variables avant de soumettre le formulaire, et elles sont toutes correctes avant de soumettre le formulaire et de le télécharger dans la base de données. Toutes les autres colonnes sont remplies correctement lorsque je soumets le formulaire.

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')"); 

est ici la forme elle-même:

<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

Votre prévention d'injection SQL est terrible. Lisez [Le grand évasion (Ou: ce que vous devez savoir pour travailler avec du texte dans le texte)] (http://kunststube.net/escapism/). – deceze

+3

Il manque l'attribut enctype = "multipart/form-data". – Jarzon

+1

Que disent vos journaux d'erreurs PHP? – kojow7

Répondre

1

La forme est manquante enctype = attribut "multipart/form-data".

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

En outre, même si cela est sans rapport avec la question, je vous recommande fortement d'utiliser MySQLi prepared statement. Il vous aide à éviter SQL injection sans avoir besoin d'échapper manuellement les paramètres.