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 -
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?
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:
- Modifier une annonce avec la fonction UPDATE
- Modifier dns - Guide
- Fonction si et - Guide
- Modifier liste déroulante excel - Guide
- Modifier une story facebook - Guide
- Windows update bloqué - Guide
30 réponses
Le code complet:
Les vardumps:
<?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
J'ai mis insertNewPhoto à la place.
Pour les vardumps avec echo:
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é !
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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; } }
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é"; } }:
J'ai trouvé l'erreur, et ça marche. Je m'étais trompé depuis le départ
En fait, je devais faire:
et non:
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?
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?
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..