Fonction delete qui ne marche pas

Résolu/Fermé
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - 27 févr. 2022 à 06:09
yg_be Messages postés 22920 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 juillet 2024 - 27 févr. 2022 à 13:41
Bonjour, je sollicite votre aide car je cherche à effacer une annonce avec ses images (de la bdd et du serveur).
En cliquant sur supprimer, rien ne se passe.
Voici l'intégralité du code:
<?php 

session_start();
include "../cnx.php";
include "../header.php";



function deleteannonce($idannonce){
  global $bdd;
$sql= "DELETE A, I
From annonces A
LEFT JOIN I images_annonces ON I.id_annonce=A.id
WHERE A.id= ".$idannonce."
";

$req = $bdd->prepare($sql);
$req->execute($idannonce);

return $req;
}


//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);


  try{

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



if(isset($_POST['supprimer'])){

  $idannonce= ($_GET["id"]);
  $suprimer=deleteannonce($idannonce);
  deleteOldPhoto($idannonce,$location="../pictures/");



header("Location: /membre/profilannonce.php");


}

?>


<!DOCTYPE html>
<html lang="fr">
<head>
<style>
        .alert-warning{
            margin-top: 100px;
        }
        </style>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <title>Document</title>
</head>
<body>
    
<div class="alert alert-warning">
    <strong>Attention!</strong> Vous êtes sur le point de supprimer cette annonce. Cliquez sur supprimer pour continuer: 
    <input type="submit" name="supprimer" value="supprimer">

  </div>

</body>

</html>

Voici l'url de la page: http://projetsite/membre/supprimerannonce.php?id=5
Auriez-vous une solution?
A voir également:

7 réponses

jordane45 Messages postés 38217 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 juillet 2024 4 680
27 févr. 2022 à 09:15
Bonjour
Commence par mettre ta requête dans un bloc try/catch
Et retire la redirection...
Regarde ce que ça t'affiche..
Ah... Et montre nous le code html quu va avec ton bouton de suppression
1
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 10:00
Bonjour Jordane, c'est fait le bloc try/catch a été ajouté dans la requête, et la redirection enlevée:
<?php 

session_start();
include "../cnx.php";
include "../header.php";



function deleteannonce($idannonce){
  global $bdd;
$sql= "DELETE A, I
From annonces A
LEFT JOIN I images_annonces ON I.id_annonce=A.id
WHERE A.id= ".$idannonce."
";
try{
$req = $bdd->prepare($sql);
$req->execute($idannonce);

}catch(Exception $e){
  echo " Erreur ! ".$e->getMessage();
  echo " Les datas : " ;
  print_r($req);

}

return $req;
}


//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);


  try{

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



if(isset($_POST['supprimer'])){

  $idannonce= ($_GET["id"]);
  $suprimer=deleteannonce($idannonce);
  deleteOldPhoto($idannonce,$location="../pictures/");



}

?>


<!DOCTYPE html>
<html lang="fr">
<head>
<style>
        .alert-warning{
            margin-top: 100px;
        }
        </style>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <title>Document</title>
</head>
<body>
    
<div class="alert alert-warning">
    <strong>Attention!</strong> Vous êtes sur le point de supprimer cette annonce. Cliquez sur valider pour continuer: 
    <input type="submit" name="supprimer" value="supprimer">

  </div>

</body>

</html>


Le code html:



  <style>
      /*/photo header*/

      html,
body {
  margin: 0;
  padding: 0;
}
/* ------------------------------- */
/* MENU */
#menu {
  position: relative;
  width: 100%;
  
}
#menu ul,
#menu li,
#menu li a {
  position: relative;
  margin: 0;
  padding: 0;
  box-sizing:border-box;
  list-style: none;
  z-index:1;
}
#menu ul {
  width: 100%;
  background:#FFA500;/*orange*/
  font-weight: bold;
}
#menu ul li a {
  display: block;
  color:#873600;/*dark orange*/
  padding: 20px 30px;
  position: relative;
  text-decoration: none;
  height:100%;
}
/* --------------- */
/* MENU : niveau 1 */
#menu nav > ul > li > a {
 color: white;
}
/* --------------- */
/* MENU : niveau 2 */
#menu ul ul {
  color:white;
  background:#f4d03f;/*jaune-orange*/
}
#menu ul ul li > a {
  padding: 15px 30px;
  font-size: 10px bold;
  color:white;/*dark orange*/
}
 
/* --------------- */
/* HOVER : afficher/masquer les SOUS-MENUS*/
#menu ul li > ul {
  display: none; /*on masque le SOUS-MENU*/
}
#menu ul li:hover > ul {
  display: block; /*on affiche le SOUS-MENU*/
}
#menu nav > ul > li.active > a, /* MENU : niveau 1 ACTIF */
#menu ul li:hover > a {
  color:#21618c;/*bleu*/
  background: silver;
}
#menu nav > ul > li.active > a:before, /* MENU : niveau 1 ACTIF */
#menu nav > ul > li:hover > a:before {
  position:absolute;
  content:'';
  display:block;
  top:0; left:0;
  width:100%;
  height:5px;
  background:#f4d03f;/*jaune-orange*/
}
 
/* ---------- responsive  --------- */
/* DESKTOP : menu horizontal */
@media screen and (min-width: 769px) {
  #menu nav > ul {
    display: -webkit-flex;
    display: flex;
  }
  /*  niveau 1 */
  #menu nav > ul > li {
    -webkit-flex: 1 1 1%; /* astuce : 1% pour même largeur */
    flex: 1 1 1%;
  }
  #menu nav > ul > li > a {
  }
  /*  niveau 2  */
  #menu nav > ul ul {
    position: absolute;
    width: 200%;
  }
}
/* ------------------------------- */
/* PHONE : menu vertical */
@media screen and (max-width: 768px) {
  #menu {
    width: 100%;
    margin:0 auto;
    height:7px;
  }
}
/* ------------------------------- */
/* MENU*/
nav input[type=checkbox],
nav label {
  display:none;
}
@media screen and (max-width: 768px) {
  /* input */
  input#menu-mobile {
    position: absolute;
    /*xxleft: -9999em;*/
    opacity:0; /* invisible */
  }
  label[for="menu-mobile"] {
    display: block;
    text-indent: .25em;
    background: #EEE;
    border: 1px solid #CCC;
    margin: 1px;
    cursor: pointer;
    height:48px;
    line-height:48px;
  }
  label[for="menu-mobile"]:before {
    content: "\2630";  
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    width: 1em;
    text-align: center;
    text-indent: 0;
    font-size: 1em;
    font-weight: bold;
    color: #069;
  }
  /* on traite la liste menu */
  #menu-mobile:not(:checked) ~ ul {
    display: none;
    position: absolute;
    left: -1px;
    width: 100%;
    margin: 0;
    padding: 0;
    border: inherit;
    background: #FFF;
  }
  #menu-mobile:checked ~[for="menu-mobile"]:before {
    content: "\2716";
  }
}
.col-sm-6{
flex: 0 0 50%;
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 50%;
    max-width: 50%;
}

.depot {
     color: white;
     text-decoration: none;
     outline: none !important;
}


.submit_bt{
  position: absolute;
  right: 20px;
     font-size: 14pt; 
     color: #ffffff;
     background-color: #69c934;
     border: 0px;
     height: 50px;
     padding: 0px 20px;
     margin-top: 30px;
}

.white-color{
  color: white;
}
 
 .maquette{
   color: black;
 }

.submit_bt a:hover{ color: #000; }

.search_main{ width: 78%; float: right; }




.sousnav{
    display: grid;
    grid-template-columns: 1fr 5fr 5fr 5fr;
    grid-template-rows: 1fr 20fr 20fr;
    grid-template-areas:
        "lo social connect connect"
        "lo social lg search"    ;
    height: 100px;
    margin-top: 45px;
}

.nav-item{
    grid-area: connect;
    display: flex; /* on remet en flex */
    justify-content :flex-end; /* on aligne les items dans flex*/

    height: 30px;
    font-weight:bold;
margin-right:10px;

    
  
}

.nav-item i{
  padding-left:15px;
}

.search_main{
    grid-area: search;  
    display: flex; /* on remet en flex */
    justify-content :flex-end; /* on aligne les items dans flex*/
    padding-right: 20px;  
    margin-top:10px;
}

.socialmedia{
    grid-area: social;
    display: flex; /* on remet en flex */
    justify-content: center;
    width: 110px;
    height: 30px;


    padding-left:10px;
 
}

.socialmedia i{
    padding-right:10px;
}

.nav-link{
 color:black;
 text-decoration: none;
  outline: none !important;
  
}
.logo{
  grid-area: lo;
  background: url('/lewedli.jpg');
  background-repeat:no-repeat;
  width: 140px;
  height: 125px;
  display:flex;
    align-items: start;
    margin-bottom: 20px;
    
}



.LatinLanguage{
    grid-area: lg;
    display: flex; /* on remet en flex */
    justify-content: center;
height:30px;
    width: 180px;
    margin-top: 10px;

}

.langues{
  color: blue;
  font-weight: bold;
  margin-left:5px;
  font-size: 12px;
  text-decoration: none;
  outline: none !important;
}





/*Bouton*/

/*.styled {
  border: 0;
  line-height: 2.5;
  padding: 0 20px;
  font-size: 1rem;
  text-align: center;
  color: #fff;
  text-shadow: 1px 1px 1px #000;
  border-radius: 10px;
  background-color: #FFA500;
  background-image: linear-gradient(to top left,
                                    rgba(0, 0, 0, .2),
                                    rgba(0, 0, 0, .2) 30%,
                                    rgba(0, 0, 0, 0));
  box-shadow: inset 2px 2px 3px rgba(255, 255, 255, .6),
              inset -2px -2px 3px rgba(0, 0, 0, .6);
}

.styled:hover {
  background-color: #008000;
}

.styled:active {
  box-shadow: inset -2px -2px 3px rgba(255, 255, 255, .6),
              inset 2px 2px 3px rgba(0, 0, 0, .6);
}

.icons{
text-align: right;
vertical-align: 30px;
padding: 0px;
margin-right: 20px
}

.boutons{
text-align: right;
vertical-align: 50px;
padding: 20px;
}*/


      </style>

<header>
<div id= "containermenu">
<div id= "rowmenu">

<div id="menu">
<nav>
  <label for="menu-mobile" class="menu-mobile">Menu</label>
  <input type="checkbox" id="menu-mobile" role="button">

  <ul> <li class='menu'><a href="/index.php">Accueil</a>

 <li class='menu'><a href='/principales/affichage.php?id=1'>Immobilier</a><ul><li class='submenu'><a href='/principales/affichage.php?id=101'>Vente de Maisons </a></li><li class='submenu'><a href='/principales/affichage.php?id=102'>Location de Maison </a></li><li class='submenu'><a href='/principales/affichage.php?id=103'>Vente Appartement </a></li><li class='submenu'><a href='/principales/affichage.php?id=104'>Location Appartement </a></li><li class='submenu'><a href='/principales/affichage.php?id=105'>Bureau </a></li><li class='submenu'><a href='/principales/affichage.php?id=106'>Terrain </a></li></ul></li><li class='menu'><a href='/principales/affichage.php?id=2'>Véhicules</a><ul><li class='submenu'><a href='/principales/affichage.php?id=201'>Voitures </a></li><li class='submenu'><a href='/principales/affichage.php?id=202'>Motos </a></li><li class='submenu'><a href='/principales/affichage.php?id=203'>Pièces et Accessoires pour Véhicules </a></li><li class='submenu'><a href='/principales/affichage.php?id=204'>Vélos </a></li><li class='submenu'><a href='/principales/affichage.php?id=205'>Véhicules Professionnels </a></li></ul></li><li class='menu'><a href='/principales/affichage.php?id=3'>Multimédia</a><ul><li class='submenu'><a href='/principales/affichage.php?id=301'>Téléphones </a></li><li class='submenu'><a href='/principales/affichage.php?id=302'>Télévisions </a></li><li class='submenu'><a href='/principales/affichage.php?id=303'>Ordinateurs Portables </a></li><li class='submenu'><a href='/principales/affichage.php?id=304'>Accessoires Informatiques </a></li><li class='submenu'><a href='/principales/affichage.php?id=305'>Ordinateurs de Bureaux </a></li></ul></li><li class='menu'><a href='/principales/affichage.php?id=4'>Cours</a><ul><li class='submenu'><a href='/principales/affichage.php?id=401'>Cours Individuels </a></li><li class='submenu'><a href='/principales/affichage.php?id=402'>Cours Collectifs </a></li></ul></li><li class='menu'><a href='/principales/affichage.php?id=5'>Agriculture</a><ul><li class='submenu'><a href='/principales/affichage.php?id=501'>Vente de terrain agricole </a></li><li class='submenu'><a href='/principales/affichage.php?id=502'>Location de terrain agricole </a></li><li class='submenu'><a href='/principales/affichage.php?id=503'>Vente de tracteurs </a></li><li class='submenu'><a href='/principales/affichage.php?id=504'>Location de tracteurs </a></li></ul></li><li class='menu'><a href='/principales/affichage.php?id=20'>Autres...</a><ul></ul></li></ul>
</nav>  
</div>




<div class= "sousnav">


 
        <div class="nav-item">
                <a class="nav-link" href="/membre/profil.php">
                  <i class="fa fa-user" aria-hidden="true"></i>
                  <span>
                  mol                  </span>
                </a>
        
                <a class="nav-link" href="/membre/deconnexion.php">
                  <i class="fa fa-user" aria-hidden="true"></i>
                  <span>
                  Déconnexion                  </span>
                </a>
</div>


<div class="search_main">
                    <button class="submit_bt"><a class='depot' href="/principales/formannonce.php"><span class="doctor"><i class='fa fa-plus white-color'></i></span> Déposer une annonce</a></button>
				    </div>



            <div class="socialmedia">
<a href="#"><i class="fab fa-facebook-f "></i></a>
  	 				<a href="#"><i class="fab fa-twitter"></i></a>
  	 				<a href="#"><i class="fab fa-instagram"></i></a>
  	 				<a href="#"><i class="fab fa-linkedin-in"></i></a>

</div>



<div class="logo"></div> 


<div class ="LatinLanguage">


<div class="language">
<i class="fa fa-globe" aria-hidden="true"></i>
<a class= "langues" href="/index.php?lang=fr"> Français </a>
<a class= "langues" href="/index.php?lang=en">English </a>
</div>

</div>



</div>






</header>

<!DOCTYPE html>
<html lang="fr">
<head>
<style>
        .alert-warning{
            margin-top: 100px;
        }
        </style>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <title>Document</title>
</head>
<body>
    
<div class="alert alert-warning">
    <strong>Attention!</strong> Vous êtes sur le point de supprimer cette annonce. Cliquez sur valider pour continuer: 
    <input type="submit" name="supprimer" value="supprimer">

  </div>

</body>

</html>
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 10:01
Rien ne se passe lorsque le bouton est cliqué
0
jordane45 Messages postés 38217 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 juillet 2024 4 680 > max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 10:08
Comment peux tu avoir une balise <!Doctype à la ligne 423 alors que tu as déjà du html avant ?? ( en gros, tes lignes 423 à 439 n'ont rien à faire à cet endroit ! )
En plus ton bouton.. il n'est pas dans un <form> .. donc normal qu'il ne se passe rien !
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 10:35
Tu veux dire qu'il faut un if(isset($_GET['supprimer']) ? Si oui, je l'ai fait. Le bouton est toujours incliquable
0
jordane45 Messages postés 38217 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 juillet 2024 4 680
27 févr. 2022 à 10:43
Non.. je parles des balises form...
A moins que tu ne veuilles faire qu'un lien...
1
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 10:53
D'accord, j'ai ajouté dans un form:
<div class="alert alert-warning">
<form action="" method="POST">
    <strong>Attention!</strong> Vous êtes sur le point de supprimer cette annonce. Cliquez sur supprimer pour continuer: 
  
    <input type="submit" name="supprimer" value="supprimer">
      </form>
  </div>

Le bouton marche, mais il affiche l'erreur suivante:
Warning: PDOStatement::execute() expects parameter 1 to be array, string given in C

Il s'agit du $req execute($idannonce):
function deleteannonce($idannonce){
  global $bdd;
$sql= "DELETE A, I
From annonces A
LEFT JOIN I images_annonces ON I.id_annonce=A.id
WHERE A.id= ".$idannonce."
";
try{
$req = $bdd->prepare($sql);
$req->execute($idannonce);

}catch(Exception $e){
  echo " Erreur ! ".$e->getMessage();
  echo " Les datas : " ;
  print_r($req);

}

return $req;
}
0
yg_be Messages postés 22920 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 juillet 2024 1 481
Modifié le 27 févr. 2022 à 12:22
bonjour,
as-tu compris le message d'erreur?
dans cette même discussion, tu nous as montré un autre code qui utilise execute() et qui fonctionne bien. as-tu comparé les deux?
1

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

Posez votre question
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 12:12
Bonjour yg_be, tu as raison, maintenant ça marche:
function deleteannonce($idannonce){
  global $bdd;
$sql= "DELETE A, I
From annonces A
LEFT JOIN images_annonces I ON I.id_annonce=A.id
WHERE A.id= ".$idannonce."
";
$datas=array($idannonce);
try{
$req = $bdd->prepare($sql);
$req->execute($datas);

}catch(Exception $e){
  echo " Erreur ! ".$e->getMessage();
  echo " Les datas : " ;
  print_r($req);

}

return $req;
}


Merci à vous :)
0
yg_be Messages postés 22920 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 juillet 2024 1 481
27 févr. 2022 à 12:24
...et ta requête DELETE reste très imparfaite: ne vois-tu pas d'autres différence entre les deux?
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
Modifié le 27 févr. 2022 à 12:32
tu veux dire que le return $req doit être dans le try?
try{
$req = $bdd->prepare($sql);
$req->execute($datas);
return $req;
//suite
;
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 12:36
correction:
try{
$req = $bdd->prepare($sql);
$res= $req->execute($datas);
return $res;
//suite...
0
yg_be Messages postés 22920 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 juillet 2024 1 481 > max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 12:44
c'est la requête elle-même qui est mal construite.
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
27 févr. 2022 à 13:17
Mais elle marche, à moins qu'il n'ait des surprises plus tard.
0
yg_be Messages postés 22920 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 juillet 2024 1 481
27 févr. 2022 à 13:41
Elle marche, cependant tu n'as pas correctement construit la requête, tu l'as ajoutée dans le texte de la requête, au lieu de l'ajouter via le execute.
0