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

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Relis ton code... Tu verras que tu as utilisé un underscore pour certaines variables et pour d'autres non..

0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Jordane,
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.'');
   
          }
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu utilises le $_GET .. donc tu as passé ta variable dans l'URL ...
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);
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
L'url qui s'affiche toujours est celui-ci: http://projetsite/editerannonce.php. Pas d'id dedans.
Même en essayant ton code, c'est ID MANQUANT qui s'affiche avec le même url.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Si la variable ne se trouve pas dans l' url forcément elle ne sera pas dans le code...
Tu y arrives comment sur cette page ??
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Tu as raison, il fallait préciser dans l'autre page l'id.
$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'
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Si l'url apparait SANS le numéro d'annonce... c'est normal que sur la page d'après tu aies le message id manquant...... cqfd !

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...
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  
 
Le code de la page
profilannonce.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 } ?>
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu as un souci de concaténation....
Tu mélanges les doubles et simples quotes....
Donc.. à la place de
echo "<p class='modifier'><a href='editerannonce.php?id='.$id.'> Modifier </a></p>";

il faut
echo "<p class='modifier'><a href='editerannonce.php?id=".$id."'> Modifier </a></p>";
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
C'était bien ça, l'id s'affiche dans l'url et donc le vardump affiche bien les colonnes de la table annonces, mais des erreurs s'affichent pour les images. Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in .
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));
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Forcément.
Tu n'as pas utilisé le même nom de variable dans ta requête et dans les datas que tu executes
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Là, je l'ai fait:

 //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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Je ne vais pas te donner la réponse toute faite.... j'aimerai que tu finisses par être capable de relire ton code et trouver cette erreur ( des plus basiques..) par toi même.
On va donc y aller par étape .

Première étape .. quelle est la requête SQL dans le code que tu nous montres
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Ok, ça été corrigé pour les annonces et les images. L'erreur est la même seulement pour les images à la ligne:
':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);
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Non
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
La requête pour les images est celle là:
    $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?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
bonjour,
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?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Si tu passes des variable PHP dans la méthode exécute du pdo.... Il faut que dans ta requête tu aies soit un point d'interrogation soit une variable nommée.

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.

0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Ok, j'ai compris, et j'ai changé ça dans les 2 requêtes. Mais pour le vardump, ça me retourne empty pour cette requête:
 $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
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
L'erreur ne se situe pas sur cette requête.. mais sur ce bout de code là
//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.'');
   
          }
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai essayé ça en ajoutant les variables newimg dans un tableau, et pas de résultat:
       //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.'');
   
          }
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu ne peux pas updater les images comme ça...

Pour une annonce, tu dois supprimer les images qui y sont rattachées, puis insérer les nouvelles.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Pense à les supprimer dans la base de données mais également physiquement sur le serveur
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Là j'ai modifié, mais toutes les images disparaissent lorsqu'on clique sur modifier:
 //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.'');
   
          



0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 ! )
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai fait ça avec les fonctions, mais j'ai des erreurs :
 

 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é !";
          }
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Si tu as des erreurs .... il faut nous les donner ....

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
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Je pense que j'y suis presque.

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?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ta requete SQL de DELETE est fausse
De plus, il manque les UNLINK sur les fichiers pour les supprimer "physiqyement" du serveur.

Et pour les images ... il ne faut pas une requête UPDATE ....... mais une requête INSERT ( ça fait 20 fois que je te le dis... !! )
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai qu'une erreur à la soumission du formulaire: Undefined variable: photo in C:\wamp64\www\Projetsite
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....
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Déjà... le message d'erreur ne correspond pas au code montré !
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 )
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Pour l'erreur, il y a seulement celle là. il n'y a pas de ligne dans le message précisé. Voici le message complet et le suivant:Erreur ! SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Les datas : Array ( [0] => 301 [1] => 1 [2] => Je vends un téléphone modifié [3] => [4] => 0 ) Erreur : Aucun ID n'a été 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);





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

        }
        


0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ligne 125... Où est passée la variable $idannonce qui se trouvait dans le exécute ????
Ça fait 50 fois que je t'explique.... À un moment il va falloir que tu prennes 30 secondes pour apprendre à relire ton code et t'assurer que tu as bien suivi ce que je t'ai expliqué...
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai relu mon code, et corrigé. Cette erreur s'affiche après la soumission du formulaire:
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;
        }
      }
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ta requête SQL d'UPDATE est fausse...
un UPDATE ça s'écrit
UPDATE  matable
  SET  monchamp = ?
        , autrechamp = ?
WHERE id = ?


Ce n'est pas ce que tu as fait..
0
max30_3775 Messages postés 178 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai plus d'erreur, sauf que les images n'apparaissent pas. L'annonce est modifiée mais pas les nouvelles images." C'est l'image par défaut qui apparait.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Et bien...
Les images sont elles bien présentes dans le dossier du site ?
Qu'est ce qui s'est enregistré dans la bdd ?
0