2015-12-04 1 views
1

J'essaye de télécharger un chemin de fichier dans la base de données MySQL. Je ce formulaire html:impossible de télécharger un fichier via la base de données

<form action="" method="post" name="add_maps" enctype="multipart/form-data"> 
<table border="1" cellpadding="2" cellspacing="1" align="center" dir="rtl"> 
<tr> 
<th> 
name of map</th> 
<td> 
<input type="text" name="name_of_map"/> 
</td> 
<th> 
select map</th> 
<td> 
<input type="file" name="file" id="file"/> 
</td> 
</tr> 
<tr> 
<input type="submit" name="submit_map" value="upload"/> 
</tr> 
</table> 
</form> 

Et dans la même page, j'ai le code PHP pour télécharger:

<?php 
require_once('../include/inner_global.php'); 
$hostdb = "localhost"; 
$namedb = "architect"; 
$userdb = "root"; 
$passdb = "root"; 
$id = $_REQUEST['id']; 
$name=''; 
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$conn->exec("SET CHARACTER SET utf8mb4"); 

$path = "../uploads/".$_FILES['file']['name']; 
if(isset($_POST['submit_map'])){ 
    try{ 
     $name = isset($_POST['name']) ? $_POST['name'] : ''; 
     $ext = pathinfo($path, PATHINFO_EXTENSION); 
     if(move_uploaded_file($_FILES["file"]["tmp_name"], $path)){ 
      $path = "./uploads/".$path; 
      $sql = "INSERT INTO maps(name_of_maps, projects_id, map) VALUES (:name, :id, :file)"; 
      $stmt = $conn->prepare($sql); 
      $stmt->bindValue(":name", $name); 
      $stmt->bindValue(":id", $id); 
      $stmt->bindValue(":file", $path); 
      $count = $stmt->execute(); 
     } 
    } 
    catch(PDOException $e) { 
     echo $e->getMessage(); 
     header("location: insert_map_false.php?id=".$id); 
    } 
} 
?> 

Quand je vais à la page où ce formulaire html est, je reçois directement cette erreur dans l'en-tête:

enter image description here

PS

Les fichiers sont téléchargés correctement sur leur chemin, lorsque je clique sur le téléchargement, mais pas ajouté à la base de données. EDIT

Ceci est ma table

types de données

enter image description here

+0

Quel est votre type de base de données de ce champ? – uruloke

+0

montrez-nous le code de la page complète parce que si vous obtenez une erreur sur la page où le formulaire html est, il doit y avoir un problème sur cette page (même avant de télécharger) –

+0

essayez de faire var_dump ($ _FICHES) dans try block pour voir si votre le fichier est en cours de téléchargement. –

Répondre

1

Vérifiez tout d'abord de poste ou non. Ajoutez tout votre code dans cette condition, il va résoudre votre problème:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
//All code .... 
} 

ou créer hidden input à l'intérieur de:

<input type="text" name="id" type="hidden" value="<?php echo $_REQUEST['id']; ?>"/> 

Je pense que le problème est en $id = $_REQUEST['id']; parce que la valeur de $id est empty après de submit

+0

pourquoi votre code, supprimé mon erreur? Quelle est la différence entre $ _SERVER ['REQUEST_METHOD'] et $ _POST, et pourquoi $ _POST n'a pas supprimé cette erreur? – am90

+0

les deux fonctionnent même dans votre cas, mais votre ** $ FILES ['file'] ['nom'] ** est en dehors de votre condition if @ am90 –

+0

mais pourquoi quand j'actualise la page le même fichier est ajouté à nouveau? – am90

1

Votre requête SQL est:

$sql = "INSERT INTO maps(name_of_maps, projects_id, map) VALUES (:name, :id, :file)"; 

Mais votre colonne est name_of_map et non name_of_maps

requête Vous devriez être comme ceci:

$sql = "INSERT INTO maps(name_of_map, projects_id, map) VALUES (:name, :id, :file)";