Modifier une annonce avec la fonction UPDATE
Résolumax30_3775 Messages postés 185 Statut Membre -
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.'');
}
- Modifier une annonce avec la fonction UPDATE
- Wannonce petite annonce - Guide
- Fonction si ou - Guide
- Modifier dns - Guide
- Winget update - Guide
- Modifier liste déroulante excel - Guide
30 réponses
- 1
- 2
La problématique est que l'ID de l'annonce n'est pas récupéré lors du clic sur modifier, l'URL ne transmet pas l'identifiant et la variable id_annonce reste indéfinie, rendant les formulaires vides. Des réponses suggèrent de récupérer l'ID via le paramètre GET 'id' et de clarifier les noms de variables (idannonce vs id_annonce) pour éviter les valeurs vides dans les requêtes. Pour la mise à jour, employer UPDATE table SET colonne1 = ?, colonne2 = ? WHERE id = ? et, côté images, supprimer anciennes puis insérer les nouvelles afin d'éviter les incohérences. Des indications complémentaires insistent sur la vérification des chemins d'upload et l'utilisation d'un header de redirection après chaque étape, ce qui aide à afficher l'ID et l'état des modifications.
Relis ton code... Tu verras que tu as utilisé un underscore pour certaines variables et pour d'autres non..
J'ai relu mon code, et corrigé les erreurs des underscore, mais pour les vardump j'ai toutjours des retours false et null: ça ne get pas l'id de l'annonce.
f(isset($_SESSION['id'])) {
$id_membre= $_SESSION['id'];
$idannonce= isset($_GET['id']);var_dump($idannonce);
$reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= ?");
$reqannonce->execute(array($idannonce));
$annonceinfo = $reqannonce->fetch();
$idannonce = $annonceinfo['id'] ;
var_dump($annonceinfo);
var_dump($idannonce);
$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 = :idannonce");
$update->execute(array(
':id_categorie' => $newcategorie,
':id_ville' => $newville,
':titre' => $newtitre,
':description' => $newdescription,
':prix' => $newprix,
':id' => $idannonce));
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 = :idannonce");
$update->execute(array(
':id_annonce' => $idannonce,
':filepath' => $location));
header('Location: profilannonce.php?id='.$id_membre.'');
}
Qu'as tu comme URL lorsque tu essais de mettre à jour ton annonce ? Es-tu sûr que ton id s'y trouve ?
En plus tu as oublié une partie du code sur la ligne ..
$idannonce= isset($_GET['id']);
La.. tu ne fais que vérifier si la variable existe .. mais tu n'en récupères pas le contenu...
A corriger par
<?php
//Démarrage des sessions
session_start();
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if(isset($_SESSION['id'])) {
$id_membre= $_SESSION['id'];
$idannonce = !empty($_GET['id']) ? $_GET['id'] : NULL;
if(! $idannonce ){
echo " ID MANQUANT ! " ;
exit:;
}
$reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= ?");
$reqannonce->execute(array($idannonce));
$annonceinfo = $reqannonce->fetch();
//$idannonce = $annonceinfo['id'] ; // .. INUTILE .. Vu que tu connais l'id .. c'est celui que tu lui passes dans l'url ..
var_dump($annonceinfo);
var_dump($idannonce);
$id= $anounce['id']; echo "<p class='modifier'><a href='editerannonce.php?id='.$id.'> Modifier </a></p>";
Maintenant que je je l'ai fait, l'url s'affiche avec l'id: http://projetsite/editerannonce.php?id=
Mais sans le numérode l'annonce. Nous tombons toujours sur la page: ' id manquant'
Donc, là où tu génères ton lien .. ta variable $id est vide ...
Comme on ne sait rien du code de cette page .. ni d'où vient ta variable $anounce .. impossible de te dire où se situe l'erreur...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionprofilannonce.php. Il s'agit des annonces que le membre a publié et qui permet de cliquer sur modifier :
<?php
$session = intval($_SESSION['id']);
//On récupère le nombre d'enregistrements
$count= "SELECT COUNT(id) AS cpt FROM annonces
WHERE id_membre= $session";
$stmt= $bdd->prepare($count);
$stmt->execute();
$tstmt=$stmt->fetchAll();
//Pagination
$page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
$nbr_elements_par_page=3;
$nbre_de_pages=ceil($tstmt[0]["cpt"]/$nbr_elements_par_page);
$debut=($page-1)*$nbr_elements_par_page;
$anouncement= afficherAnnonce();
foreach ($anouncement as $anounce) {
$id= $anounce['id'];
$images = !empty($anounce['images']) ? $anounce['images'] : ['/no_image.png']; // array
if (!empty($images)) {
//boucle sur les images
echo'<div class="container">';
echo ' <div class="slider" >';
foreach ($images as $img) {
echo '<img class ="active" style="width:240px; height:170px;" src="' . $img . '">';
}
echo "</div>"; // fin div slider .
}
echo '<div class= "informations">';
echo '<a class="maquette" href="single.php?id='.$id.'" > ';
echo "<p class='title'>" . $anounce['titre'] . "</p>";
echo "<p class='category'>" . $anounce['CATEGORIE'] . "</p>";
echo "<p class='price'>" . $anounce['prix'] . "</p>";
echo "<p class='date'>" . $anounce['created_date'] . "</p>";
echo "<p class='city'> <i class='fa fa-map-marker' style='font-size:15px'></i>" . $anounce['VILLE'] . "</p>";
echo'</a>';
echo "<p class='modifier'><a href='editerannonce.php?id='.$id.'> Modifier </a></p>";
echo "<p class='modifier'> Supprimer</p>";
echo"</div>"; //fin div informations
echo "</div>"; // fin div container
}
echo"<div class='pagination'>";
for($i=1;$i<=$nbre_de_pages;$i++){
echo "<a class='paginationlien' href='?page=$i'>$i</a>" ;
}
echo"</div>"; //fin div pagination
?>
La page editerannonce.php, avec le formulaire à modifier:
<?php
session_start();
include "cnx.php";
include 'langues/fb.php';
include "commandes.php";
if(isset($_SESSION['id'])) {
$id_membre= $_SESSION['id'];
$idannonce = !empty($_GET['id']) ? $_GET['id'] : NULL;
if(! $idannonce ){
echo " ID MANQUANT ! " ;
exit;
}
$reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= ?");
$reqannonce->execute(array($idannonce));
$annonceinfo = $reqannonce->fetch();
//$idannonce = $annonceinfo['id'] ; // .. INUTILE .. Vu que tu connais l'id .. c'est celui que tu lui passes dans l'url ..
var_dump($annonceinfo);
var_dump($idannonce);
$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 = :idannonce");
$update->execute(array(
':id_categorie' => $newcategorie,
':id_ville' => $newville,
':titre' => $newtitre,
':description' => $newdescription,
':prix' => $newprix,
':id' => $idannonce));
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 = :idannonce");
$update->execute(array(
':id_annonce' => $idannonce,
':filepath' => $location));
header('Location: profilannonce.php?id='.$id_membre.'');
}
$villesm= getVilles();
?>
<html>
<head>
<meta charset="utf-8">
</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 );
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']
if( empty($sous_categories) )
{
echo " <option value='".$C['id']."'>".$C['nom']."</option>"."\n";
}
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' value='Mettre à jour' /> <br><br>
</form>
</ul>
</div>
</div>
</div>
<?php } ?>
J'ai modifié le code:
if(isset($_SESSION['id'])) {
$id_membre= $_SESSION['id'];
$idannonce = !empty($_GET['id']) ? $_GET['id'] : NULL;
if(! $idannonce ){
echo " ID MANQUANT ! " ;
exit;
}
$reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= ?");
$reqannonce->execute(array($idannonce));
$annonceinfo = $reqannonce->fetch();
//$idannonce = $annonceinfo['id'] ; // .. INUTILE .. Vu que tu connais l'id .. c'est celui que tu lui passes dans l'url ..
var_dump($annonceinfo);
var_dump($idannonce);
$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 = :newcategorie, id_ville = :newville, titre = :titre, description = :newdescription, prix=:newprix WHERE id = :idannonce");
$update->execute(array(
':id_categorie' => $newcategorie,
':id_ville' => $newville,
':titre' => $newtitre,
':description' => $newdescription,
':prix' => $newprix,
':idannonce'=> $idannonce));
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 = :idannonce");
$update->execute(array(
':id_annonce' => $idannonce,
':filepath' => $location));
header('Location: profilannonce.php?id='.$id_membre.'');
}
Il s'agit de cette ligne:
':filepath' => $location));
//Les images
$newimg5=($_FILES['newimg5']);
$update = $bdd->prepare("UPDATE images_annonces SET filepath = :location WHERE id_annonce = :idannonce");
$update->execute(array(
':id_annonce' => $idannonce,
':location' => $location));
header('Location: profilannonce.php?id='.$id_membre.'');
}
Et j'ai la même erreur pour les annonces
':idannonce'=> $idannonce));
Et Pourtant c'est $id annonce.
':filepath' => $location));
Il fallait dans les 2 requêtes que je fasse WHERE id= $idannonce, au lieu de id=?
if(isset($_SESSION['id'])) {
$id_membre= $_SESSION['id'];
$idannonce = !empty($_GET['id']) ? $_GET['id'] : NULL;
$reqannonce = $bdd->prepare(" SELECT * FROM annonces WHERE id= $idannonce");
$reqannonce->execute(array($idannonce));
$annonceinfo = $reqannonce->fetch();
var_dump($annonceinfo);
var_dump($idannonce);
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= $idannonce");
$reqimage->execute(array($idannonce));
$imageinfo = $reqannonce->fetch(PDO::FETCH_GROUP);
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= $idannonce");
$reqimage->execute(array($idannonce));
$imageinfo = $reqannonce->fetch(PDO::FETCH_GROUP);
Et pour la modifié c'est:
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 = :idannonce");
$update->execute(array(
':id_annonce' => $idannonce,
':location' => $location));
header('Location: profilannonce.php?id='.$id_membre.'');
}
Je ne vois pas ce que tu veux dire. Peux-tu être plus précis?
si j'étais toi, je repartirais du #13, et répondrais à la question posée.
Tu as choisi de ne pas tenir compte du #13, et, en #14, de partir sur autre chose, qui ne marchait pas mieux.
Tu veux progresser avec nous, ou tu veux que nous te regardions courir dans tous les sens?
Pourquoi poser des questions et ignorer les réponses?
Ceci est faux
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= $idannonce");
$reqimage->execute(array($idannonce));
Ceci est correct
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= ?");
$reqimage->execute(array($idannonce));
Ceci est également correct
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= :toto"); // :toto est une variable nommée
$reqimage->execute(array(':toto'=>$idannonce)); // dans le exécute on associe la variable nommée avec la valeur qu'elle doit prendre.
$reqimage = $bdd->prepare(" SELECT * FROM images_annonces WHERE id_annonce= ?");
$reqimage->execute(array($idannonce));
$imageinfo = $reqannonce->fetchAll();
var_dump($imageinfo);
Et l'erreur mentionnée précedemment est la même, lorsque le formulaire est soumis
//Les images
$newimg5=($_FILES['newimg5']);
$update = $bdd->prepare("UPDATE images_annonces SET filepath = :location WHERE id_annonce = :idannonce");
$update->execute(array(
':id_annonce' => $idannonce,
':location' => $location));
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 = ? WHERE id_annonce = ?");
$update->execute(array(array($newimg1, $newimg2, $newimg3, $newimg4, $newimg5), $idannonce));
header('Location: profilannonce.php?id='.$id_membre.'');
}
//Les images
if(isset($_FILES['newimg1']['name']) AND isset($_FILES['newimg2']['name']) AND isset($_FILES['newimg3']['name']) AND isset($_FILES['newimg4']['name'])
AND isset($_FILES['newimg5']['name'])){
$location= "pictures/";
$size1=$_FILES['newimg1']['size'];
$temp1=$_Files['newimg1']['tmp_name'];
$type1=$_Files['newimg1']['type'];
$newimg1 = ($_FILES['newimg1']['name']);
$size2=$_FILES['newimg2']['size'];
$temp2=$_Files['newimg2']['tmp_name'];
$type2=$_Files['newimg2']['type'];
$newimg2 = ($_FILES['newimg2']['name']);
$size3=$_FILES['newimg3']['size'];
$temp3=$_Files['newimg3']['tmp_name'];
$type3=$_Files['newimg3']['type'];
$newimg3 = ($_FILES['newimg3']['name']);
$size4=$_FILES['newimg4']['size'];
$temp4=$_Files['newimg4']['tmp_name'];
$type4=$_Files['newimg4']['type'];
$newimg4 = $_FILES['newimg4']['name'];
$size5=$_FILES['newimg5']['size'];
$temp5=$_Files['newimg5']['tmp_name'];
$type5=$_Files['newimg5']['type'];
$newimg5 = ($_FILES['newimg5']['name']);
//On efface la photo choisie
unlink("img1/$location");
unlink("img2/$location");
unlink("img3/$location");
unlink("img4/$location");
unlink("img5/$location");
//nouvelle image
move_uploaded_file($temp1, "img1/$newimg1");
move_uploaded_file($temp2, "img1/$newimg2");
move_uploaded_file($temp3, "img1/$newimg3");
move_uploaded_file($temp4, "img1/$newimg4");
move_uploaded_file($temp5, "img1/$newimg5");
}
else{
$newimg1=$location;
$newimg2=$location;
$newimg3=$location;
$newimg4=$location;
$newimg5=$location;
}
$update = $bdd->prepare("UPDATE images_annonces SET filepath = ? WHERE id_annonce = ?");
$update->execute(array(array($newimg1, $newimg2, $newimg3, $newimg4, $newimg5), $idannonce));
header('Location: profilannonce.php?id='.$id_membre.'');
unlink("img1/$location");
unlink("img2/$location");
unlink("img3/$location");
unlink("img4/$location");
unlink("img5/$location");
Sérieux ? Tu ne serais pas un peu dyslexique ?
Puis...
move_uploaded_file($temp1, "img1/$newimg1"); move_uploaded_file($temp2, "img1/$newimg2"); move_uploaded_file($temp3, "img1/$newimg3"); move_uploaded_file($temp4, "img1/$newimg4"); move_uploaded_file($temp5, "img1/$newimg5");
Sachant qu'à l'origine, tes images se trouvaient sans le dossier "pictures"
$location= "pictures/";
comment peux tu les mettre désormais chacune dans un dossier différent .. img1 ... img2 ... ??
Et une fois que tu les as uploadé sur le serveur... à quel momment fais tu l'insertion en bdd ?? ( une requête sql INSERT ... ( pour CHAQUE image) ??
Et enfin...
Si il n'y a pas d'images à uploader sur le serveur.... il n'y a pas d'update à faire !!!!!
Donc tu peux virer tout ce qu'il y a dans ton else ( qui erst totalement faux de toutes façons... mais je ne vais pas essayer de t'indiquer les erreurs tellement il y en a ! )
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 updateNewPhoto($idannonce,$photo){
global $bdd;
$sql= "UPDATE images_annonces SET (id_annonce,filepath) VALUES(?,?)";
$datas= array($idannonce,$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);
}
}
//On modifie l'annonce
function updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix){
global $bdd;
$sql= "UPDATE annonces SET (categorie,ville,titre,description,prix) VALUES(?,?,?,?,?) WHERE
id=$idannonce";
$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);
return $bdd->LastInsertId();
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
return false;
}
}
$location= "pictures/";
if(isset($_SESSION['id']) && !empty($_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:
$idannonce = updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix);
if(!empty($idannonce)){
saveNewPhoto($idannonce,$newimg1,$location);
saveNewPhoto($idannonce,$newimg2,$location);
saveNewPhoto($idannonce,$newimg3,$location);
saveNewPhoto($idannonce,$newimg4,$location);
saveNewPhoto($idannonce,$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é !";
}
Bien qu'on puisse aisément en deviner au moins certaines...
Pour commencer ..
$sql= "UPDATE images_annonces SET (id_annonce,filepath) VALUES(?,?)"; $datas= array($idannonce,$photo);
Sachant que dans ta table images_annonces tu peux avoir plusieurs images pour une annonce... comment sais-tu quelle image tu veux mettre à jour ??
Comme je te l'ai déjà dit .. pour ce genre de choses il est préférable de supprimer toutes les images de ton annonce puis insérer les nouvelles photos dans la bdd.
Ensuite... une erreur liée, encore, à ta mauvaise compréhension des variables dans les requêtes sql et le execute de PDO ..
Donc:
$sql= "UPDATE annonces SET (categorie,ville,titre,description,prix) VALUES(?,?,?,?,?) WHERE
id=$idannonce";
$datas= array($newcategorie,$newville,$newtitre,$newdescription,$newprix, $idannonce);
Tu as cinq points d'interrogation dans la requête SQL ... mais tu envoies 6 variables dans le execute.
Pour le coup .. c'est dans ta requête SQL que tu as oublié de remplacer une variable par un "?" ( le $idannonce qui ne devrait pas se trouver là !! )
Donc à corriger par
$sql= "UPDATE annonces SET (categorie,ville,titre,description,prix) VALUES(?,?,?,?,?) WHERE id=? ";
Une autre erreur concerne le RETURN de ta fonction updateAnnonce
La méthode LastInsertId() retourne le dernier ID créé ... lors d'une requête INSERT ... pas dans un UPDATE !
je te rappelle au passage que !empty fais déjà un isset .. donc pas besoin des deux
if(isset($_SESSION['id']) && !empty($_SESSION['id'])){
A corriger par
if( !empty($_SESSION['id'])){
Et pour en revenir à ta question de départ,
Il te manque donc une fonction qui supprimera toutes les photos d'une annonce que tu devras exécuter (une seule fois )
avant de faire tes saveNewPhoto
Les erreurs que j'ai lorsque le formulaire est soumis, sont les indefined index newcategorie, photo
et: Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 11 [1] => ) Erreur ! SQLSTATE[HY093]: Invalid paramete
J'ai modifié
//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);
function deleteOldPhoto($idannonce,$photo){
global $bdd;
$sql= "DELETE from images_annonces (filepath) VALUES(?) where id_annonce=$idannonce";
$datas= array($idannonce,$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 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 updateNewPhoto($idannonce,$photo){
global $bdd;
$sql= "UPDATE images_annonces SET (id_annonce,filepath) VALUES(?,?)";
$datas= array($idannonce,$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);
}
}
//On modifie l'annonce
function updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix){
global $bdd;
$sql= "UPDATE annonces SET (categorie,ville,titre,description,prix) VALUES(?,?,?,?,?) WHERE
id=? ";
$datas= array($newcategorie,$newville,$newtitre,$newdescription,$newprix);
//Execution de la requete
try{ //requete pour la première tabels
$requete = $bdd->prepare($sql);
$requete->execute($datas);
}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,$photo);
$modifierannonce= updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix);
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é !";
}
}
<< Comme je te l'ai déjà dit .. pour ce genre de choses il est préférable de supprimer toutes les images de ton annonce puis insérer les nouvelles photos dans la bdd>>
Faut-il donc ajouter une condition dans la requête Update?
Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 11 [1] => ) Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] =
Pour la fonction qui supprime l'ancienne photo, j'ai fait ça
function deleteOldPhoto($idannonce,$file,$location){
if(empty($file)){
echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
var_dump($_FILES);
return false;
}
$photo = $file['name'];
$photo_tmp = $file['tmp_name'];
if(unlink($photo_tmp,$location.$photo)){
return updateNewPhoto($idannonce,$location.$photo);
}
}
Sinon, peux tu donner un exemple? Le plus dûr c'est les photos....
Ensuite.. dans le message d'erreur complet... il y a le numéro de ligne concerné... ça serait bien de le donner !
Et puis.. comment es tu passé du code :
function deleteOldPhoto($idannonce,$photo){
global $bdd;
$sql= "DELETE from images_annonces (filepath) VALUES(?) where id_annonce=$idannonce";
$datas= array($idannonce,$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);
}
}
qui est quasiment bon .. hormis une erreur dans la requête SQL elle même ... à ceci
function deleteOldPhoto($idannonce,$file,$location){
if(empty($file)){
echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
var_dump($_FILES);
return false;
}
$photo = $file['name'];
$photo_tmp = $file['tmp_name'];
if(unlink($photo_tmp,$location.$photo)){
return updateNewPhoto($idannonce,$location.$photo);
}
}
qui ne fait plus de delete en bdd ... et qui, tu persistes...., fais appel à une fonction UPDATE qu'il faut oublier pour les photos !!!
En gros
/**
* 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) ;
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) ;
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);
//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);
}
Ne te reste plus qu'à INSERT les photos dans la table (après les avoir "move_upload" sur le serveur... ( tu as déjà une fonction pour ça il me semble.. celle que tu as utilisé pour la création d'annonce )
//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) ;
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) ;
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);
//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) ;
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){
global $bdd;
$sql= "UPDATE annonces SET (categorie,ville,titre,description,prix) VALUES(?,?,?,?,?) WHERE
id=? ";
$datas= array($newcategorie,$newville,$newtitre,$newdescription,$newprix);
//Execution de la requete
try{ //requete pour la première tabels
$requete = $bdd->prepare($sql);
$requete->execute($datas);
}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/");
$modifierannonce= updateAnnonce($newcategorie,$newville,$newtitre,$newdescription,$newprix);
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é !";
}
}
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '(id_categorie,id_ville,titre,description,prix) VALUES('301','1','Je vends un té' à la ligne 1 Les datas : Array ( [0] => 301 [1] => 1 [2] => Je vends un téléphone modifié [3] => [4] => 0 [5] => 11 ) Erreur : Aucun ID n'a été modifié !
J'ai bien modifié, et je n'arrive pas à voir l'erreur:
//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) VALUES(?,?,?,?,?) 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);
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
return false;
}
}
- 1
- 2