Modifier une annonce avec la fonction UPDATE

Résolu
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   -  
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Bonjour, je sollicite votre aide pour essayer de modifier une annonce donnée. mes tables étant liées de la façon suivante:


Le problème c'est qu'en cliquant 'modifier' sur n'importe quelle annonce, je n'arrive pas à récupérer l'id de l'annonce qui a été cliquée, les values dans le formulaires sont donc vides. De plus, l'url n'affiche pas l'id de l'annonce lorsque le bouton modifier est cliqué.
Encore pour les images le Update est ambigu, j'ai l'erreur suivante: Undefined Variable id_annonce.
Est-ce que l'erreur est dans la façon dont j'ai écrit le code?

if(isset($_SESSION['id'])) {
$id_membre= $_SESSION['id'];

//requête pour l'annonce
$idannonce= !empty($_GET['id']); //id de la table annonce
$reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= ?");
$reqannonce->execute(array($idannonce));
$annonceinfo = $reqannonce->fetch();
$idannonce = $annonceinfo['id'] ;
var_dump($annonceinfo);
var_dump($idannonce);

//requête pour les images
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= ?");
$reqimage->execute(array($idannonce));
$imageinfo = $reqannonce->fetch(PDO::FETCH_GROUP);

//Annonce
if(!empty($_POST['newcategorie']) AND !empty($_POST['newvilles']) AND !empty($_POST['newtitre']) AND !empty($_POST['newdescription'])
AND !empty($_POST['newprix'])){
$newcategorie = trim($_POST['newcategorie']);
$newville = trim($_POST['newvilles']);
$newtitre=trim($_POST['newtitre']);
$newdescription=trim($_POST['newdescription']);
$newprix=intval($_POST['newprix']);
$update = $bdd->prepare("UPDATE annonces SET id_categorie = :id_categorie, id_ville = :id_ville, titre = :titre, description = :description WHERE id = :id");
$update->execute(array(
':id_categorie' => $newcategorie,
':id_ville' => $newville,
':titre' => $newtitre,
':description' => $newdescription,
':prix' => $newprix,
':id' => $id));
header('Location: profilannonce.php?id='.$id_membre.'');
}

//Les images
if(!empty($_FILES['newimg1']) AND !empty($_FILES['newimg2']) AND !empty($_FILES['newimg3']) AND !empty($_FILES['newimg4'])
AND !empty($_FILES['newimg5'])){
$location= "pictures/";
$newimg1 = ($_FILES['newimg1']);
$newimg2 = ($_FILES['newimg2']);
$newimg3=($_FILES['newimg3']);
$newimg4=($_FILES['newimg4']);
$newimg5=($_FILES['newimg5']);
$update = $bdd->prepare("UPDATE images_annonces SET filepath = :location WHERE id_annonce = :id_annonce");
$update->execute(array(
':id_annonce' => $id_annonce, //$id_annonce de la table image_annonces liée à annonce.
//On voit bien que $idannonceest différent de $id_annonce
':filepath' => $location));
header('Location: profilannonce.php?id='.$id_membre.'');
}




Configuration: Windows / Chrome 97.0.4692.71
A voir également:

30 réponses

max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Non, elles n'apparaissent pas dans le dossier pictures. Et dans la bdd non plus
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Dans ce cas faut nous montrer ton code complet...
Et n'hésites pas à y ajouter des var_dump histoire de voir si ton code rentre bien dans les différentes fonctions et voir quelles valeurs ont tes variables..
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Le code complet:
<?php
session_start();
include "cnx.php";
include 'langues/fb.php';
include "commandes.php";


 //Requête pour les values du formulaire:

  
    $idannonce = !empty($_GET['id']) ? $_GET['id'] : NULL;

    $reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= ?");
    $reqannonce->execute(array($idannonce));
    $annonceinfo = $reqannonce->fetch();
    var_dump($annonceinfo);
    var_dump($idannonce);





/**
* On récupère un array des filepath d'une annonce
*/
function getAllImgByIdAnnonce($idannonce){
    global $bdd;
    $sql = "SELECT filepath FROM images_annonces WHERE id_annonce=?";
    $datas = array($idannonce);

     //Execution de la requete
    try{
    //Execution pour la deuxième table
      $req = $bdd -> prepare($sql) ;
      $res = $req->execute($datas) ;

      var_dump($res);

      return $req->fetchAll(PDO::FETCH_COLUMN); //on retourne le resultat en Array
    }catch(Exception $e){
        // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        echo " Les datas : " ;
        print_r($datas);
    }  
    
  }
  
  /**
  * On supprime en BDD les photos d'une annonce
  */
  function deleteAllPhotosByIdAnnonce($idannonce){
    global $bdd;
    $sql = "DELETE FROM images_annonces WHERE id_annonce=?";
    $datas = array($idannonce);
     //Execution de la requete
    try{
    //Execution pour la deuxième table
      $req = $bdd -> prepare($sql) ;
      var_dump($req);

      return $req->execute($datas) ;
    }catch(Exception $e){
        // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        echo " Les datas : " ;
        print_r($datas);
    }     
  }
  
  /**
  * Fonction utilisant les deux autres pour supprimer les photos sur le serveur et en bdd
  */
  function deleteOldPhoto($idannonce,$location="pictures/"){
    
    //on récupère la liste des photos existantes en bdd
    $imgs = getAllImgByIdAnnonce($idannonce);

    var_dump($imgs);
    
    //on boucle dessus pour les supprimer sur le serveur 
    foreach($imgs as $img){
      @unlink($location.$img);
    }
    
    //on supprime les images dans la bdd
    return deleteAllPhotosByIdAnnonce($idannonce);
    
  }





function saveNewPhoto($idannonce,$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 updateNewPhoto($idannonce,$location.$photo);
    }
}



    function insertNewPhoto($idannonce,$photo){
        global $bdd;
        $sql= "INSERT INTO images_annonces(id_annonce,filepath) VALUES(?,?)"; 
        $datas= array($idannonce,$photo);
         //Execution de la requete
        try{
        //Execution pour la deuxième table
          $requete2 = $bdd -> prepare($sql) ;
          var_dump($requete2);

          return $requete2->execute($datas) ;
        }catch(Exception $e){
            // en cas d'erreur :
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas);
        }     
    }
     




//On modifie l'annonce
 
    function updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix,$idannonce){
        global $bdd;
        
       
        $sql= "UPDATE annonces SET id_categorie=?, id_ville=?,titre=?,description=?,prix=?  WHERE
        id=? ";
        $datas= array($newcategorie,$newville,$newtitre,$newdescription,$newprix,$idannonce);
        //Execution de la requete
        try{ //requete pour la première tabels
          $requete = $bdd->prepare($sql);
          $requete->execute($datas);
          var_dump($requete);
       
        }catch(Exception $e){
          // en cas d'erreur :
          echo " Erreur ! ".$e->getMessage();
          echo " Les datas : " ;
          print_r($datas);
          return false;
        }
      }
 
 
 
 
 
      $location= "pictures/";
 
 
 
 
      if( !empty($_SESSION['id'])){

        if(isset($_POST['formupdate'])) {
            $id_membre= $_SESSION['id'];

$idannonce = !empty($_GET['id']) ? $_GET['id'] : NULL;
 
 
//Les informations de l'annonce
        $newcategorie= trim($_POST['newcategorie']);
        $newville= trim($_POST['newvilles']);
        $newtitre=trim($_POST['newtitre']);
        $newdescription=trim($_POST['newdescription']);
        $newprix=intval($_POST['newprix']);



      
 
        //Pour les images
         
    $newimg1 = ($_FILES['newimg1']);
    $newimg2 = ($_FILES['newimg2']);
    $newimg3 = ($_FILES['newimg3']);
    $newimg4 = ($_FILES['newimg4']);
    $newimg5 = ($_FILES['newimg5']);
 



 
    //On créé la modification de l'annonce:
        $supprimerPhoto= deleteOldPhoto($idannonce,$location="pictures/");
        var_dump($supprimerPhoto);

      $modifierannonce= updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix,$idannonce);
      var_dump($modifierannonce);
 
 
        if(!empty($modifierannonce)){
            saveNewPhoto($modifierannonce,$newimg1,$location);
            saveNewPhoto($modifierannonce,$newimg2,$location);
            saveNewPhoto($modifierannonce,$newimg3,$location);
            saveNewPhoto($modifierannonce,$newimg4,$location);
            saveNewPhoto($modifierannonce,$newimg5,$location);

          echo"<h1 style= 'color: green; background-color: white; margin-top: 120px;'>Votre annonce a bien été modifiée.
          </h1>";
         
          }else{
            echo "Erreur : Aucun ID n'a été modifié !";
          }

        }
        



$villesm= getVilles();





?>

<html>


    <head>
       <meta charset="utf-8">
       <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">

       <style>

      
    </head>
    <body>
    
    
            
    <div class= "pub">      
    <form action="" method="POST" enctype="multipart/form-data" id="search-form">

        <div align= "center" class="container height-400 d-flex justify-content-center align-items-center">
    <div class="card text-center">
        <div class="py-4 p-2">
            <div class="mt-3 d-flex flex-row justify-content-center">
            <h5 style="font-size: 20px;"><?php echo $lang['dva'];?></h5>


        
            <span> <label for= "pseudo"><?php echo $_SESSION['pseudo'];?></label> </span> <br>
            
 <br> <br>


                <span>  <label for="categorieannonce"><?php echo $lang['ca'];?></label></span> <br>
                <select name="newcategorie">

                <option value="" disabled selected><?php echo $lang['categorie'];?></option>
                <?php
	// 1- on récupère les catégories principales
	$categories = getCategories( 0 );	// 0 : catégories principales (niveau 0)
 
	foreach($categories as $C)
	{
		// 2- on récupère les sous-catégories de CETTE catégorie
		$sous_categories = getCategories( $C['id'] ); // (sous-)catégories dont l'id_parent est $C['id']
 
		// Si il n'y a pas de sous-catégories
		if( empty($sous_categories) )
		{
	echo "	<option value='".$C['id']."'>".$C['nom']."</option>"."\n"; // "\n" : passage à la ligne dans le code (lisibilité du code)
		}
		// Sinon (il y a des sous-catégories)
		else
		{
            echo "	<optgroup label ='".$C['nom']."'> "."\n";
 
			// 3 - affichage des sous-catégories
			foreach($sous_categories as $SC)
			{
	echo "		<option value='".$SC['id']."'>".$SC['nom']."</option>"."\n";
			}
 
	echo "	</optgroup>";
		}
	}
?>
</select> <br> <br>



<span><label for="villes"><?php echo $lang['ville'];?></label></span> <br>
                <select name="newvilles">
              <?php  foreach($villesm as $v){


 
 echo "<option value='".$v['id']."'>".$v['ville']."</option>";

   
 }
 ?>

</select>

             <br> <br>




            <span> <label for= "titre"><?php echo $lang['tva'];?></label></span><br>
                <input type="text" id="titre" name="newtitre" value="<?php echo $annonceinfo['titre']; ?>"> <button type="button" class="microform"><i class="fas fa-microphone"></i></button> <br> <br>

                <span><label for= "description"><?php echo $lang['description'];?></label></span> <br>
                <textarea id="description" name="newdescription" value="<?php echo $annonceinfo['description']; ?>" rows="4" cols="50"> </textarea> <br> <br> <br> <br>

               <span> <label for= "prix"><?php echo $lang['prix'];?></label></span> <br>
                <input type="number" id="prix" name="newprix" value="<?php echo $annonceinfo['prix']; ?>">  <br> <br>




              
                   <span> <label for= "telephone"><?php echo $_SESSION['telephone'];?></label></span><br><br>
            
                
            

        
                    <span><label for= "email"><?php echo $_SESSION['email'];?> </label> </span><br><br>




               <span> <label for= "image"><?php echo $lang['photo1'];?></label></span>
                <input type="file" id="img1" name="newimg1" accept="image/png, image/jpeg, image/jpg" > <br><br>
                <span><label for= "image"><?php echo $lang['photo2'];?></label> </span>
                <input type="file" id="img2" name="newimg2" accept="image/png, image/jpeg, image/jpg"><br><br>
                <span><label for= "image"><?php echo $lang['photo3'];?></label></span>
                <input type="file" id="img3" name="newimg3" accept="image/png, image/jpeg, image/jpg"> <br><br>
               <span> <label for= "image"><?php echo $lang['photo4'];?></label></span>
                <input type="file" id="img4" name="newimg4" accept="image/png, image/jpeg, image/jpg"> <br><br>
                <span><label for= "image"><?php echo $lang['photo5'];?></label></span>
                <input type="file" id="img5" name="newimg5" accept="image/png, image/jpeg, image/jpg"> <br><br>
                <br> <br>





                <input type="submit" id='submit' name=formupdate value='Mettre à jour' /> <br><br>
            </form>
         
            </ul>
        
        </div>
    </div>
</div>
<?php } ?>




Les vardumps:
C:\wamp64\www\Projetsite\editerannonce.php:16:
array (size=14)   //vardump $annonceinfo
  'id' => string '11' (length=2)
  'created_by_member' => string '1' (length=1)
  'id_membre' => string '2' (length=1)
  'id_categorie' => string '301' (length=3)
  'id_ville' => string '1' (length=1)
  'pseudo' => string 'albert' (length=6)
  'telephone' => string '7178457' (length=7)
  'email' => string 'albert@gmail.fr' (length=15)
  'titre' => string 'Je vends un téléphone modifié 3' (length=34)
  'description' => string 'Modifié 3' (length=10)
  'prix' => string '0' (length=1)
  'created_date' => string '2022-01-11' (length=10)
  'created_date_hour' => string '2022-01-11 14:57:27' (length=19)
  'vues' => string '15' (length=2)

C:\wamp64\www\Projetsite\editerannonce.php:17:string '11' (length=2) //vardump $idannonce
C:\wamp64\www\Projetsite\editerannonce.php:37:boolean true  // var_dump($res de getAllImgByIdAnnonce

C:\wamp64\www\Projetsite\editerannonce.php:79: //var_dump($imgs);
array (size=0)
  empty
C:\wamp64\www\Projetsite\editerannonce.php:60:
object(PDOStatement)[3]
  public 'queryString' => string 'DELETE FROM images_annonces WHERE id_annonce=?' (length=46)

C:\wamp64\www\Projetsite\editerannonce.php:200:boolean true //var_dump($supprimerPhoto);

C:\wamp64\www\Projetsite\editerannonce.php:147:
object(PDOStatement)[3]
  public 'queryString' => string 'UPDATE annonces SET id_categorie=?, id_ville=?,titre=?,description=?,prix=?  WHERE
        id=? ' (length=97)
C:\wamp64\www\Projetsite\editerannonce.php:203:null
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Mets des echo avant tes var_dump pour dire de quoi il s'agit.. là c'est difficile de deviner à quoi ça correspond..

De plus je vois que tu fais appel à la fonction updateNewPhoto... Ce n'est pas bon
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai mis insertNewPhoto à la place.
Pour les vardumps avec echo:

La variable annonceinfo
C:\wamp64\www\Projetsite\editerannonce.php:16:
array (size=14)
  'id' => string '11' (length=2)
  'created_by_member' => string '1' (length=1)
  'id_membre' => string '2' (length=1)
  'id_categorie' => string '301' (length=3)
  'id_ville' => string '1' (length=1)
  'pseudo' => string 'albert' (length=6)
  'telephone' => string '7178457' (length=7)
  'email' => string 'albert@gmail.fr' (length=15)
  'titre' => string 'Je vends un téléphone modifié 4' (length=34)
  'description' => string '' (length=0)
  'prix' => string '0' (length=1)
  'created_date' => string '2022-01-11' (length=10)
  'created_date_hour' => string '2022-01-11 14:57:27' (length=19)
  'vues' => string '15' (length=2)
La variable idannonce
C:\wamp64\www\Projetsite\editerannonce.php:17:string '11' (length=2)
Fonction getAllImgByIdAnnonce
C:\wamp64\www\Projetsite\editerannonce.php:37:boolean true
Fonction deleteOldPhoto
C:\wamp64\www\Projetsite\editerannonce.php:79:
array (size=0)
  empty
Fonction deleteAllPhotosByIdAnnonce
C:\wamp64\www\Projetsite\editerannonce.php:60:
object(PDOStatement)[3]
  public 'queryString' => string 'DELETE FROM images_annonces WHERE id_annonce=?' (length=46)
la Variable supprimerPhoto égal à deleteOldphoto
C:\wamp64\www\Projetsite\editerannonce.php:200:boolean true
Fonction updateAnnonce
C:\wamp64\www\Projetsite\editerannonce.php:147:
object(PDOStatement)[3]
  public 'queryString' => string 'UPDATE annonces SET id_categorie=?, id_ville=?,titre=?,description=?,prix=?  WHERE
        id=? ' (length=97)
La variable modifierannonce égal à updateAnnonce
C:\wamp64\www\Projetsite\editerannonce.php:203:null

Erreur : Aucun ID n'a été modifié !
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
La fonction
updateAnnonce
N'a pas de return
Donc le résultat est null... C'est pour ca que tu entres dans le else
A part ça.. les photos sont elles uploadees sur le serveur ?
Et dans la table tu as Quoi ?
0

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

Posez votre question
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
En modifiant le return dans la fonction updateannonce, le résulat est le même. Toujours l'image par défaut. Et rien dans la table
    function updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix,$idannonce){
        global $bdd;
        
       
        $sql= "UPDATE annonces SET id_categorie=?, id_ville=?,titre=?,description=?,prix=?  WHERE
        id=? ";
        $datas= array($newcategorie,$newville,$newtitre,$newdescription,$newprix,$idannonce);
        //Execution de la requete
        try{ //requete pour la première tabels
          $requete = $bdd->prepare($sql);
          $requete->execute($datas);
          echo"Fonction updateAnnonce"; var_dump($requete);
       
        }catch(Exception $e){
          // en cas d'erreur :
          echo " Erreur ! ".$e->getMessage();
          echo " Les datas : " ;
          print_r($datas);
          return $requete;
        }
      }
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Et dans le répertoire ??? Les images sont elles uploadees ?????
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Dans le répertoire non plus
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Montres le code de ta fonction saveNewPhoto

Ajoute un else au cas ou le move a échoué

0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
en ajoutant un echo dans le else, le echo ne s'affiche pas non plus après soumission du formulaire
function saveNewPhoto($idannonce,$file,$location){
 
    if(empty($file)){
      echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
      var_dump($_FILES);
      return false; //pas d'image
    }
    $photo = $file['name'];
    $photo_tmp = $file['tmp_name'];
    if(move_uploaded_file($photo_tmp,$location.$photo)){
       return insertNewPhoto($idannonce,$location.$photo);
    }else{
        echo"Pas d'image inseré";
    }
}
:
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Avant le return, fais un echo de
$location.$photo
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai trouvé l'erreur, et ça marche. Je m'étais trompé depuis le départ
En fait, je devais faire:
  if(!empty($idannonce)){
            saveNewPhoto($idannonce,$newimg1,$location);
            saveNewPhoto($idannonce,$newimg2,$location);
            saveNewPhoto($idannonce,$newimg3,$location);
            saveNewPhoto($idannonce,$newimg4,$location);
            saveNewPhoto($idannonce,$newimg5,$location);


et non:
 if(!empty($modifierannonce)){
            saveNewPhoto($modifierannonce,$newimg1,$location);
            saveNewPhoto($modifierannonce,$newimg2,$location);
            saveNewPhoto($modifierannonce,$newimg3,$location);
            saveNewPhoto($modifierannonce,$newimg4,$location);
            saveNewPhoto($modifierannonce,$newimg5,$location);
qui est faux!

Enfin la délivrance!!

Dernière chose, tu aurais une idée pour insérer la taille de l'image, et le type(que j'ai défini dans le input) afin d'éviter des surprises dans l'avenir?
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Jordane pour tout :) Il s'agira d'un autre sujet Je vais ouvrir un nouveau topic concernant les tailles et le type pour les images. Remerciements :)
0