faire une fonction "supprimer" via une image dans un tableau

Eléphant du PHP | 133 Messages

05 sept. 2011, 15:09

bonjour à tous ,
voila je me tourne vers vous car je rame complétement sur une fonction que j'ai besoin , et comme c'est la première fois que je me retrouve avec ça je bloque totalement , on m'a eclairé sur la direction a prendre mais
je me suis quand meme perdu :)

voici a quoi va ressembler mon tableau a l'affichage
Image

a la base je vais lire un fichier txt avec des url
j'ai donc l'affichage , qui est ok , mais je voudrais pouvoir supprimer ce lien via un bouton "poubelle"
chaque bouton est lié a l'image , je voudrais que d'un simple click le lien soit supprimé du fichier txt et que la page se recharge 1 sec apres .

on m'a donc dirigé vers :
<td><img src="supprimer.png" id="'. $i .'" onclick="supprimerligne(id)"></td>
et la fonction :
<script type="text/javascript">
        function supprimerligne(id){
            if (confirm('Supprimer cette image ?')){
            // tu ouvres le fichier, te positionne à la ligne $i et la supprime
            }
        }
</script>
le soucis c'est que j'ai 2 $var a récupérer dans cette fonction :
- $lines[$i] url de l'image et
- $nom_c nom du dossier ou se trouve le fichier txt

le script au dessus fonction a vide :)
mais je voudrais lui faire supprimer la ligne $lines[$i] j'ai donc mis un code php mais ca fait bugger le script

je suis un peu pommé la , avec les fonction script


j'ai voulu faire ça un peu a l'aveuglette :
<?  
$id_poubelle = $lines[$i].'@'.$nom_c ; // comme j'ai 2 var a recuperer j'ai donc créé une var avec les 2 en memoire avec @ pour les separer apres
?>
<img src="http://www.monsite/img/poubelle.png" width="30" height="30" border="0" id="'. $id_poubelle .'" onClick="supprimerligne(id)">

et
<?
function supprimerligne(id){
      if (confirm('Supprimer cette image ?')){
          // je recup l'info $id_poubelle et je la separe pour avoir mon lien et mon dossier
          $poub=explode("@",$id_poubelle);
          $info_lien = $poub[0] ;
          $info_nom =  $poub[1] ;
          // j'ouvre mon fichier ou ce trouve le lien a supprimer			
          $filePath= 'http://www.monsite/mb/'.$info_nom.'/data_images.up';
          $lignes9 = file($filePath); 
          foreach ($lignes9 as $num => $data) { 
            if (strpos($data, $info_lien) === 0 ) { 
	      unset($lignes9[$num]) ; 
            } 
          } 
          $handle = fopen($filePath, 'w+'); 
          fwrite ( $handle, implode  ("\n", $lignes9) ); 
          fclose($handle);
      }
}
?>
mais ca bloque tout ,
je me suis surement complétement planté mais soyez indulgent je découvre complétement


d'avance merci pour l'aide

cdt Pascal

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

05 sept. 2011, 15:49

Attention car tu mélanges php et javascript là... Javascript doit te permettre de détecter le clic sur l'image afin de lancer le traitement de suppression, mais celui-ci ne se fera que par un autre script php totalement indépendant.

En gros voici ce que tu peux faire, en fonction de ce que tu veux/sais faire (y a beaucoup de solution diverses et variées, en voici déjà quelques unes) :

Si tu veux un message de confirmation avant la suppression, il faut détecter le clic en javascript (tel que tu le fais)
Sinon, tu peux utiliser un simple lien qui va ouvrir un script php en lui passant l'id de la ligne à supprimer en paramètre (aller au paragraphe 42).

Si tu fais appel a une fonction javascript, il faut lui spécifier l'identifiant de la ligne que tu veux supprimer
echo ' ... <td><img src="supprimer.png" id="id-html-'. $i .'" onclick="supprimerligne(' . $i . ')"></td> ... ';
(attention, en html l'attribut id d'une balise ne doit pas commencer par un chiffre)

Ta fonction javascript va récupérer l'identifiant correspondant à l'image cliquée, demander confirmation de suppression, puis si tu confirmes la suppression doit :
- rediriger l'utilisateur vers un script php en lui passant l'id de la ligne à supprimer en paramètre (document.location.href = '...') (aller au paragraphe 42)
- faire un appel ajax vers un script php en lui passant l'id de la ligne à supprimer en paramètre (aller au paragraphe 42)

Paragraphe 42
Une fois la partie envoie des données terminée, tu dois réaliser un script php totalement indépendant, qui va récupérer un identifiant (en get, ou post selon la façon dont tu l'envois) et faire le traitement adéquat pour supprimer la ligne correspondante de là où elle se trouve. Puis, si l'appel s'est fait par une redirection, ton script devra renvoyer le visiteur vers la page précédente (header('Location:....')) qui pourra se recharger sans l'enregistrement supprimé.
Si l'appel s'est fait avec ajax, il faut utiliser javascript pour actualiser la page courante.

En espérant que cela te renvoi sur le bon chemin :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 133 Messages

05 sept. 2011, 16:51

Effectivement c'est chaux comme truc , je vais donc devoir me tourner vers le php separé ?
mais existe il un moyen de faire cette fonction directement dans mon code php pour pouvoir supprimer cette ligne ?
on m'a dirigé vers le OnClick peut etre existe il plus simple en php ? non ?

Mammouth du PHP | 2278 Messages

05 sept. 2011, 18:21

Que c'est tarabiscoté que d'aller chercher du javascript quand on doit gérer des fichiers, ce qu'il ne sait pas faire....
une idée de débile profond:
<style>
.suppresseur
{
    background-image:url('bouton_supprimer.png');	}
</style>
<?PHP
print_r($_POST);
$passage = isset($_POST['passage']) ? $_POST['passage'] : 1;
if ($passage == 2)
{
	$valeurs = $_POST['bouton'];
	$valeurs = explode ("/:/", $valeurs);
	$chemin = $valeurs[0];
	$ligne = $valeurs[1];
	print "chemin $chemin ligne $ligne";
}
print"
<form id ='formulaire' method= 'post' action = 'test1.php'>
<input type ='hidden' name ='passage' value ='2' />

<table>
	<tr >
		<td><img src ='vlc.png' title='image'> </td>
		<td><button  class='suppresseur' name ='bouton' type= 'submit'  value='chemin/:/1' /></td>
	</tr>
	<tr>
		<td><img src ='php.png' title='image'> </td>
		<td><button  class='suppresseur' name ='bouton' type= 'submit'  value='chemin/:/2' />
		</td>
	</tr>

</table>
</form>";
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 133 Messages

05 sept. 2011, 19:50

merci sirakawa
j'ai tourné ton script a ma sauce mais impossible d'avoir les 2 valeurs
j'ai mis ceci :
<?PHP
$ii = 'valeur1/:/valeur2' ;

//print_r($_POST);
$passage = isset($_POST['passage']) ? $_POST['passage'] : 1;
if ($passage == 2)
{
        $valeurs = $_POST['bouton'];
        $valeurs = explode ("/:/", $valeurs);
        $chemin = $valeurs[0];
        $ligne = $valeurs[1];
        print "chemin $chemin ligne $ligne";
}
?>
<form id ='formulaire' method= 'post' action = 'test1.php'>
<input type ='hidden' name ='passage' value ='2' />
<table>
  <tr >			
	<input class='suppresseur' type='image' name='bouton' src='..../img/poubelle.png'  width='30' height='30' border=0 value='<? $ii ?>'></td>
  </tr>
</table>
</form>
je me retrouve donc avec ma poubelle affiché et quand je clique dessus le
        print "chemin $chemin ligne $ligne";
retourne : chemin ligne
donc les 2 $var sont vide ....................

me suis planté ou ?

Mammouth du PHP | 2278 Messages

05 sept. 2011, 20:33

parce que le type image renvoie les coordonnées du pointeur quand on clique.
C'est pour ça que j'avais remplacé le <input > par un bouton, et pour que le bouton ait une image il faut passer par une css; mais j'avais oublié de redimensionner le bouton pour qu'on voie l'image.
<? echo $li?>
fonctionne .
BVoilà une adaptation dans ton style:
<style>
	.suppresseur
	{
		background-image:url('bouton_supprimer.png');	
		width:25px;
		height:25px;
	}
</style>
<?PHP
	$passage = isset($_POST['passage']) ? $_POST['passage'] : 1;
	if ($passage == 2)
	{
		$valeurs = $_POST['bouton'];
		$valeurs = explode ("/:/", $valeurs);
		$chemin = $valeurs[0];
		$ligne = $valeurs[1];
		print "chemin $chemin ligne $ligne";
	}
	$li ="chemin/:/l3";
?>
<form id ='formulaire' method= 'post' action = 'test1.php'>
<input type ='hidden' name ='passage' value ='2' />

<table>
	<tr >
		<td><img src ='vlc.png' title='image'> </td>
		<td><button  class='suppresseur' name ='bouton' type= 'submit'  value='chemin/:/1' /></td>
	</tr>
	<tr>
		<td><img src ='php.png' title='image'> </td>
		<td><button type='submit'  class='suppresseur' name ='bouton'  value='<? echo $li ?> ' />
		</td>
	</tr>

</table>
</form>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 133 Messages

06 sept. 2011, 15:50

Oui mais la ton systeme est toujours le meme
un"bouton" pour valider et apres on renvoi sur la "poubelle"
je voudrais que le bouton et la poubelle soit le meme bouton

edit :

bon j'ai fais ça à partir du code au dessu :
<style>
.suppresseur {
width:25px;
height:25px;
}
</style>

<?PHP
$pseudo = "Pascal" ; // pseudo récupéré par le code avant 
$url = 'http://www.monsite.fr/...................png' ; // url récupéré du code avant 

$passage = isset($_POST['passage']) ? $_POST['passage'] : 1;
if ($passage == 2)   {
   $valeurs = $_POST['bouton'];
   $valeurs = explode ("/:/", $valeurs);
   $chemin = $valeurs[0];
   $ligne = $valeurs[1];
   echo $chemin.'<br>'.$ligne ; // a partir de la je mets le code pour supprimer la ligne du fichier txt 
}
$li = $pseudo.'/:/'.$url ;

?>
<form id ='formulaire' method= 'post' action = '00.php'>
<input type ='hidden' name ='passage' value ='2' />
<table>
    <tr>
      <td>
      <button type='submit' title='image'  class='suppresseur' name ='bouton'  value='<? echo $li ?> ' /></button>
      </td>
    </tr>
</table>
</form>
la commande fonctionne mais j'ai un carré blanc , et j'ai voulu ajouter mon png "poubelle" a la place du carré mais impossible je sais pour ou mettre cette image_poubelle.png
dans ce code pour remplacer le carré blanc , j'ai testé dans la partie .suppresseur j'ai rien ou alors j'ai plus de cadre mais pas d'image

Mammouth du PHP | 2278 Messages

06 sept. 2011, 17:49

On ne peut plus mettre directement une image de fond à un bouton, c'est pourquoi je me suis fendu d'une classe suppresseur dont une des propriétés est background-image...
.suppresseur
{
background-image:url('bouton_supprimer.png');
width:25px;
height:25px;
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 133 Messages

06 sept. 2011, 18:28

Ok
mais quand je met ton code
j'ai un carré blanc avec angle droit , si je supprime la ligne background j'ai un carré a coté arrondi
j'ai testé les liens complet http://www ou en local poubelle.png
pas d'image un simple carré blanc

Mammouth du PHP | 2278 Messages

06 sept. 2011, 22:32

faut peut-être mettre une url juste dans background-image et pas ailleurs...
Parce que je ne m'amuse pas à envoyer du code faux. J'ai testé, ça m'a pris du temps, et ça fonctionne.
Pour les détails:
http://www.w3schools.com/cssref/pr_background-image.asp
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 133 Messages

07 sept. 2011, 05:38

Parce que je ne m'amuse pas à envoyer du code faux. J'ai testé, ça m'a pris du temps, et ça fonctionne.
a aucun moment je me suis permis de dire cela , je respect ton taf et ton aide
je regarde ça dans l'apres midi

a+

Eléphant du PHP | 133 Messages

07 sept. 2011, 15:12

voila j'ai trouvé pourquoi j'avais pas d'image
mon image fais 300px par 300px et comme le bouton fait 25*25
je pensais qu'il redimentionné l'image , en fait elle s'affichait mais trop grande
voila pourquoi j'avais rien dans le cadre :) en fait j'avais un bout de l'image :)
j'ai du redimentionner l'icone avant :)

un grand merci sirakawa pour ton aide :)
j'ai plus qu'a faire le code pour supprimer le bonne ligne :)

Mammouth du PHP | 2278 Messages

07 sept. 2011, 16:46

Je devais être fatigué....
Non, quand c'est une balise <img, on peur redimensionner par width='' et height ='' mais pas avec la bidulerie url=.....
Sur la norme il y a ça :
<BUTTON name="submit" value="submit" type="submit">
    Send<IMG src="/icons/wow.gif" alt="wow"></BUTTON>
avec alt obligatoire
<button type = 'submit' value ='fichier:ligne'>
	<img src ='bouton_supprimer.png' title='image' alt ='suppression' height='20%' width='20%'></button>
ou

<button type = 'submit' value ='fichier:ligne'>
	<img src ='bouton_supprimer.png' title='image' alt ='suppression' height='20px' width='20px'></button>
toujours aller voir:


<button type = 'submit' value ='fichier:ligne'>
http://www.w3schools.com/default.asp
ca cause anglais, mais il ya des exemples pour tout...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 133 Messages

07 sept. 2011, 19:09

merci pour l'info complémentaire.
comme je suis sur la partie "suppression" pour le moment je reste avec la première version du moment que ca marche :)

par contre je bloque sur un truc pour la suppression peut être pourra tu m’éclairer sur mon erreur
voila le code pour supprimer le lien dans le fichier txt , pour rappel voici comment est le fichier txt :

http://www......monimage1.png
http://www......monimage2.bmp
etc.....................

voici mon code
<?php
$passage = isset($_POST['passage']) ? $_POST['passage'] : 1;
if ($passage == 2)   {
    $valeurs = $_POST['bouton'];
    file_put_contents('data.up', str_replace($li, '', file_get_contents('data.up')));  // a cette partie j'ai testé $li ou $valeurs , pour $li j'efface tous le fichier sauf la premiere ligne et avec $valeurs il se passe rien 
}
$li = $lines[$i] ;
	 ?>
	 <form id ='formulaire' method= 'post' action = 'c.php'>
	 <input type ='hidden' name ='passage' value ='2' />
         <table>
	     <tr>
	       <td>
	       <button type='submit' title='image'  class='suppresseur' name ='bouton'  value='<? echo $li ?> ' /></button>
	       </td>
	    </tr>
	 </table>
	 </form>
         </td>                      
        </tr>               					
	</table><br>

j'arrive pas a supprimer correctement la ligne dans le fichier,
et je trouve pas ou est mon erreur .

Mammouth du PHP | 2278 Messages

07 sept. 2011, 22:09

1) Le lien sur ton fichier est incomplet ou masqué par le forum.
2)
a)$li c'est un numéro de ligne?
Si oui
a) le fichier data.up a les lignes numérotées explicitement?
b) $li c'est un contenu?
je procèderais en deux temps:
$z = file_get_contents
modification de $z
file_put_contents
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD