Je mets actuellement en place une page sur laquelle s'affiche une liste de miniatures. Je charge celles ci au préalable en base de données, via un formulaire. J'y stock uniquement une balise <img> dans laquelle j'ai dynamiser l'attribut "src". Ces images sont affichées à la fois sur un site (front) et sur ma page qui sert de page d'administration. Jusqu'ici, tout vas bien, les images s'affichent bien en front, et ma liste, en backoffice, se met bien à jour à chaque fois que j'ajoute une nouvelle image.
J'aimerai maintenant pouvoir ajouter un bouton ou un lien, a chaque miniature, qui me permettrait d'effacer une image.
Je vous colle ici le script que j'ai tant bien que mal tenter de développer avec mes pauvres connaissance en PHP et les infos que j'ai pu trouver sur le net :
<?php
// si on demande la suppression, on lance le script avant l'affichage
if(isset($_GET['del_img']) && (!empty($_GET['del_img']))){
include("del_img.php");
}
?>
<?php
// on affiche les miniatures
$sql = 'SELECT id,tb_path FROM img_slider WHERE page="' . $cp . '" ORDER BY id'; // $cp est la variable des mes différentes page, récupérée via $_GET['page']
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
?>
<div class="thumbs_lst">
<?php
while($result = mysql_fetch_object($req)){
$img_id = ($result->id);
echo
"<ul>"
."<li>"
.$img_id
.($result->tb_path)
."<a href=\"backoffice.php?page=$cp&del_img=$img_id\">Supprimer</a>"
."</li>"
."</ul>";
}
?>
Ma démarche était la suivante : Récupérer l'id, en base de données, de mon image (pour savoir quelle image supprimer évidement // initialisation des variables
$cp = $_GET['page'];
$sql = 'SELECT id FROM img_slider WHERE page="' . $cp . '"';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($result = mysql_fetch_object($req)){
$img_id = ($result->id);
}
// lancement de la requête pour effacer
$sql ='DELETE from img_slider WHERE id="'.$img_id.'" AND page="'.$cp.'"';
echo 'nombre de lignes affectées par la suppression : '.mysql_affected_rows().' enregistrements';
// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
Première chose : Je me trouve dans l'obligation de "redéclarer" mes variables $cp et $img_id. Je pense que ce n'est pas la meilleure des façons de faire, mais pour l'instant, je n'ai pas trouvé d'autre solution, et cela permet, provisoirement, au script de fonctionner.Ensuite, la suppression de mes entrées en base, car c'est ce qui m'intéresse
Le script efface bien mes entrées, mais pas celles que je veux !!!
supposons que j'ai 3 images d'afficher sur ma page, et que celles ci ont comme id : 45, 46, 47
Lorsque je clique sur la première (45), c'est la dernière qui s'efface! et ainsi de suite jusqu'à ce qu'il ne reste plus que celle que je voulais supprimer au départ!
Enfin, l'url.
Lorsque je demande la suppression d'une image, comme expliquer plus haut, je passe une variable dans l'url pour déclancher le script. mon url devient donc un truc du genre : backoffice.php?page=restaurant&del_img="ID de mon image"
Ce qui me gène, et ce qui je pense peut être une des causes de mon problème, et que une fois une suppression effectuée, cette url reste. et en cas de rafraichissement, relance l'action sur une image qui, finalement, ne devrait plus exister. Comment revenir à l'url de "base", c'est à dire " backoffice.php?page=restaurant" au lieu de " backoffice.php?page=restaurant&del_img="ID de mon image""
Donc, pour résumer
- Le choix d'inclure le fichier de traitement comme je le fait est il judicieux? existe t'il une façon de procéder qui serait plus...optimale?
- Que me manque t'il pour que le script supprime bien l'image demandée. Je pense ne pas être loin de but, puisque une image est tout de même effacer. Problème de ma requête? dans ma base?
- Quelle méthode pour retrouver l'url de ma page départ? Je pensais à une redirection, mais étant donné que mon script est inclue, donc dans la même page, cela n'aurait aucune sens.
Je reconnais qu'il y a pas mal de chose, mais si vous pouviez juste un peu m'éclairer, me dire là ou ça peut coincer, ça serait tip top comme ça
Merci d'avance