Bouton supression image mysql php

Eléphant du PHP | 94 Messages

13 juin 2018, 16:53

Bonjour tous le monde,

J’essaie de supprimer des images que je charge de ma bdd pdo.
mon problème est que quant je veux supprimer une de mes images, ça me supprime toujours la 1er de la liste.
Comment faire pour récupérer l'id de la bonne image sélectionner ?
<div class="panel-body">
	<div class="form-group">
		<div class="row">
		<?php 
		$id_user = $_SESSION['id'];
		
		$reponse13 = $bdd->query("SELECT * FROM `image` WHERE `user_id` = $id_user AND actif = 1 AND actif_droit = 1");
		while ($donnees13 = $reponse13->fetch())
		{
		$path = $donnees13['path'];
		?><?php
		if ($path != '') {
		?>
	<div class="col-lg-3 col-sm-6">
		<div class="thumbnail">
		<div class="thumb">
			<img src="<?php if ($path != '') {
			echo "files_photo/$id_user/image/$path";
			}else {echo 'assets/images/placeholder.jpg';
			} ?>" alt="">
			<div class="caption-overflow">
				<form id="tes" method="POST" action="./production/img_prive/del_img_priver.php"> 
					<span>
						<input type="hidden" name="id_imageperso" value="<?php echo $donnees13['id_imageperso'] ?>"/>
							<a href='#' onclick='document.getElementById("tes").submit()' class="btn border-white text-white btn-flat btn-icon btn-rounded">
								<i class="icon-trash-alt"></i>
							</a>
							<a href="<?php if ($path != '') {echo "files_photo/$id_user/image/$path";
								}else {
								echo 'assets/images/placeholder.jpg';
								} ?>" data-popup="lightbox" class="btn border-white text-white btn-flat btn-icon btn-rounded">
								<i class="icon-plus3"></i>
							</a>
					</span>
				</form>
			</div>
		</div>
		<div class="caption">
		<h6 class="text-semibold no-margin-top"><a href="#" class="text-default"><?php echo $donnees13['titre']; ?></a></h6><br />
		<h6 class="text-semibold no-margin-top"><a href="#" class="text-default"><?php echo $donnees13['id_imageperso']; ?></a></h6>
</div>
		<span>
			<a  href="" data-toggle="modal" data-target="#myModal2134" data-dismiss="modal" class="btn border-black text-black btn-flat btn-icon btn-rounded"><i class="icon-pencil7"></i></a>		
		</span>
	</div>
</div>
<?php 
}else {
}
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8759 Messages

17 juin 2018, 20:45

Salut,

je te conseil une fonction JS simple qui va faire une requête serveur en fournissant l'ID de l'image à supprimer.
Coté serveur un simple delete from image where id = xxx

La signature de la fonction JS

Code : Tout sélectionner

function delateImage(imageID){ // appel "ajax" vers le fichier php de suppression }
le lien html <a href="javascript:deleteImage(<?= $donnee12['imageID'] ?>);">delete</a>


@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10418 Messages

18 juin 2018, 17:33

Salutations !

Ton problème vient du fait que dans la boucle qui affiches tes enregistrements, tu inclus un formulaire qui a toujours le même ID.
<form id="tes" method="POST" action="./production/img_prive/del_img_priver.php"> 
Si tu regardes le code source de la page généré, tu verras qu'il y a donc autant de formulaire dont l'id est "tes" que d'élément affichés (ce qui en passant n'est pas valide d'un point de vue HTML, un id devant être unique dans une page).

Ensuite, dans chacun de tes liens, tu demandes à soumettre le formulaire dont l'id est "tes". Le navigateur étant au fait des bonnes pratiques HTML, va donc soumettre le premier formulaire qu'il trouve avec cet id, puisqu'il sait très bien qu'il ne doit pas / peut pas y en avoir d'autre ... et voilà pourquoi c'est toujours la première image qui est supprimée. Affaire résolue mon cher Wats... Azizss ;)

Tu peux donc corriger soit en renommant l'id à chaque ligne (ainsi que l'appel), soit, et ça sera plus propre et plus facile à lire, suivre les recommandation de Moogli, virer les formulaires et garder un lien qui appel une seule et même fonction javascript en lui passant l'id à supprimer :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...