Affichage plusieurs images php et les faire défiler

Résolu/Fermé
max30 - 4 nov. 2021 à 13:43
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 - 8 nov. 2021 à 16:52
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:

<?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:

14 réponses

jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
4 nov. 2021 à 14:37
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'] ?


0
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 .
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
4 nov. 2021 à 15:27
Et elle les contient sous quelle forme dans le champ ??
Ne les aurais tu pas écrite avec un séparateur comme le point virgule par hasard ?
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
4 nov. 2021 à 16:05
Il n'y a pas eu de point virgule lors de l'insertion des données

Voici une illustration de la bdd




Et ici, ce qui s'affiche sur la page php
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
4 nov. 2021 à 16:08
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...
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
4 nov. 2021 à 17:33
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?

<?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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
6 nov. 2021 à 13:25
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:

<?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);
  }


}



?>
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
6 nov. 2021 à 13:47
C'est sur la variable $requete que tu dois utiliser la méthode lastInsertId
https://www.php.net/manual/fr/pdo.lastinsertid.php
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
6 nov. 2021 à 17:08
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?

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


}
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
Modifié le 6 nov. 2021 à 19:25
Elle est où l'erreur ? hormis le code lui même ? :-)

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);
}
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
6 nov. 2021 à 18:00
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();
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
6 nov. 2021 à 19:26
petite erreur de ma part (corrigée dans le code) et que tu aurais pu trouver en lisant le lien de la doc que je t'ai donné
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
6 nov. 2021 à 20:35
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:

$idproduct = $bdd->LastInsertId();

au lieu
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
6 nov. 2021 à 21:06
Par contre faut insérer une ligne par image et pas ta variable $images...
Sinon il n'y a plus aucun intérêt...
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
7 nov. 2021 à 10:04
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);
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
Modifié le 7 nov. 2021 à 11:32
<?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);






0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
7 nov. 2021 à 18:14
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);


}




?>
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
Modifié le 8 nov. 2021 à 12:27
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 ..

<?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éé !";
    }
}




?>
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
8 nov. 2021 à 10:50
Bonjour Jordane, aucune image ne s'ajoute ni dans la table ni dans le dossier pictures, ne serait-ce qu'une.

0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
8 nov. 2021 à 13:04
J'ai oublié un S à $_FILES
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
8 nov. 2021 à 14:28
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
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
8 nov. 2021 à 15:24
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" ....
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
8 nov. 2021 à 16:43
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 :)
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
8 nov. 2021 à 16:52
tu peux (c'est même conseillé) de mettre un id auto incrémenté.
Mais visiblement, tu as oublié de mettre l'auto-incrément dessus, sinon tu n'aurais pas eu ce message d'erreur.
id que tu peux définir en clé primaire au passage
0