• imprimer
  • aide

Forum de discussions « PHP - SQL »

Retrouvez les publications relatives à ces discussions dans nos rubriques PHP, SQL.

question sur input type="image"

liste des forums liste des discussions Participer à la discussion

Photo de pompomp Message publié le lundi 01 février 2010 - 21h10 par pompomp.
Bonjour,
j'ai un tableau alimenté via les enregistrements de ma bdd et au bout de ce tableau, je voudrais mettre 2 images qui serviront à modifier/supprimer l'enregistrement choisi. Avant de gérer le fait d'avoir plusieurs enregistrements, j'ai essayé avec 1 seul pour voir si j'arrive à tester le fait d'avoir cliquer sur l'image 'modifier' ou sur l'image 'supprimer'. J'ai fait mon tableau de cette manière :
<table> <tr> <td><?php echo $val['Date_a'];?></td> <td width="84" height="80px"> <img src="img/photos/<?php echo $val['Photo_a'];?>" width="80px" height="80px" /></a> </td> <td style="text-align:center;"> <center><?php echo $val['Titre_a'];?></center></a> </td> <form method="post" action="index.php?page=modifannonce" name="form1"> <td> <center><input type="image" src="img/b_edit.png" value="modifier" name="modif" style="margin-top:50px;"/></center> </td> </form> <form method="post" action="" name="form2"> <td> <center><input type="image" src="img/b_drop.png" value="supprimer" name="suppr" style="margin-top:50px;" /></center> </td> </form> </tr> </table>

si je clique sur l'image 'modifier', ma page index.php?page=modifannonce s'ouvre bien mais j'ai une erreur Undefined index pour $_POST['modif'];. je pensais récupérer par là mon numéro d'annonce après avoir remplacé value par <?php echo $val['Numannonce'];?> et une boucle.
Et deuxièmement, je pensais tester la suppression avec la fonction suivante au début de ma page mère :

if(isset($_POST['suppr'])) { $numannonce = $_POST['suppr']; //requête de suppression }

Est-ce que j'utilise la bonne méthode pour ce que je veux faire? Peut être devrais-je rajouter des champs 'hidden' pour les values mais comment tester le fait que l'image 'supprimer' ait été cliquée?

Merci d'avance,
Fred
Photo de pompomp Message publié le lundi 01 février 2010 - 21h55 par pompomp.
pour ce qui est de la modification, c'est bon, j'ai ajouté des champs hidden avec le n° de l'annonce à modifier en value et je peux le récupérer sans problème.

Par contre, je ne sais toujours pas comment tester sur ma page mère si l'image 'supprimer' a été cliquée...
Photo de nours312 Message publié le mardi 02 février 2010 - 08h36 par nours312. modérateur nours312.com -- je ne suis pas codeur bénévol, mais j'aide gratos ;)
vu que tu n'as rien comme données dans ton formulaire, .... pourquoi ne pas faire des liens <a href="page.php?requete=modif&id=idRow"><img/></a><a href="page.php?requete=delete&id=idRow"><img/></a> ...
Photo de pompomp Message publié le mardi 02 février 2010 - 13h50 par pompomp.
en fait, je n'ai pas envie que mon delete se fasse sur une autre page. Et puis je n'aime pas avoir toutes les infos dans l'adresse avec les ?xx=xx&yy=yy... C'est pour ça que je voulais faire en formulaire. Ca me permettait de faire le delete dans la même page sans envoyer l'idrow dans la barre d'adresse.
Photo de nours312 Message publié le mardi 02 février 2010 - 19h56 par nours312. modérateur nours312.com -- je ne suis pas codeur bénévol, mais j'aide gratos ;)
ok !... bonne réponse ;)

Donc ...

1. que pensais tu envoyer comme informations dans ton formulaire en hidden si ce n'est le idRows ?
2. as tu envisager d'utiliser l'ajax pour effectuer la maintenance de tes éléments ? c'est très pratique et assez dynamisant !
3. rien ne t'empêche de faire le traitement sur la même page ... le faire sur une autre page sert souvent pour faire un Header et ainsi éviter le renvoi multiple des requêtes de formulaire
4. tu peux toujours crypter tes données !... pour éviter que l'internaute ne connaisse le numéro de la ligne utilisé ...

dis en plus ;)
Photo de pompomp Message publié le mardi 02 février 2010 - 21h11 par pompomp.
merci,
alors dans l'ordre :
1- je compte effectivement envoyer l'idrows (enfin numannonce que je passe en value) dans les hidden.
2-Ajax, j'ai essayé de comprendre mais le javascript dedans me pose quelques problèmes ! Je n'ai pas trouvé comment faire.
3- oui c'est vrai...
4-je n'ai pas réfléchi à la question vu que je ne pensais pas passer par un <a href>

En dire plus :

J'ai donc mon tableau avec différents enregistrements (index : numannonce) qui apparaissent grâce à une boucle while. Pour chaque ligne, j'ai une image modifier et une image supprimer. Bien entendu, si on clique sur une image modifier, cela renvoie sur une page de modification de la ligne en question. Si on clique sur l'image supprimer, cela doit supprimer la ligne en question.
Je voudrais pour la suppression faire un test au début de ma page mère (celle où il y a le tableau) :

//si image supprimée cliquée
//alors
//effacer
//sinon
//ne rien faire

code pour le tableau

<table width="100%"> <tr> <td width="190"><?php echo $val['Dateannonce'];?></td> <td width="84" height="80px"> <?php if($val['Photoannonce'] == NULL) { echo ''; } else {?> <a href="#" onClick="window.open('annonce.php?n=<?php echo $val['Numannonce'];?>&t=<?php echo $val['Titreannonce'];?>','','width=600,height=800')"> <img src="img/photos/<?php echo $val['Photoannonce'];?>" width="80px" height="80px" /></a> <?php }?> </td> <td width="767" style="text-align:center;"> <a href="#" onClick="window.open('annonce.php?n=<?php echo $val['Numannonce'];?>&t=<?php echo $val['Titreannonce'];?>','','width=600,height=800')"> <center><?php echo $val['Titreannonce'];?></center></a> </td> <form method="post" action="index.php?page=modifannonce" name="form1"> <td width="75"> <center> <input type="image" src="img/b_edit.png" value="modifier" name="modif" style="margin-top:50px;"/> <input type="hidden" name="m_numannonce" value="<?php echo $val['Numannonce'];?>" /> </center> </td> </form> <form method="post" action="" name="form2"> <td width="79"> <center> <input type="image" src="img/b_drop.png" value="supprimer" name="suppr" style="margin-top:50px;" /> <input type="hidden" name="s_numannonce" value="<?php echo $val['Numannonce'];?>" /> </center> </td> </form> </tr> </table>

voilà ce que j'aimerai faire. Pour la partie modification, ça marche bien. Tiens, il me vient l'idée de tester le champ hidden plutôt que l'image en fait... Je tiens au courant!
Photo de pompomp Message publié le mardi 02 février 2010 - 21h21 par pompomp.
bon ben voilà, en faisant

<?php if(isset($_POST['s_numannonce'])) { $numannonce = $_POST['s_numannonce']; $del = 'DELETE FROM annonce WHERE Numannonce='.$numannonce; mysql_query($del) or die('Erreur SQL !<br>'.$del.'<br>'.mysql_error()); }?>

ça fonctionne. Le fait de décrire ça m'a fait tilter! Merci nours312!
Photo de nours312 Message publié le mercredi 03 février 2010 - 14h23 par nours312. modérateur nours312.com -- je ne suis pas codeur bénévol, mais j'aide gratos ;)
de rien ...

Ce que je voulais dire c'est que ne pas passer le parametre dans le lien (href) mais le faire passer dans un hidden revient au meme !... si un petit mail fouille ton code, il le retrouvera !...

pour crypter, tu peux facilement faire un md5($idRow) et lors de ta requete SELECT MD5(id) md5Id From taTable WHERE md5Id = "'.$_GET['idRow']'" ... '; ou dans le style ;)

si le Javascript te gene, tu peux facilement commencer par les fonctions qui t'intéressent à l'aide d'une lib tel que Prototype ou jQuery ... c'est ultra simple !

<tr> <td> Prod </td> <td> <img src="modif.png" class="AjaxUse" id="Modif_$idRow" /> <img src="delete.png" class="AjaxUse" id="delete_$idRow" /> </td> </tr>

ça c'est un exemple de présentation HTML ...

var useAjax = function(event){ var id = event.element().id; new Ajax.Request(window.location.href, {parameters : {'idImg' : id}, onComplete : function(xhr){ var response = xhr.responseText; if(response == 'TRUE') $(id).ancestros()[1].remove(); else if(response.substring(4) == "<td>" $(id).ancestros()[1].innerHTML = response; else alert(xhr.responseText); } }); } document.observe('dom:loaded', function(){ $$('.AjaxUse').invoke('observe', 'click', useAjax); });

Bien sur, sans oublier de lier la librairie Prototype

ce qui va se passer ici : à chaque click sur les images, le navigateur va effectuer une requête au serveur (à la page courante avec en paramètres POST idImg contenant l'id de l'image clickée et attendra une réponse de type string avec plusieurs option envisagées :
- 'TRUE' => si le serveur renvoi la chaine "TRUE" le Script Javascript va supprimer le parent du second degré de l'image clickée (ici le <tr>)
- "<td>"+.... si les 4 premiers caractères de la réponse sont <td>, on suppose que le serveur envoi la réponse à l'update ce qui fait que le script va remplacé le contenu du tr par la réponse du serveur (dans la réalité, il est préférable de passer par un formulaire, histoire de réellement modifier qqch !...mais nous pouvons envisager d'ajouter dans les variable celles qui ont été modifiées !... bref !)
- autre réponse, elle est affichée dans une alert !...


ct juste pour me détendre ! ... :D ... mais je vais préparer un tutos sur le sujet, c'est pas compliqué et j'ai quasiment tout dit ici !... donc si ça t'intéresse, dis le moi et je te donnerais le lien ;) ... en attendant, tu peux l'utiliser pour le bouton supprimer !.. @+++++
Photo de pompomp Message publié le mercredi 03 février 2010 - 19h11 par pompomp.
effectivement, si tu prépare un tuto pour l'ajax (enfin les bases) ça m'intéresse parce que j'ai beau essayé de m'y mettre, je ne comprends pas tout et notamment où se fait la suppression dans la base de données dans ton exemple. Je vais quand même tenter de l'appliquer vu que le site que je fais est seulement pour apprendre.
Photo de nours312 Message publié le vendredi 05 février 2010 - 14h26 par nours312. modérateur nours312.com -- je ne suis pas codeur bénévol, mais j'aide gratos ;)
Voilà !.... ^^ ... il est monté :

Maintenance de la BDD en Ajax

Bon, je l'ai monté hier soir entre deux, et rédigé les commentaire à l'instant, j'espère qu'il est suffisamment expliqué pour pouvoir par la suite être adapté aux besoin de chacun !...

Je ne me suis pas étendu sur la gestion de la BDD, vu que ce n'est généralement pas le problème des codeurs php :D

Tiens moi au courant ;) @+
Photo de pompomp Message publié le samedi 06 février 2010 - 09h52 par pompomp.
Salut, merci pour ton tuto, je le lirai dès lundi. Sinon hier j'ai quand même réussi à faire une requête de mise à jour avec Ajax. Je l'ai fait comme ça :

<script language="javascript"> function request(url,cadre) { var XHR = null; if(window.XMLHttpRequest) // Firefox XHR = new XMLHttpRequest(); else if(window.ActiveXObject) // Internet Explorer XHR = new ActiveXObject("Microsoft.XMLHTTP"); else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } // envoie de la requête, methode GET et de l'url XHR.open("GET",url, true); // on guette les changements d'état de l'objet XHR.onreadystatechange = function attente() { // l'état est à 4, requête reçu ! if(XHR.readyState == 4) { // ecriture de la réponse document.getElementById(cadre).innerHTML = XHR.responseText; } } XHR.send(null); // le travail est terminé return; } </script> <div style="height:30px; text-align:right;" id="liensfav"> <?php if(isset($_SESSION) && (!empty($_SESSION['pseudo'])) && (!empty($_SESSION['pass']))) { if($val['Favoriannonce'] == 'O') { ?><a href="" onclick="request('fav.php?num=5&f=N','liensfav');return(false)"><font color='#FF0000'>favori</font> / </a><?php } else { ?><a href="" onclick="request('fav.php?num=5&f=O','liensfav');return(false)">favori / </a><?php } }?> </div>

et dans ma page favphp

<?PHP include('connexion.php'); $fav = $_GET['f']; $num = $_GET['num']; $upd = "UPDATE annonce SET Favoriannonce = '$fav' WHERE Numannonce = '$num'"; $resupd = mysql_query($upd) or die('Erreur SQL !<br>'.$upd.'<br>'.mysql_error()); if($fav == 'O') { ?><a href="" onclick="request('fav.php?num=5&f=N','liensfav');return(false)"><font color='#FF0000'>favori</font> / </a><?php } else { ?><a href="" onclick="request('fav.php?num=5&f=O','liensfav');return(false)">favori / </a><?php }?>

et ça marche pile poil comme je le veux!
Ensuite, j'aurai encore à utiliser AJax, surement en lien avec ma bdd et certainement pour de l'affchage donc je vais me plonger dans ton tuto.
Petite question vite fait au passage : dans mon exemple, j'ai mis la requête sur une page diférente bien spécifique. Est ce qu'il serait possible plutôt que de faire appel à cette page, de faire appel à une fonction qui se trouverait dans une page avecd'autres fonctions php? Si oui, comment modifier le onclick?
Merci pour t'être donné la peine de faire le tuto et @+

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions