plusieurs formulaire sur une page et affichage select

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : plusieurs formulaire sur une page et affichage select

par sadeq » 30 mai 2006, 17:10

....mon seul souci est que vu mon niveau je ne peux pas aider grand monde (personne serait plus juste)....
Au contraire, en posant des questions tu enrichis le forum et tu instruis d'autres participants par au moins 2 choses :
1. la solution finalement trouvée à ton problème qui peut intéresser les gens
2. la qualité du dialogue avec les gens d'ici, qui t'enrichit toi aussi


Tu vois que ça n'a rien à voir avec ton niveau :wink:

N'oubli surtout pas que tu as posté dans la rubrique "Débuter en PHP" :roll:

par Ryle » 30 mai 2006, 15:33

L'inscription n'implique pas de devoir aider les autres, c'est juste plus pratique, ca permet de te reconnaitre, d'envoyer des messages privés, etc. (qui a dit "et surtout de pas avoir à retaper son pseudo à chaque fois" ?! ;))
Nan pis surtout ce qui est important, c'est que sadeq est commissioné en fonction du nombre d'inscrits ;p

Pour la redirection, j'ai une net préférence pour le header(), mais il y a effectivement des fois où il ne peut être utilisé (c'est d'ailleurs pour ca que j'aime pas les pseudo frames ;)). Il te reste alors au choix le meta ou le javascript...
Certains paranoïaques te diront que javascript peut être désactivé (5%) et qu'il vaut mieux donc utiliser les méta... personnellement j'ai pas spécialement de préférence plus pour l'un que pour l'autre :)

par iruka » 30 mai 2006, 14:56

ah, une derniere question sur un point :


si le formulaire a rempli toutes les conditions, j utilise une redirection html
<?php
if (isset($_POST['confirmation']) && $total ==0)
{
echo "tutut, faut remplir le formulaire...";
 
}
if (isset($_POST['confirmation']) && $total >0){
echo "<meta http-equiv='refresh' content='0; url=skill.php? ".session_id()."'>";}

?>
y aurait il une meilleure methode ? la fonction header() ne semble pas marcher vu que j ai des echo avant...[/php]

par iruka » 30 mai 2006, 14:44

Pourquoi tu ne t'es pas inscrit "iruka", tu es bien parmi nous, non tu peux par exemple suivre l'historique de tes messages plus facilement, tu sais
ouais, c est clair que je poste beaucoup et qu un compte serait peut etre le plus judicieux

mon seul souci est que vu mon niveau je ne peux pas aider grand monde (personne serait plus juste) mais bon, c est vrai que je trouve tellement de ressource sur ce forum (l aide qu on m apporte+ les postes precedents qui repondent souvent a mes questions) que je vais pas tarder a le faire!

par iruka » 30 mai 2006, 14:40

ARGH! La je dis bravo!!

pfiou, c est baleze quand meme d avoir assimile le cheminement (logique) du programme!

j ai du boulot devant moi la...

merci beaucoup, ca fonctionne sans avoir a faire appel a des bouts de ficelle!!

(enfin j ai pas touche la page du premier post, c est une autre page qui y ressemble de tres pres donc ca devrait etre bon...enfin... j espere lol)

par sadeq » 30 mai 2006, 14:34

Pourquoi tu ne t'es pas inscrit "iruka", tu es bien parmi nous, non :wink: tu peux par exemple suivre l'historique de tes messages plus facilement, tu sais :idea:

par Ryle » 30 mai 2006, 14:25

A vue de nez, je dirais que c'est parce que tu fais le select avant de faire le delete dans ton code, du coup il a déjà ramené l'ensemble des enregistrements avant d'aller faire la suppression en base, et travail sur les données ramenées sans se soucier du fait que certaines aient pu être éffacées depuis.
Lorsque tu actualises, il recharge la page, le select ne trouve plus les données supprimées et affiche ta page correctement. Il devrait donc normalement te suffir d'exécuter l'instruction delete avant le select pour que tout se fasse dans l'ordre sans necessiter de rechargement :)

par iruka » 30 mai 2006, 13:51

hum, j ai trouve une solution pas tres honnete mais qui a l air de marcher :
echo "<script>document.requestform.submit();</script>";
au lieu de recharger la page, je lance le formulaire, ce qui me recharge la page et permet de faire disparaitre de l affichage les donnees effacees...


la question etant, qu est ce qui dans mon script fait que j ai besoin de recharger la page pour que la donnee effacee disparaisse de la page

(
pour expliquer le probleme :
j entre une donnee en appuyant sur ajouter
les donnees sont entrees dans la base
la donnee s affiche en dessous suite a une requete vers la base

j efface la donnee en cliquant sur effacer
la donnee est effacee dans la base suite a une requete

mais reste afficher sur la page
un rechargement de la page fait disparaitre cet affichage

)

par iruka » 30 mai 2006, 13:33

je viens d essayer sur la suite du formulaire (qui est du meme style) et donc ca marche bien en passant par un seul formulaire et en declarant les noms des submits!

seulement, la redirection de la page sur elle meme

(lorsque l on entre des donnees dans la table, les donnees saisies s affichent sans souci mais quand on les efface, il faut recharger la page au moins une fois pour que le delete soit pris en compte dans l affichage, je sais pas pourquoi)

ne permet pas de garder les valeurs des selects.... ca me remet a zero...

par Ryle » 30 mai 2006, 11:56

Ca marche tout pareil avec post vi :)

J'ai mis l'exemple en GET parce que ca te permet de le voir directement dans l'url également :) (qui a dit "et aussi parce que ca fait moins de lettre à taper" ?!)

par iruka » 30 mai 2006, 11:00

ooh, je ne savais pas! ca marche aussi avec $_post ??


bon en tout cas je vais essayer avec toutes les infos que tu m as donnees et je reviendrais poster la solution (j espere) ou le probleme contre lequel je bute !

par Ryle » 30 mai 2006, 10:56

Toutafé :)

Code : Tout sélectionner

<form method="GET"> <input type="submit" name="monBouton" value="Envoyer Formulaire 1"> <input type="submit" name="monAutreBouton" value="Envoyer Formulaire 2"> </form>
<?
if(isSet($_GET['monBouton']))
  echo $_GET['monBouton'];
if(isSet($_GET['monAutreBouton']))
  echo $_GET['monAutreBouton'];
?>

par iruka » 30 mai 2006, 10:46

ok, donc si je fais plusieurs formulaires, je declare les variables sessions et post comme tu as indique.

sinon je ne fais qu un seul grand formulaire, je garde ma methode mais :
mais simplement le nom du bouton submit par exemple...
on peut verifier si un submit a ete envoye ?

par Ryle » 30 mai 2006, 10:36

Pour l'histoire du isSet et de la session je pensais à quelque chose comme ceci :
if(isset($_POST['conversational'])) {
  $conversational=$_POST['conversational']; 
  $_SESSION['conversational'] = $conversational;
}
else      
  $conversational=""; 
Du coup tu ne mettrais à jour la valeur en session que lorsque celle-ci est envoyée. Si c'est un autre formulaire qui est soumis, elle ne sera pas écrasée.

Pour les insert, il faudrait effectivement modifier ton test pour qu'il controle non pas le champ hidden, mais simplement le nom du bouton submit par exemple... Tu n'es d'ailleurs même pas obligé de faire de modification au niveau du test si tu nommes tes boutons avec les noms de tes champs hidden, tu n'auras de valeur que pour celui qui est cliqué :) (les champs hidden pour les insert ne serviraient plus du coup)

par IRUKA » 30 mai 2006, 10:26

Le problème lorsque tu cliques sur le bouton submit, c'est qu'il n'envoi que le formulaire auquel il est associé, donc les autres formulaires ne sont pas envoyés et les valeurs deviennent vide puisque le isSet est faux.
C est ce que je m etais dit et j avais essaye avec du javascript (j y connais rien du tout en javascript donc euh...) mais sans succes....
Tu peux donc soit à ce moment là ne pas mettre tes valeurs en session (en fait inclure la mise en session dans le if(isSet()) ) ce qui ne modifie pas trop ton code,
je suis desole, je ne comprends pas exactement ?
soit ne faire qu'un seul formulaire pour toute la page (ce qui ne devrait pas poser de problème vu que tes champs ont tous des noms différents) ce qui ne t'empêche pas d'avoir 3 boutons submit pour l'envoyer
la j ai enleve les verifications des champs pour alleger le code mais si je ne fait qu un seul grand formulaire lorsque je cliquerai sur l insert 1, les messages d erreurs apparaitront pour l insert 2 non ?