Problème d'insertion des données input texte et fichier ensemble dans la bbd
Résolu
ir_1997
Messages postés
97
Date d'inscription
Statut
Membre
Dernière intervention
-
ir_1997 Messages postés 97 Date d'inscription Statut Membre Dernière intervention -
ir_1997 Messages postés 97 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Problème d'insertion des données input texte et fichier ensemble dans la bbd
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
11 réponses
Il y a une erreur dans ton formulaire.... tu as oublié un C au mot enctype
enctype="multipart/form-data"
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 22
NULL
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 24
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 30
Notice: Undefined variable: i in C:\xampp\htdocs\try.php on line 30
NULL
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 24
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 30
Notice: Undefined variable: i in C:\xampp\htdocs\try.php on line 30
<?php try{ $bdd =new PDO('mysql:host=localhost; dbname=espace_membre; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); if(isset($_POST['formsend'])){ $idm=$_POST['idm']; $pseudo=$_POST['pseudo']; $article=$_POST['article']; var_dump($_FILES['files']['name']); $filename=$_FILES['files']['name']; $target_file = 'upload/'.$filename; $file_extension = pathinfo($target_file, PATHINFO_EXTENSION); $file_extension = strtolower($file_extension); $valid_extension = array("png","jpeg","jpg"); if(move_uploaded_file($_FILES['files']['tmp_name'][$i],$target_file)){ $description=$_POST['description']; $prix=$_POST['prix']; $contacte=$_POST['contacte']; $categories=$_POST['categories']; $region=$_POST['region']; $sql = "INSERT INTO `articles`('idm', 'pseudo','article','files','description','prix','categories','region') VALUES (:idm,:pseudo,:article,:filename,:description,:prix,:contacte,:categories,:region)"; try{ $res = $bdd->prepare($sql); $exec = $res->execute(array( ":idm"=>$idm, ":pseudo"=>$pseudo, ":article"=>$article, ":files"=>$ifilesname, ":description"=>$description, ":prix"=>$prix, ":contacte"=>$contacte, ":categories"=>$categories, ":region"=>$region,)); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } // vérifier si la requête d'insertion a réussi if($exec){ echo 'Données insérées'; }else{ echo "Échec de l'opération d'insertion"; } } } ?>
<!DOCTYPE html> <html> <head> <title>upload</title> <meta charset="utf-8"> </head> <body> <form method="post" action="" enctype="multipart/form-data"> <br><input type="hidden" name="idm" id="idm" value=" <?php echo $getid ; ?>" readonly> <br><input type="hidden" name="pseudo" id="pseudo" value=" <?php echo $userinfo['pseudo']; ?>" readonly> <br><input type="title" name="article" id="article" placeholder="article" required></br> <br><input type="file" name="files[]" id="image" placeholder="image" multiple="" required="" ></br> <br><textarea type="text" name="description" id="description" placeholder="description de l'article" required></textarea></br> <br><input type="text" name="prix" id="prix" placeholder="prix" required></br> <br><input type="tel" name="contacte" id="contacte" placeholder="contacte" required> </br> <br><select name="categories" id="categories"> <option value="automobile">automobile</option> <option value="mode">mode</option> <option value="immobilier">immobilier</option> <option value="electronique">electronique</option> <option value="service"> service</option> </select required></br> <br><select name="region" id="region"> <option value="niamey">niamey</option> <option value="maradi">maradi</option> <option value="zinder">zinder</option> <option value="diffa">diffa</option> <option value="tillaberi">tillaberi</option> <option value="dosso">dosso</option> <option value="agadez">agadez</option> </select required></br> <br><input type="submit" name="formsend" id="formsend" value="publier" required></br> </form> </body> </html>
Bon,
je recommene...
Que donne un var_dump de $_FILES ??? ( et pas $_FILES['files']['name'] ) !
Donc... JUSTE :
A noter que tu as nommé ton champ files : name="files[]"
donc, un array...
Si tu ne compte uploader qu'un seul fichier, il faut juste
Si, par contre, tu veux en uploader plusieurs ... dans ce cas, il faudra boucler sur la variable $_FILES
je recommene...
Que donne un var_dump de $_FILES ??? ( et pas $_FILES['files']['name'] ) !
Donc... JUSTE :
var_dump ($_FILES);
A noter que tu as nommé ton champ files : name="files[]"
donc, un array...
Si tu ne compte uploader qu'un seul fichier, il faut juste
name="files"
Si, par contre, tu veux en uploader plusieurs ... dans ce cas, il faudra boucler sur la variable $_FILES
array(1) { ["files"]=> array(5) { ["name"]=> array(2) { [0]=> string(12) "FXBQ8245.JPG" [1]=> string(12) "FZGR9369.JPG" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(24) "C:\xampp\tmp\phpE927.tmp" [1]=> string(24) "C:\xampp\tmp\phpE928.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(61616) [1]=> int(44193) } } }
Notice: Undefined variable: countfiles in C:\xampp\htdocs\try.php on line 24
Notice: Undefined variable: countfiles in C:\xampp\htdocs\try.php on line 24
<?php try{ $bdd =new PDO('mysql:host=localhost; dbname=espace_membre; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); if(isset($_POST['formsend'])){ $idm=$_POST['idm']; $pseudo=$_POST['pseudo']; $article=$_POST['article']; var_dump($_FILES); for($i=0;$i<$countfiles;$i++){ $filename=$_FILES['files']['name']; $target_file = 'upload/'.$filename; $file_extension = pathinfo($target_file, PATHINFO_EXTENSION); $file_extension = strtolower($file_extension); $valid_extension = array("png","jpeg","jpg"); if(move_uploaded_file($_FILES['files']['tmp_name'][$i],$target_file)){ $description=$_POST['description']; $prix=$_POST['prix']; $contacte=$_POST['contacte']; $categories=$_POST['categories']; $region=$_POST['region']; $sql = "INSERT INTO `articles`('idm', 'pseudo','article','files','description','prix','categories','region') VALUES (:idm,:pseudo,:article,:filename,:description,:prix,:contacte,:categories,:region)"; try{ $res = $bdd->prepare($sql); $exec = $res->execute(array( ":idm"=>$idm, ":pseudo"=>$pseudo, ":article"=>$article, ":files"=>$ifilesname, ":description"=>$description, ":prix"=>$prix, ":contacte"=>$contacte, ":categories"=>$categories, ":region"=>$region,)); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } // vérifier si la requête d'insertion a réussi if($exec){ echo 'Données insérées'; }else{ echo "Échec de l'opération d'insertion"; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Et donc.... comprends tu ce que le var_dump t'affiche ?
Vois tu la "structure" de ta variable ?
Voici un exemple inspirée d'un code trouvé sur le "site officiel" de php
https://www.php.net/manual/fr/features.file-upload.multiple.php
A noter que, vu la structure de ta bdd (qui dénotte un réel manque de réflexion/conception dans ton programme...) ... tu vas insérer autant de ligne que tu as de fichiers....
Alors qu'une table spécifique pour gérer serait préférable surtout si tu comptes en uploader plusieurs pour un même enregistrement...
Perso... je ferai d"une part l'insert des variables POST dans la tables articles
Je récupère l'ID généré lors de cette insertion...
Puis, dans une table articles_files (par exemple) je ferai l'insert des fichiers .
Cette table aurait 3 colonnes
- ID (auto-incrémenté ) (clé primaire)
- id_article ( l'id précedemment récupérer lors de l'insert des variables POST dans la tables articles )
- fichier ( nom ou chemin.. du fichier )
Vois tu la "structure" de ta variable ?
Voici un exemple inspirée d'un code trouvé sur le "site officiel" de php
https://www.php.net/manual/fr/features.file-upload.multiple.php
function reArrayFiles(&$file_post) { $file_ary = array(); $file_count = count($file_post['name']); $file_keys = array_keys($file_post); for ($i=0; $i<$file_count; $i++) { foreach ($file_keys as $key) { $file_ary[$i][$key] = $file_post[$key][$i]; } } return $file_ary; } if (!empty(($_FILES['files'])) { $file_ary = reArrayFiles($_FILES['files']); foreach ($file_ary as $file) { print 'File Name: ' . $file['name']; print 'File Type: ' . $file['type']; print 'File Size: ' . $file['size']; print 'File tmp_name: ' . $file['tmp_name']; $target_file = 'upload/'. $file['name']; $file_extension = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); if(move_uploaded_file($files['tmp_name'],$target_file)){ //... la suite de ton code... } } }
A noter que, vu la structure de ta bdd (qui dénotte un réel manque de réflexion/conception dans ton programme...) ... tu vas insérer autant de ligne que tu as de fichiers....
Alors qu'une table spécifique pour gérer serait préférable surtout si tu comptes en uploader plusieurs pour un même enregistrement...
Perso... je ferai d"une part l'insert des variables POST dans la tables articles
Je récupère l'ID généré lors de cette insertion...
Puis, dans une table articles_files (par exemple) je ferai l'insert des fichiers .
Cette table aurait 3 colonnes
- ID (auto-incrémenté ) (clé primaire)
- id_article ( l'id précedemment récupérer lors de l'insert des variables POST dans la tables articles )
- fichier ( nom ou chemin.. du fichier )
salut enfaîte j'ai essayer de suivre ce que tu m'a conseillé
une table spécifique pour les image qui comprendrai 3 colonne
le problème ce que je sais pas comment récupérer
id_article ( l'id précédemment récupérer lors de l'insert des variables POST dans la tables articles )
-
une table spécifique pour les image qui comprendrai 3 colonne
le problème ce que je sais pas comment récupérer
id_article ( l'id précédemment récupérer lors de l'insert des variables POST dans la tables articles )
-
Faut chercher avec les mots clé : PDO LAST INSERT ID
Et tu tombes sur : https://www.php.net/manual/fr/pdo.lastinsertid.php
Et tu tombes sur : https://www.php.net/manual/fr/pdo.lastinsertid.php
<?php try{ $bdd =new PDO('mysql:host=localhost; dbname=espace_membre; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); if (isset($_POST['formsend'])) { ; $idm = (isset($_POST['idm']))? $_POST['idm'] :"" ; $article = (isset($_POST['article']))? $_POST['article'] :"" ; $image = (isset ($_file['image']))? $_file['image'] :"" ; $description = (isset($_POST['description']))? $_POST['description']:""; $prix = (isset($_POST['prix']))? $_POST['prix']:""; $contacte = (isset($_POST['contacte']))?$_POST['contacte']:""; $categories = (isset($_POST['categories']))?$_POST['categories']:""; $pseudo = (isset($_POST['pseudo']))? $_POST['pseudo'] :"" ; $region = (isset($_POST['region']))? $_POST['region'] :"" ; $sql = "INSERT INTO articles ( idm , article , image , description , prix , contacte , categories , pseudo , region ) VALUES( :idm, :article, :image , :description, :prix, :contacte, :categories, :pseudo, :region )"; try{ $datas = array( ':idm'=>$idm ,':article'=>$article , ':image'=>$image , ':description'=>$description , ':prix'=>$prix , ':contacte'=>$contacte , ':categories'=>$categories , ':pseudo'=>$pseudo , ':region'=>$region ); $stmt = $bdd->prepare($sql); $stmt->execute($datas); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } }
<!DOCTYPE html> <html> <head> <title>upload</title> <meta charset="utf-8"> </head> <body> <form method="POST" action=""> <br><input type="hidden" name="idm" id="idm" value=" <?php echo $getid ; ?>" readonly> <br><input type="hidden" name="pseudo" id="pseudo" value=" <?php echo $userinfo['pseudo']; ?>" readonly> <br><input type="title" name="article" id="article" placeholder="article" required></br> <gras></gras> </br> <br><textarea type="text" name="description" id="description" placeholder="description de l'article" required></textarea></br> <br><input type="text" name="prix" id="prix" placeholder="prix" required></br> <br><input type="tel" name="contacte" id="contacte" placeholder="contacte" required> </br> <br><select name="categories" id="categories"> <option value="automobile">automobile</option> <option value="mode">mode</option> <option value="immobilier">immobilier</option> <option value="electronique">electronique</option> <option value="service"> service</option> </select required></br> <br><select name="region" id="region"> <option value="niamey">niamey</option> <option value="maradi">maradi</option> <option value="zinder">zinder</option> <option value="diffa">diffa</option> <option value="tillaberi">tillaberi</option> <option value="dosso">dosso</option> <option value="agadez">agadez</option> </select required></br> <br><input type="submit" name="formsend" id="formsend" value="publier" required></br> </form> <form method="POST" action=""> <br><input type="text" name="id_article" id="id_article" value="<? print $bdd->lastInsertId(); ?> " read only > <br><input type="file" name="image" id="image" placeholder="image" required multiple=""></br> </body> </html>
Le code que tu nous montres ... c'est un seul fichier ou deux fichiers distincts ?
( si un seul ... pas besoin de le séparer dans des balises de code différentes.... )
Enfin bon.
Pour commencer, il est préférable de récupérer proprement la variable AVANT de l'utiliser.
Donc, au niveau de ta requête
puis dans ton code html
( si un seul ... pas besoin de le séparer dans des balises de code différentes.... )
Enfin bon.
Pour commencer, il est préférable de récupérer proprement la variable AVANT de l'utiliser.
Donc, au niveau de ta requête
$sql = "INSERT INTO articles ( idm , article , image , description , prix , contacte , categories , pseudo , region ) VALUES( :idm, :article, :image , :description, :prix, :contacte, :categories, :pseudo, :region )"; $datas = array( ':idm'=>$idm ,':article'=>$article , ':image'=>$image , ':description'=>$description , ':prix'=>$prix , ':contacte'=>$contacte , ':categories'=>$categories , ':pseudo'=>$pseudo , ':region'=>$region ); try{ $stmt = $bdd->prepare($sql); $stmt->execute($datas); $lastId = $bdd->lastInsertId(); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
puis dans ton code html
<br><input type="text" name="id_article" id="id_article" value="<?php echo $lastId; ?> " read only >
j'ai fais passer l'id dans L’URL sa fonction bien et sa s'affiche
mais quand je l'inscrit dans input sa maffiche juste le code php au lieu de l'id
je me demande c'est quoi le souci
mais quand je l'inscrit dans input sa maffiche juste le code php au lieu de l'id
je me demande c'est quoi le souci
<?php $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); $id_article = $_GET['id']
<!DOCTYPE html> <html> <head> <title>upload</title> <meta charset="utf-8"> </head> <body> <form method="POST" action=""> <br><input type="text" name="id_article" id="id_article" value=" <? echo $id_article; ?> " read only > <input type ="submit" name="submit" value="submit" </body> </html>
oui oui tous marche sur la page précédent
maintenant c'est mettre l'id récupérer depuis url qui saffiche pas dans l'input sur le page suivante
maintenant c'est mettre l'id récupérer depuis url qui saffiche pas dans l'input sur le page suivante
je m’excuse vraiment mais j'arrive pas a trouver l'erreur j'ai vraiment besoin d'aide svp
la c'est l'url http://localhost/image.php?id=103
et la l'echo ['id'] 103
puis c'est qui s'affiche dans linpute <? .echo $_GET['id']; .?>
je comprend pas prouquoi sa donne pas l'id dans l'input
la c'est l'url http://localhost/image.php?id=103
et la l'echo ['id'] 103
puis c'est qui s'affiche dans linpute <? .echo $_GET['id']; .?>
je comprend pas prouquoi sa donne pas l'id dans l'input
<!DOCTYPE html> <html> <head> <title>upload</title> <meta charset="utf-8"> </head> <body> <form method="POST" action=""> <br><input type="text" name="id_article" id="id_article" value=" <? echo $_GET['id']; ?> " read only > <input type ="submit" name="submit" value="submit" </body> </html>
<?php try{ $bdd =new PDO('mysql:host=localhost; dbname=espace_membre; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); echo $_GET['id']; ?>
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
ça ne corrigera pas ton souci actuel... mais ça en évitera d'autres... (et puis ce n'est pas la première fois, me semble t'il que je te demande d'appliquer ce qui est marqué dans ce lien.... )
NULL
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 23
Notice: Undefined index: files in C:\xampp\htdocs\try.php on line 29
Notice: Undefined variable: i in C:\xampp\htdocs\try.php on line 29