Affichage plusieurs images php et les faire défiler
Résolu
max30
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
2 problèmes:
Le premier c'est au niveau de l'affichage de plusieurs images se trouvant en mysql sur ma page php. Lorsque je soumets un formulaire avec une seule image, j'arrive à afficher cette dernière sur la page php, mais cela devient plus difficile lorsque dans le formulaire il y a plusieurs images. C'est à dire que lors de l'affichage sur la page php, uniquement une seule image apparait pour chaque formulaire soumis (contenant une photo) .
Je souhaite donc que pour un formulaire contenant plusieurs images, celles-ci puissent s'afficher.
Deuxièmement, je chercherai à les faire défiler, c'est à dire que lorsque je
clique sur l'une des flèches droite ou gauche, je puisse voir les autres.
Voci mon code:
2 problèmes:
Le premier c'est au niveau de l'affichage de plusieurs images se trouvant en mysql sur ma page php. Lorsque je soumets un formulaire avec une seule image, j'arrive à afficher cette dernière sur la page php, mais cela devient plus difficile lorsque dans le formulaire il y a plusieurs images. C'est à dire que lors de l'affichage sur la page php, uniquement une seule image apparait pour chaque formulaire soumis (contenant une photo) .
Je souhaite donc que pour un formulaire contenant plusieurs images, celles-ci puissent s'afficher.
Deuxièmement, je chercherai à les faire défiler, c'est à dire que lorsque je
clique sur l'une des flèches droite ou gauche, je puisse voir les autres.
Voci mon code:
<?php $bdd= new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); $articles = $bdd->query('SELECT titre, photo, presentation FROM annonces ORDER BY id DESC'); if(isset($_GET['q']) AND !empty($_GET['q'])) { $q = htmlspecialchars($_GET['q']); $articles = $bdd->query('SELECT titre, photo, presentation FROM annonces WHERE titre LIKE "%'.$q.'%" ORDER BY id DESC'); } ?> <html lang="fr"> <head> <meta charset="utf-8"> <title>Titre de la page</title> <link rel="stylesheet" href="style.css"> <script src="js/slider1.js"></script> </head> <body> <header> <div class= "boutons"> <button class="favorite styled" onclick="window.location.href = 'connexion.php';" type="button"> Connexion </button> <button class="favorite styled" onclick="window.location.href = 'register.php';" type="button"> Inscription </button> </div> </header> <div id="menu>"> <nav> <ul> <li class="menu-accueil"><a href="accueil.php">Accueil</a></li> <li class="menu-informatique"><a href="informatique.asp">Informatique et Multimédia</a> <ul class= "submenu"> <li><a href="affichage.php?query=telephone">Téléphones</a> </li> <li><a href="affichage.php?query=ordinateur">Ordinateurs Portables</a> </li> <li><a href="#">Accessoires Informatiques</a></li> <li><a href="#">Ordinateur de bureaux</a> </li> </ul> </li> <li class="menu-immobilier"><a href="">Immobilier</a> <ul class= "submenu"> <li><a href="#">Appartements</a> </li> <li><a href="#">Maisons et Villas</a> </li> <li><a href="#">Location </a></li> <li><a href="#">Bureaux</a> </li> <li><a href="#">Terrain </a> </li> </ul> </li> <li class="menu-vehicules"><a href="voiture.asp">Véhicules</a> <ul class= "submenu"> <li><a href="affichage.php?query=voitures">Voitures</a> </li> <li><a href="affichage.php?query=motos">Motos</a> </li> <li><a href="#">Pièces et accessoires pour véhicules</a> </li> <li><a href="affichage.php?query=velos">Vélos</a> </li> <li><a href="#">Véhicules professionnels</a> </li> </ul> </li> <li class=menu-entreprises><a href="entreprises.asp">Entreprises</a> <ul class= "submenu"> <li><a href="#">Matériels Professionnels </a></li> <li><a href="#">Business et Affaires Commerciales </a> </li> <li><a href="#">Stocks et vente en gros </a></li> </ul> </li> <li class= "menu-cours"><a href="cours.asp">Cours</a> <ul class= "submenu"> <li><a href="#">Privés </a></li> <li><a href="#">Collectifs </a></li> </ul> </li> <li class="menu-annonce"><a href="formannonce.php">Déposer une annaonce</a> </li> <li class= "menu-contact"><a href="contact.php">Nous contacter</a></li> </ul> </nav> </div> <br> <br> <br> <br> <div id="searchbar"> <form method="GET"> <h1>Que recherchez-vous?</h1> <input type="search" name="q" placeholder="maison, voiture..." /> <input type="submit" value="Rechercher" /> </form> </div> <br> <br> <br> <br> <p>Toutes les annonces</p> <br> <div class="showimages"> <?php if($articles->rowCount() > 0) { ?> <div class="polaroid"> <?php while($donnees = $articles->fetch()) { echo('<div class="publication"> <img style="width:150px; height:150px;border-radius:500px; margin-bottom: 60px;" src= "pictures/'.$donnees['photo'] . '"/> <span class="title">' .$donnees['titre']. '</span> <br> <span class="presentation">' .$donnees['presentation']. '</span> </br> </div>' ); }?> </div> </div> <?php } else { ?> Aucun résultat pour: <?= $q ?>... <?php } ?>
A voir également:
- Afficher une image stockée dans une base mysql
- Légender une image - Guide
- Base de registre - Guide
- Créer une image iso - Guide
- Transformer une image en icone - Guide
- Rechercher une image - Guide
14 réponses
Bonjour,
Déjà... arrête de recréer des nouvelles discussions à chaque fois que tu veux reformuler !!
Il te suffit d"éditer ta quesiton initiale ou de répondre en commentaire si tu veux compléter ta question.
Ensuite..
Quand tu as plusieurs photos .. comment ça se présente dans ta bdd ?
Que contient, lorsque tu as plusieurs photos, la variable $donnees['photo'] ?
Déjà... arrête de recréer des nouvelles discussions à chaque fois que tu veux reformuler !!
Il te suffit d"éditer ta quesiton initiale ou de répondre en commentaire si tu veux compléter ta question.
Ensuite..
Quand tu as plusieurs photos .. comment ça se présente dans ta bdd ?
Que contient, lorsque tu as plusieurs photos, la variable $donnees['photo'] ?
Bonjour jordane45 :),
En bdd il y a 9 données dans la table annonces: id, ville, titre, prix, presentation, photo, telephone, email, categorie.
Par exemple pour une annonce dans la catégorie bureaux, la donnée photo contient 5 images en mysql. Il y a donc 5 unités dans cette donnée 'photo' .
Les autres catégories(voitures, motos, etc...), j'ai mis une seule photo pour chaque catégorie quand je soumets le formulaire. Elles s'affichent donc sur la page php, alors que bureaux contenant 5 images, celles-ci ne s'affichent pas .
En bdd il y a 9 données dans la table annonces: id, ville, titre, prix, presentation, photo, telephone, email, categorie.
Par exemple pour une annonce dans la catégorie bureaux, la donnée photo contient 5 images en mysql. Il y a donc 5 unités dans cette donnée 'photo' .
Les autres catégories(voitures, motos, etc...), j'ai mis une seule photo pour chaque catégorie quand je soumets le formulaire. Elles s'affichent donc sur la page php, alors que bureaux contenant 5 images, celles-ci ne s'affichent pas .
en même temps... tu as collé plusieurs noms d'images dans un seul champ de ta bdd .. et en plus tu ne sembles pas avoir prévu de caractère pour les séparer ....
Ou commence le nom de l'image 2 et ou fini t'il ?
Comment tu feras si tu as des images avec différentes extensions ?
Alors.. si tu veux continuer à stocker toutes les images dans un seul champ
Soit tu les serialises
Soit tu les encodes en json
Soit tu ajoutes un caractère séparateur ( comme un point-virgule) entre chaque image
Sinon, plus propre...
Tu ajoutes une Table dans ta bdd : image_products
avec les champs ( #id, id_product, filename )
et tu ajoutes autant de lignes dans la table que tu as d'images pour chaque produit...
Ou commence le nom de l'image 2 et ou fini t'il ?
Comment tu feras si tu as des images avec différentes extensions ?
Alors.. si tu veux continuer à stocker toutes les images dans un seul champ
Soit tu les serialises
Soit tu les encodes en json
Soit tu ajoutes un caractère séparateur ( comme un point-virgule) entre chaque image
Sinon, plus propre...
Tu ajoutes une Table dans ta bdd : image_products
avec les champs ( #id, id_product, filename )
et tu ajoutes autant de lignes dans la table que tu as d'images pour chaque produit...
Tu veux dire un caractère séparateur dans la page où il y a le formulaire? Si oui, l'ajouter où dans le code ci dessous?
2ème point: si créer une nouvelle table image_ptoducts, alors dans le code du formulaire, on va donc faire 2 requete, c'est à dire une avec insert in annonces (ville, categorie...) et l'autre insert in image_products?
Et par la suite on SELECT les 2 dans la page où l'on souhaite afficher les images? Dans ce cas comment lier les 2 tables entre elles?
<?php $bdd= new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); $photo1=""; $photo2=""; $photo3=""; $photo4=""; $photo5=""; if(isset($_POST['formannonce'])) { $phone= intval($_POST['phone']); $mail = htmlspecialchars($_POST['mail']); $categorie= ($_POST['categorie']); $villes= ($_POST['villes']); $titre = htmlspecialchars($_POST['titre']); $prix= intval($_POST['prix']); $presentation= nl2br(htmlspecialchars($_POST['presentation'])); //Les photos $photo1= ($_FILES['img1']['name']); $photo_tmp1= ($_FILES['img1']['tmp_name']); $photo2= ($_FILES['img2']['name']); $photo_tmp2= ($_FILES['img2']['tmp_name']); $photo3= ($_FILES['img3']['name']); $photo_tmp3= ($_FILES['img3']['tmp_name']); $photo4= ($_FILES['img4']['name']); $photo_tmp4= ($_FILES['img4']['tmp_name']); $photo5= ($_FILES['img5']['name']); $photo_tmp5= ($_FILES['img5']['tmp_name']); $data[]= []; $data= [$photo1,$photo2,$photo3,$photo4,$photo5]; $images= implode('', $data); $location= "pictures/"; move_uploaded_file($photo_tmp1,$location.$photo1); move_uploaded_file($photo_tmp2,$location.$photo2); move_uploaded_file($photo_tmp3,$location.$photo3); move_uploaded_file($photo_tmp4,$location.$photo4); move_uploaded_file($photo_tmp5,$location.$photo5); $sql= "INSERT INTO annonces(categorie,ville,titre,presentation,prix,telephone,email,photo) VALUES('$categorie','$villes','$titre','$presentation','$prix','$phone','$mail','$images')"; $datas= array($categorie, $villes, $titre, $phone, $mail, $prix, $presentation, $images); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } ?>
2ème point: si créer une nouvelle table image_ptoducts, alors dans le code du formulaire, on va donc faire 2 requete, c'est à dire une avec insert in annonces (ville, categorie...) et l'autre insert in image_products?
Et par la suite on SELECT les 2 dans la page où l'on souhaite afficher les images? Dans ce cas comment lier les 2 tables entre elles?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Jordane, j'ai fait comme tu as dit. J'ai créé une autre table image_products avec les champs (idfirst, id_product, filename_product), ou j'ai lié id_product à id de la table annonces. Pour être plus simple, voir les photos.



Concernant le formulaire, tu peux voir dans le code que la variable $images a été associée à images_products (je n'ai donc pas ajoutée $images à la table annonces). Mais quand je remplis le formulaire, c'est le message d'erreur suivant qui apparait: "Notice: Trying to get property of non-object in..."
Il s'agit donc de cette ligne: $idproduct= $sql->insert_id;.
Voici le code entier pour les 2 requêtes:



Concernant le formulaire, tu peux voir dans le code que la variable $images a été associée à images_products (je n'ai donc pas ajoutée $images à la table annonces). Mais quand je remplis le formulaire, c'est le message d'erreur suivant qui apparait: "Notice: Trying to get property of non-object in..."
Il s'agit donc de cette ligne: $idproduct= $sql->insert_id;.
Voici le code entier pour les 2 requêtes:
<?php $bdd= new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); $photo1=""; $photo2=""; $photo3=""; $photo4=""; $photo5=""; if(isset($_POST['formannonce'])) { $phone= intval($_POST['phone']); $mail = htmlspecialchars($_POST['mail']); $categorie= ($_POST['categorie']); $villes= ($_POST['villes']); $titre = htmlspecialchars($_POST['titre']); $nompseudo = htmlspecialchars($_POST['nompseudo']); $prix= intval($_POST['prix']); $presentation= nl2br(htmlspecialchars($_POST['presentation'])); //Les photos $photo1= ($_FILES['img1']['name']); $photo_tmp1= ($_FILES['img1']['tmp_name']); $photo2= ($_FILES['img2']['name']); $photo_tmp2= ($_FILES['img2']['tmp_name']); $photo3= ($_FILES['img3']['name']); $photo_tmp3= ($_FILES['img3']['tmp_name']); $photo4= ($_FILES['img4']['name']); $photo_tmp4= ($_FILES['img4']['tmp_name']); $photo5= ($_FILES['img5']['name']); $photo_tmp5= ($_FILES['img5']['tmp_name']); $data[]= []; $data= [$photo1,$photo2,$photo3,$photo4,$photo5]; $images= implode('', $data); $location= "pictures/"; move_uploaded_file($photo_tmp1,$location.$photo1); move_uploaded_file($photo_tmp2,$location.$photo2); move_uploaded_file($photo_tmp3,$location.$photo3); move_uploaded_file($photo_tmp4,$location.$photo4); move_uploaded_file($photo_tmp5,$location.$photo5); $sql= "INSERT INTO annonces(nompseudo,categorie,ville,titre,presentation,prix,telephone,email) VALUES(?,?,?,?,?,?,?,?)"; $datas= array($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail); //requete pour la table image_product $idproduct= $sql->insert_id; $int= "INSERT INTO image_products(id_product, filename_product) VALUES(?,?)"; $datas2= array($idproduct, $images); //Execution de la requete try{ //requete pour la première tabels $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; //Execution pour la deuxième table $requete2 = $bdd -> prepare($int) ; $requete2->execute($datas2) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } ?>
C'est sur la variable $requete que tu dois utiliser la méthode lastInsertId
https://www.php.net/manual/fr/pdo.lastinsertid.php
https://www.php.net/manual/fr/pdo.lastinsertid.php
J'ai mis ça e j'obtiens: " Undefined variable: idproduct in " et " Fatal error: Uncaught Error: Call to undefined method PDOStatement::LastInsertId() in."
Elle est où l'erreur dans le code ci-dessous?
Elle est où l'erreur dans le code ci-dessous?
$sql= "INSERT INTO annonces(nompseudo,categorie,ville,titre,presentation,prix,telephone,email) VALUES(?,?,?,?,?,?,?,?)"; $datas= array($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail); //requete pour la table image_product $int= "INSERT INTO image_products(filename_product) VALUES(?)"; $datas2= array($idproduct, $images); //Execution de la requete try{ //requete pour la première tabels $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; $requete->LastInsertId(); //Execution pour la deuxième table $requete2 = $bdd -> prepare($int) ; $requete2->execute($datas2) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } }
Elle est où l'erreur ? hormis le code lui même ? :-)
Essaye ça
Essaye ça
$sql= "INSERT INTO annonces(nompseudo,categorie,ville,titre,presentation,prix,telephone,email) VALUES(?,?,?,?,?,?,?,?)"; $datas= array($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail); //Execution de la requete try{ //requete pour la première tabels $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; $id_product = $bdd ->LastInsertId(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } $sql= "INSERT INTO image_products(id_product,filename_product) VALUES(?,?)"; $datas= array($id_product, $images); //Execution de la requete try{ //Execution pour la deuxième table $requete2 = $bdd -> prepare($sql) ; $requete2->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); }
On y est presque. La première erreur ne s'affiche plus. Uniquement la deuxième erreur s'affiche: << Fatal error: Uncaught Error: Call to undefined method PDOStatement::LastInsertId() in C:\wamp64\www\Projetsite\formannonce.php on line 49
( ! ) Error: Call to undefined method PDOStatement::LastInsertId() in C:\wamp64\www\Projetsite\formannonce.php on line 49>>
Le code est dans la ligne $id_product = $requete->LastInsertId();
( ! ) Error: Call to undefined method PDOStatement::LastInsertId() in C:\wamp64\www\Projetsite\formannonce.php on line 49>>
Le code est dans la ligne $id_product = $requete->LastInsertId();
J'ai corrigé l'erreur, mais rien n'apparait sur la base de données quand on soumet le formulaire. Pourquoi?
Voici la correction, je pense:
au lieu
Voici la correction, je pense:
$idproduct = $bdd->LastInsertId();
au lieu
Bonjour Jordane, donc si j'ai bien compris, je vais dans ma table image_products j'ajoute un champ pour chaque photo telle que définie dans le code ci dessous, c'est à dire photo1, photo2 ...photo5. Ainsi à chaque photo j'associe une variable ($photo1, $photo2... $photo5). Mais dans ce cas, inutile de conserver le champ filename_product, pour autant que le nom du fichier concerné sera affiché dans le champ lui étant attribué, i.e. photo1, ou photo2 ou .... photo5. C'est ce que tu veux dire précisément?
//Les photos $photo1= ($_FILES['img1']['name']); $photo_tmp1= ($_FILES['img1']['tmp_name']); $photo2= ($_FILES['img2']['name']); $photo_tmp2= ($_FILES['img2']['tmp_name']); $photo3= ($_FILES['img3']['name']); $photo_tmp3= ($_FILES['img3']['tmp_name']); $photo4= ($_FILES['img4']['name']); $photo_tmp4= ($_FILES['img4']['tmp_name']); $photo5= ($_FILES['img5']['name']); $photo_tmp5= ($_FILES['img5']['tmp_name']); $data[]= []; $data= [$photo1,$photo2,$photo3,$photo4,$photo5]; $images= implode('', $data); $location= "pictures/"; move_uploaded_file($photo_tmp1,$location.$photo1); move_uploaded_file($photo_tmp2,$location.$photo2); move_uploaded_file($photo_tmp3,$location.$photo3); move_uploaded_file($photo_tmp4,$location.$photo4); move_uploaded_file($photo_tmp5,$location.$photo5);
<?php /** Fonction qui fera la moveuplad + l'appel à la fonction d'insert en bdd */ function savePhoto($id_product,$file,$location='/'){ if(empty($file)){ return false; //pas d'image } $photo = $file['name']; $photo_tmp = $file['tmp_name']; if(move_uploaded_file($photo_tmp,$location.$photo)){ return insertPhoto($id_product,$location.$photo); // tu peux retirer le location si tu ne veux que le nom de l'image et pas son chemin complet }else{ echo "Erreur lors de l'upload "; } } /** * Insert du chemin de l'image en bdd */ function insertPhoto($id_product,$photo){ global $bdd; $sql= "INSERT INTO image_products(id_product,filename_product) VALUES(?,?)"; $datas= array($id_product, $photo); //Execution de la requete try{ //Execution pour la deuxième table $requete2 = $bdd -> prepare($sql) ; return $requete2->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } }
et dans ton code ensuite
// on récupère proprement les variables avant de les utiliser $img1 = !empty($_FILE['img1']) ? $_FILE['img1'] : NULL; $img2 = !empty($_FILE['img2']) ? $_FILE['img2'] : NULL; $img3 = !empty($_FILE['img3']) ? $_FILE['img3'] : NULL; $img4 = !empty($_FILE['img4']) ? $_FILE['img4'] : NULL; $img5 = !empty($_FILE['img5']) ? $_FILE['img5'] : NULL; // on utilise nos fonctions .. ( appel à faire APRES avoir insert le PRODUIT dans la bdd pour pouvoir utiliser son ID bien entendu... savePhoto($id_product,$img1,$location); savePhoto($id_product,$img2,$location); savePhoto($id_product,$img3,$location); savePhoto($id_product,$img4,$location); savePhoto($id_product,$img5,$location);
J'ai bricolé partout et ça marche toujours pas ???? ????. La table annonces est remplie mais pas image_products ???????????????? Ni dans le dossier pictures les images n'apparaissent pas.
<?php $bdd= new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); if(isset($_POST['formannonce'])) { $phone= intval($_POST['phone']); $mail = htmlspecialchars($_POST['mail']); $categorie= ($_POST['categorie']); $villes= ($_POST['villes']); $titre = htmlspecialchars($_POST['titre']); $nompseudo = htmlspecialchars($_POST['nompseudo']); $prix= intval($_POST['prix']); $presentation= nl2br(htmlspecialchars($_POST['presentation'])); $location= "pictures/"; $img1 = !empty($_FILE['img1']) ? $_FILE['img1'] : NULL; $img2 = !empty($_FILE['img2']) ? $_FILE['img2'] : NULL; $img3 = !empty($_FILE['img3']) ? $_FILE['img3'] : NULL; $img4 = !empty($_FILE['img4']) ? $_FILE['img4'] : NULL; $img5 = !empty($_FILE['img5']) ? $_FILE['img5'] : NULL; function savePhoto($id_product,$file,$location){ if(empty($file)){ return false; //pas d'image } $photo = $file['name']; $photo_tmp = $file['tmp_name']; if(move_uploaded_file($photo_tmp,$location.$photo)){ return insertPhoto($id_product,$location.$photo); // tu peux retirer le location si tu ne veux que le nom de l'image et pas son chemin complet }else{ echo "Erreur lors de l'upload "; } } $sql= "INSERT INTO annonces(nompseudo,categorie,ville,titre,presentation,prix,telephone,email) VALUES(?,?,?,?,?,?,?,?)"; $datas= array($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail); //Execution de la requete try{ //requete pour la première tabels $requete = $bdd->prepare($sql) ; $requete->execute($datas) ; $id_product = $bdd->LastInsertId(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } function insertPhoto($id_product,$photo){ global $bdd; $sql= "INSERT INTO image_products(id_product,filename_product) VALUES(?,?)"; $datas= array($id_product, $photo); //Execution de la requete try{ //Execution pour la deuxième table $requete2 = $bdd -> prepare($sql) ; return $requete2->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } savePhoto($id_product,$img1,$location); savePhoto($id_product,$img2,$location); savePhoto($id_product,$img3,$location); savePhoto($id_product,$img4,$location); savePhoto($id_product,$img5,$location); } ?>
Déjà, ta connexion à la bdd n'est pas bonne.....
Merci d'activer l'affichage des erreurs PDO :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et puis, remettons un peu d'ordre dans ton code... là c'est le fouillis ..
Merci d'activer l'affichage des erreurs PDO :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et puis, remettons un peu d'ordre dans ton code... là c'est le fouillis ..
<?php //----------------------------------------------------------// // Affichage des erreurs de code php //----------------------------------------------------------// error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //----------------------------------------------------------// // connexion à la bdd avec affichage des éventuelles erreurs PDO // (code qu'il serait préférable à placer dans un fichier à part que tu n'auras qu'à inclure dans les pages où tu en as besoin... ) //----------------------------------------------------------// try{ $bdd= new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //----------------------------------------------------------// // FONCTIONS // On place les fonctions au debut du script ... //----------------------------------------------------------// function savePhoto($id_product,$file,$location){ if(empty($file)){ echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload"; var_dump($_FILES); // juste pour le debug... return false; //pas d'image } $photo = $file['name']; $photo_tmp = $file['tmp_name']; if(move_uploaded_file($photo_tmp,$location.$photo)){ return insertPhoto($id_product,$location.$photo); // tu peux retirer le location si tu ne veux que le nom de l'image et pas son chemin complet }else{ echo "<br>Erreur lors de l'upload " . $photo; } } function insertPhoto($id_product,$photo){ global $bdd; $sql= "INSERT INTO image_products(id_product,filename_product) VALUES(?,?)"; $datas= array($id_product, $photo); //Execution de la requete try{ //Execution pour la deuxième table $requete2 = $bdd -> prepare($sql) ; return $requete2->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } function insertAnnonce($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail){ global $bdd; $sql= "INSERT INTO annonces(nompseudo,categorie,ville,titre,presentation,prix,telephone,email) VALUES(?,?,?,?,?,?,?,?)"; $datas= array($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail); //Execution de la requete try{ //requete pour la première tabels $requete = $bdd->prepare($sql) ; $requete->execute($datas) ; return $bdd->LastInsertId(); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); return false; } } //----------------------------------------------------------// // CONSTANTES ou variables pour le paramétrage.. //----------------------------------------------------------// $location= "pictures/"; //----------------------------------------------------------// // Traitement du submit //----------------------------------------------------------// if(isset($_POST['formannonce'])) { $phone= intval($_POST['phone']); // attention, ça fera disparaitre le 0 qui se trouve en première position si il y en a un ... $mail = trim($_POST['mail']); // htmlspecialchars ne s'utilise que pour de l'affichage.. pas pour insérer les données en bdd ! $categorie= trim($_POST['categorie']); // htmlspecialchars ne s'utilise que pour de l'affichage.. pas pour insérer les données en bdd ! $villes= trim($_POST['villes']); // htmlspecialchars ne s'utilise que pour de l'affichage.. pas pour insérer les données en bdd ! $titre = trim($_POST['titre']); // htmlspecialchars ne s'utilise que pour de l'affichage.. pas pour insérer les données en bdd ! $nompseudo = trim($_POST['nompseudo']); $prix= intval($_POST['prix']); // tu n'auras pas de prix avec virgule ?? si oui, ce n'est pas int mais float qu'il faut utiliser ! $presentation= trim($_POST['presentation']); // nl2br s'utilise pour l'affichage;. pas pour insérer en bdd ! $img1 = !empty($_FILE['img1']) ? $_FILE['img1'] : NULL; $img2 = !empty($_FILE['img2']) ? $_FILE['img2'] : NULL; $img3 = !empty($_FILE['img3']) ? $_FILE['img3'] : NULL; $img4 = !empty($_FILE['img4']) ? $_FILE['img4'] : NULL; $img5 = !empty($_FILE['img5']) ? $_FILE['img5'] : NULL; //on créé l'annonce $id_product = insertAnnonce($nompseudo,$categorie, $villes, $titre, $presentation, $prix, $phone, $mail); // si on a bien un id_product, on upload et insère les images if( !empty($id_product) ){ savePhoto($id_product,$img1,$location); savePhoto($id_product,$img2,$location); savePhoto($id_product,$img3,$location); savePhoto($id_product,$img4,$location); savePhoto($id_product,$img5,$location); }else{ echo "Erreur : Aucun ID n'a été créé !"; } } ?>
Lors de la soumission du formulaire, avec les photos, des erreurs apparaissent:
Erreur ! SQLSTATE[HY000]: General error: 1364 Field 'idfirst' doesn't have a default value Les datas : Array ( [0] => 46 [1] => pictures/Sklearn23-6.png.
En modifiant sql mode se trouvant dans ==> Paramètres ==>Variables, d'autres erreurs s'affichent également lors de la soumission du formulaire
Erreur ! SQLSTATE[HY000]: General error: 1364 Field 'idfirst' doesn't have a default value Les datas : Array ( [0] => 46 [1] => pictures/Sklearn23-6.png.
En modifiant sql mode se trouvant dans ==> Paramètres ==>Variables, d'autres erreurs s'affichent également lors de la soumission du formulaire
ben c'est quoi ce champ "idfirst" ?
il vient d'où ?
Tu l'as créé dans ta table dans quel but ?
Et puis ... le message d'erreur est assez clair pour que normalement tu n'aies pas besoin de venir nous demander quoi faire... il te dit que le champ "idfirst" n'a pas de valeur par défaut défini (ça c'est un truc que tu dois (peux) spécifier lors de la création de tes champs dans ta bdd).
Tu as donc le choix entre, modifier le champ dans ta table pour lui définir une valeur par défaut ... soit, dans ta requête SQL lui définir une valeur...
Dis voir.. tu vas nous solliciter à chaque point-virgule manquant dans ton code ou bien tu vas un peut te mettre à essayer de trouver les réponses par toi même ?
Par ce que.. à un moment il va quand même falloir que tu essaies d'apprendre un minimum les langages que tu utilises au lieu de systématiquement quémander de l'aide sur le forum... surtout pour des chaoses aussi "basiques" ....
il vient d'où ?
Tu l'as créé dans ta table dans quel but ?
Et puis ... le message d'erreur est assez clair pour que normalement tu n'aies pas besoin de venir nous demander quoi faire... il te dit que le champ "idfirst" n'a pas de valeur par défaut défini (ça c'est un truc que tu dois (peux) spécifier lors de la création de tes champs dans ta bdd).
Tu as donc le choix entre, modifier le champ dans ta table pour lui définir une valeur par défaut ... soit, dans ta requête SQL lui définir une valeur...
Dis voir.. tu vas nous solliciter à chaque point-virgule manquant dans ton code ou bien tu vas un peut te mettre à essayer de trouver les réponses par toi même ?
Par ce que.. à un moment il va quand même falloir que tu essaies d'apprendre un minimum les langages que tu utilises au lieu de systématiquement quémander de l'aide sur le forum... surtout pour des chaoses aussi "basiques" ....
Je pensais qu'il fallait mettre un idfirst auto-incrémenté à cette nouvelle table qui a été créée, c'est à dire image_products. Cet id vient d'être enlevé , et donc le formulaire marche correctement, avec les champs id_product et filename_product dans la table.
Merci à toi également pour ta patience. Je comprends que ce n'est pas facile lorsqu'on a un code en face de soi qu'on n'a pas écrit et qu'on essaie de trouver ce grain de sable qui bloque tout.
Et je continuerai plutôt à visiter CCM pour les raisons que voici: tant qu'il y aura des développeurs patients comme toi prêts à expliquer les choses aux débutants comme moi, et également pour la richesse de ressources se trouvant dans le site.
Bien à toi SuperJordane :)
Merci à toi également pour ta patience. Je comprends que ce n'est pas facile lorsqu'on a un code en face de soi qu'on n'a pas écrit et qu'on essaie de trouver ce grain de sable qui bloque tout.
Et je continuerai plutôt à visiter CCM pour les raisons que voici: tant qu'il y aura des développeurs patients comme toi prêts à expliquer les choses aux débutants comme moi, et également pour la richesse de ressources se trouvant dans le site.
Bien à toi SuperJordane :)