Fonction delete qui ne marche pas
Résolu
max30_3775
Messages postés
185
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
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:
Voici l'url de la page: http://projetsite/membre/supprimerannonce.php?id=5
Auriez-vous une solution?
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?
7 réponses
-
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
-
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> -
Tu veux dire qu'il faut un if(isset($_GET['supprimer']) ? Si oui, je l'ai fait. Le bouton est toujours incliquable
-
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; } -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 :) -
tu veux dire que le return $req doit être dans le try?
try{ $req = $bdd->prepare($sql); $req->execute($datas); return $req; //suite ; -
Mais elle marche, à moins qu'il n'ait des surprises plus tard.