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>
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
Il manque l'attribut enctype = "multipart/form-data". – Jarzon
Que disent vos journaux d'erreurs PHP? – kojow7