Vous n'êtes pas identifié(e).
Bonsoir à tous,
Principe : je fais tourner une page, en passant par des contrôles, pour remplir un questionnaire. Mon idée est de pouvoir aller ailleurs en fonction des circonstances, donc de paramétrer le nom du lien.
En (ici) en bon débutant j'ai anticipé et testé :
[code =php]
$page = 'page1.php ' ;
print ("< form action= $page method = 'POST' > ") ; // ça marche du 1ere coup, rendez-vous à la page1 !
[/code]
Passage au concret avec un sélecteur type switch (c'est pareil avec des if)
[code =php]
switch( $_POST['bouton'] {
case 'ENREGISTRER' :
$page = 'page1.php' ;
case 'CONFIRMER' :
$page = 'page2.php ' ;
...... }
print ("< form action= $page method = 'POST' > ") ; // ça ne marche pas du tout !!!!! et l'adresse appelée est fantaisiste (pour moi !)
[/code]
C'est un autre pb :
404 not found... + --> The requested URL /zenphoto_donnees/z_donnees_page_invites/method was not found on this server.
et pour finir une adresse applée inexplicable (pour moi !)
http://na....ge_invites/method?=XXXX&nom=&prenom=&email=&choix2=Qui&bouton=ENREGISTRER.
J'ai testé ce que donne $_POST : il est clair : ENREGISTRER que l'on aperçoit au bout de l'adresse ! Le reste de l'adresse est composée des noms des champs du formulaire (j'ai pensé à un tableau dans le $_POST) mais XXXX c'est une donnée de ma BDD !!!
Là je touche le fond et votre analyse est le bien venue . Merci d'avance.
Hors ligne
Salut,
tu as oublié le break
a++
Hors ligne
Merci pour la réponse très rapide !
mais rien de changé (au passage c'est la 2eme fois que je switch et ,sans le break, il marchait , vivons innocent !)
Je fais un copier/coller pour ne rien louper
Même message : The requested URL /zenphoto_donnees/z_donnees_page_invites/method was not found on this server.
Pourquoi ça parle method en $_POST ?
Pourquoi tout ce bruit dans l'URL appelée : http://na....enphoto_donnees/z_donnees_page_invites/method?=ABADIE&nom=&prenom=&email=&choix2=Qui&bouton=ENREGISTRER ?
et au bout ENREGISTRER que case devrait traiter pour aller à la page --> ajout_invite.php qui est la page de départ ?
Bilan 1ere erreur corrigée , il reste un trafic d'adresse !
Merci à Pierrot.
Hors ligne
met ton script complet stp.
a+
Hors ligne
Je n'hésite pas une seconde ! mais tu vas me maudire ... Il appelle d'autres script (à ta disposition...)
Rien de secret (encore) sur le site : nadiemma.fr (nous,4nadi)
merci et j'espère que tu trouveras ?
<?php
include('validation.inc_Nad.php') ;
include('session_mysql.inc_Nad.php') ;
GLOBAL $liaison ; // global pour pouvoir ouvrir et fermer la base ds ds fonctions differentes
function SFsituation()
{ if(!array_key_exists('bouton',$_POST ) ) { // premier passage, édition du premier formulaire
return "ouverture" ;}
else {
if ($_POST['bouton'] == "ENREGISTRER" or $_POST['bouton'] == "RECOMMENCER") // passage pour enregistrer un nouvel invité
{return 'traitement _ajout' ; }
switch($_POST['choix']) {
case 'ajout' :
return "ajout" ;
break ;
case 'retrait' :
return "retrait" ;
break ;
case 'actif' :
return "actif" ;
break ;
case 'inactif' :
return "inactif" ;
break ;
}
}
}
function SF1extr_nom_inv_mysql($table,$invite,$prenom,$cause) // "cause1" ouverture : :extraction des invités --"cause2" extration des invités de nom $nom
{GLOBAL $liaison ;
SSFouverture_mysql() ;
$invite = mysql_real_escape_string($invite,$liaison); // correction PHPdébutant pas besoin pour table, y a des notions de varcar de la base
$prenom = mysql_real_escape_string($prenom,$liaison);
if ($cause == "cause1" ) { // extration complete
$query = "SELECT concat(nom,' __ ',prenom,' * actif = ',actif,' * invité par : ',inviteur,' Email = ',email) FROM $table ORDER BY nom "; // marche
}
if ($cause == "cause2" ) { // extration filtrée
if ($prenom == "") {$prenom = "%" ;} // pour ne pas bloquer la recherche
$query = "SELECT concat(nom,' __ ',prenom,' * actif = ',actif,' * invité par : ',inviteur,' Email = ',email) FROM $table WHERE nom = '$invite' ORDER BY prenom" ;
}
$result =mysql_query($query) or die ("Erreur :Pas de récupération d'invité à l' ".$invite) ;
mysql_close($liaison) ;
return $result;
}
function SF1trace_formulaire($result) // cas ouverture : extrait les invités et trace le formulaire
{ print('<CENTER><P><TABLE BORDER=2 BGCOLOR="#CCFFFF" WIDTH="30%" HEIGHT=65><TR><TD WIDTH=154><P>') ;
print( 'LISTE des invités de la base' .'</h2><i>'.'(tenir compte de Actif )'.'</i>') ;
$cde= '</select>' ; // valeur de fermeture de $cdeOption -ligne du menu déroulant
$cdeOption = "" ;
print ("<form action = $_SERVER[PHP_SELF] method = 'POST'>") ; //renvoi la même page
echo"<select name'= 'choix_invite'>" ; // crée un menu déroulant pour présenter les invités qui sont dans $result
while ($item = mysql_fetch_array($result, MYSQL_NUM)) // extrait item par item les valeurs déja concaténées par SQL
{
$cdeOption .= " <option value= $item[0]>- $item[0]</option>\n";
}
if ($cdeOption == "") die("Erreur : extraction vide !");
$cdeOption .= $cde ;
echo $cdeOption ; //le menu est constitue depuis <select name= .... les lignes et fin /select>
// création des boutons d'options -entrer un invité nouveau,
//rendre actif ou inactif, supprimer un inviter de la liste
print('<TD><TR></TABLE><P>') ;
print("<br/><br/>") ;
print('<B>Faites votre choix de gestion</B>') ;
print('<P><TABLE BORDER=2 BGCOLOR="#CCFFFF" WIDTH="30%" HEIGHT=65><TR><TD WIDTH=154><P>') ;
print('<INPUT TYPE=radio NAME=choix VALUE="ajout" checked>Ajouter un invité <P>') ;
print('<INPUT TYPE=radio NAME=choix VALUE=retrait>Retirer un invité</TD><TD WIDTH=154><P>') ;
print('<INPUT TYPE=radio NAME=choix VALUE=actif>Invité Actif<P>') ;
print('<INPUT TYPE=radio NAME=choix VALUE=inactif>Inactif</TD></TR></TABLE><P>') ;
print( "<i> A l'ajout d'un invité, celui-ci est par défaut ACTIF </i><br><br> ") ;
print( "<i> La selection de RETIRER, ACTIF ou INACTIF implique de selectionner l'invité concerné !</i><br><br><br> ") ;
print('<INPUT TYPE=submit NAME="bouton" VALUE="ENVOYER"> ') ;
print('</CENTER></form>') ;
}
function SF2trace_formulaire($result,$message,$value_bouton) // formulaire pour enregistrement d'un nouvel invité
{
$nom = $_POST['nom'] ;$prenom = $_POST['prenom'] ;$email = $_POST['email'];
if( $_POST['choix2'] == "")
{$choix2= "Qui ?";}
else
{$choix2= $_POST['choix2']; }
print('<CENTER><P><TABLE BORDER=2 BGCOLOR="#CCFFFF" WIDTH="30%" HEIGHT=65><TR><TD WIDTH=154><P>') ;
print( 'LISTE des invités de la base' .'</h2><i>'.'(tenir compte de Actif )'.'</i>') ;
$cde= '</select>' ; // valeur de fermeture de $cdeOption -ligne du menu déroulant
$cdeOption = "" ;
// choix de la page de destination
if ($_POST['bouton']== 'ENREGISTRER') {
$page_web = 'ajout_invite.php' ;
}
if ($_POST['bouton']== 'CONFIRMER') {
$page_web = 'ajout_invite.php' ;
}
switch($_POST['bouton']) {
case 'ENREGISTRER' :
$page_web = 'ajout_invite.php' ;
break ;
case 'CONFIRMER' :
$page_web = 'ajout_invite.php' ;
break ;
case 'RECOMMENCER' :
$page_web = 'ajout_invite.php' ;
break ;
case 'RETOUR_Gestion' :
$page_web = 'index_page_invites.php' ;
break ;
case 'RETOUR_accueil' :
$page_web = "index_page_invites.php" ;
break;}
// $page_web = 'ajout_invite.php' ; //seul ça marche, pas avec case ?
print ("<form action= $page_web method = 'POST'>") ; //renvoi la même page = $_SERVER[PHP_SELF]
echo"<select name'= 'choix_invite'>" ; // crée un menu déroulant pour présenter les invités qui sont dans $result
while ($item = mysql_fetch_array($result, MYSQL_NUM)) // extrait item par item les valeurs déja concaténées par SQL
{
$cdeOption .= " <option value= $item[0]>- $item[0]</option>\n";
}
if ($cdeOption == "") die("Erreur : extraction vide !");
$cdeOption .= $cde ; //ajoute </select> pourquoi en variable ?
echo $cdeOption ; //le menu est constitue depuis <select name= .... les lignes et fin /select >
print('<TD><TR></TABLE><P>') ;
print('<br><br><br>') ;
print('<CENTER><TABLE BORDER=2 BGCOLOR="#CCFFFF" WIDTH="35%" HEIGHT=65><TR><TD COLSPAN=2 WIDTH=154>') ;
print("<h2>ENREGISTREMENT D'UN NOUVEL INVITE</h2><br>") ;
print("<p>.$message.</p>" ) ;
print("  <i>...un nouvel invité est ACTIF par défault !</i></TR>") ; //   cree des espaces pour présente centré
print("<TR><TD>* Nom</TD><TD><INPUT type=text name='nom' value= $nom >") ;
print("</TD></TR><TR><TD>* Prénom</TD><TD><INPUT type=text name='prenom' value= $prenom></TD></TR>") ;
print("<TR><TD>* Email</TD><TD><INPUT type=text size=45 name='email' value= $email></TD></TR>") ;
print('<TR><TD>* Inviteur</TD><TD>') ;
print('<SELECT name=choix2> ') ;
print("<OPTION VALUE=$choix2>$choix2</OPTION>") ;
print("<OPTION VALUE=TOUS>Tous</OPTION>") ;
print("<OPTION VALUE=NATHALIE>Nathalie</OPTION>") ;
print("<OPTION VALUE=DIDIER>Didier</OPTION>") ;
print("<OPTION VALUE=EMMANUEL>Emmanuel</OPTION>") ;
print("<OPTION VALUE=MARIE_HELENE>Marie Hélène</OPTION>") ;
print('</SELECT></TD></TR><TR>') ;
print('</TR><TR>') ; //print('</TR><TR><TD COLSPAN=2>') ;
print("<TD><INPUT type='submit' name='bouton' value=$value_bouton /></TD>") ;
print("<TD></TD>") ; //<INPUT type='submit' name='bouton' value='RETOUR_Gestion' />
print('</TR></FORM></TABLE></CENTER>') ;
}
function Fverif_ajout() // verif du nom, prenom et email (validité , unicité
{
$nom = $_POST['nom'] ;$prenom = $_POST['prenom'] ;$email = $_POST['email'] ;$text = "";
if ($nom == "" or $prenom == "")
{$text = "Compléter le formulaire" ;}
else {
$nom = pluspropre($nom) ;
$prenom = pluspropre($prenom) ;
if ($nom == "" or $prenom == ""){$text = " PB entrées !" ; }
else
{$text1 = ValideID($nom);
$text2 = $text.ValideID($prenom);
if( $text1<> "" or $text2 <> "") {$text = $text." Nom ou Prenom trop court" ; }
}
}
if ($text == "") {
$result = ValideEMail($email) ; //
if ($result) {
$result = session_unicite($nom,$prenom,$email) ; //
$text = $result ;
}
}
return $text ;
}
function session_unicite($Nom,$Prenom,$email) // recherche si le nom est deja ds la base, si oui extrait ("cause1")pour affichage
{ global $liaison ;
SSFouverture_mysql() ;
$query = "SELECT id FROM `nadiemmapivot`.`membre` WHERE (`nom` LIKE '$Nom' )" ; // prenom supprimé pour simplfier
$result = mysql_query($query) OR die("La requète pour récupèrer les données a échouée1") ;
if (!mysql_num_rows($result) ==0) // il y a le même nom donc pas unique
{return 'OK' ; } // il y a deja ce nom dans la base
mysql_close($liaison) ;
}
function principale() {
$nom = 'nom' ;$prenom = 'prenom' ;$actif = 'pass_md5' ;$table = 'membre';$invite="" ;$cas = "";
$cas = SFsituation() ;
if ($cas == "ouverture" ) {
$cause = "cause1" ;
$result ="";
$result = SF1extr_nom_inv_mysql($table,$invite,$prenom,$cause);
SF1trace_formulaire($result) ;
}
else if($cas == "ajout") {
$cause = "cause1" ;
$result = SF1extr_nom_inv_mysql($table,$invite,$prenom,$cause) ;
$value_bouton = "ENREGISTRER" ;
SF2trace_formulaire($result,$message,$value_bouton) ;
}
else if($cas == "retrait") {
echo "retrait" ;
}
else if($cas == "actif") {
echo "actif" ;
}
else if($cas == "inactif") {
echo "inactif" ;
}
else if($cas == "traitement _ajout") {
$text = Fverif_ajout() ;
If ($text == 'OK' ) { // cas du nom déja ds la base
$message = "<b> Ce nom figure dans la base, vérifier le prenom !</b>" ; // ça marche
$cause = "cause2" ; // ça marche
$invite= $_POST['nom']; // ça marche
$prenom = $_POST['prenom'];
$result = SF1extr_nom_inv_mysql($table,$invite,$prenom,$cause) ; //extraction des nons identiques
$value_bouton = "CONFIRMER" ;
SF2trace_formulaire($result,$message,$value_bouton) ;
}
else { // cas des autres messages d'horreur !
$cause = "cause1" ;
$message = $text;
$result = SF1extr_nom_inv_mysql($table,$invite,$prenom,$cause) ;
$value_bouton = "RECOMMENCER";
SF2trace_formulaire($result,$message,$value_bouton) ;
}
echo $text ;
}
}
principale()
?>
Hors ligne
Désolé, je démissionne
Bon courage.
a++
Hors ligne
Merci quand même !
Pas une piste ? Cette histoire de method, d'adresse avec ? un peu du GET où j'y connais rien et alors que je suis en POST ,
La logique du pg te semble désastreuse, Peux-tu en 2 mots me conseiller !
A+ et bonne nuit
Hors ligne
la logique, s'il y en a une, je ne l'ai pas saisie.
une piste ???
des dizaines de pistes :
echo"<select name'= 'choix_invite'>" <------ une simple cote de trop mais les double cote devrai être de rigueurs
$cdeOption .= " <option value= $item[0]>- $item[0]</option>\n"; <------- les tableaux ne sont pas parser, il faut les mettres entre {}
pas de constance, des doubles cotes, des simples cotes, certaines fonctions font 20 ou 30 ligne alors que 2 ou 3 suffiraient
un conseil ??????
repart d'un feuilles blanche et regardes les choses plus simplement.
a++
Hors ligne
Bonjour et merci Pierrot (le couche tard !)
Je veux aller dans ton sens (page blanche) mais pour éviter de retomber...j'ai besoin de comprendre quelques points. N'oublie pas que je ne suis pas dans la cour des grands (euphémisme). Je reprends tes remarques
Logique : j'ai lu que pour traiter un formulaire il vaut mieux rester sur la même page. A partir de ça je construis un programme qui au final devrait ressembler à un squelette avec les fonctions déportées et classées dans des scripts 'include'. Au stade ou j'en suis j'ai "glissé " dans mon script les fonctions que je dois suivre. quant à mon 2eme swicht il ne doit pas rester dans une fonction de tracé
// 5 le "programme"
function principale() {
$nom = 'nom' ;$prenom = 'prenom' ;$actif = 'pass_md5' ;$table = 'membre';$invite="" ;$cas = "";
$cas = SFsituation() ;
if ($cas == "ouverture" ) {....}
// 6 la manivelle !
principale()
?>
Pour moi ça me paraissait logique et ...réutilisable (les "include", juste un changement de nom et un coup de ballet) et quand ça marche je ne peux que l'améliorer
Sur les cotes : j'émerge ! Ton post sur le paramétrage de la requête mysql y est pour quelque chose... Sinon en dehors des subtilités (qui par définition le resterons encore un certain temps) je m'aligne (mais pas le copier/coller ! ) sur : simple cote : rien à voir circuler; double cote : j'ai des variables à traiter.
Longueur des fonctions : je suis pour le beau code; j'ai "encore" besoin de beaucoup détailler. (au passage je teste PHPedit qui, bien que lui ayant paramétré le langage PHP, "m'oblige" à déclarer mes variables avant utilisation. Ça rallonge aussi ...)
Je m'excuse de te monopoliser sur mon éducation mais pour profiter de ton expérience...
Je reviens au technique sur trois points:
1 -j'ai corrigé le 'cote' en trop --> ça n'a pas changer le problème;
2- Je croyais que du point de vu fonctionnel POST et GET étaient identiques. J'ai permuté pour voir et ...je ne quitte plus le 1ere affichage !
3 - je ne sais pas appliquer ta remarque :$cdeOption .= " <option value= $item[0]>- $item[0]</option>\n"; <------- les tableaux ne sont pas parser, il faut les mettres entre {}
Tu vois le niveau mais je persévère...
Merci encore A+
Hors ligne
Salut,
Très bonne résolution
J'ai très peu de temps aujourd'hui mais l'effort que tu veux faire m'oblige )
1er exemple :
ta fonction
switch($_POST['choix']) {
case 'ajout' :
return "ajout" ;
break ;
case 'retrait' :
return "retrait" ;
break ;
case 'actif' :
return "actif" ;
break ;
case 'inactif' :
return "inactif" ;
break ;
}
}
}
?>
devient
je l'ai décomposée, mais c'est faisable en 1 ligne
médites et je reviens demain
Edit : j'ai changer $_POST['bouton'] par $_POST['choix']
a++
Hors ligne
wahaaaa !!
merci, ça arrive juste à point, j'avais une page blanche qui commençait par function SFsituation(){if....
Je me lance dans la méditation transcendantale
A+
Hors ligne
si tu ne comprends pas, surtout prévient
a++
Hors ligne
me suis tromper
j'ai changer $_POST['bouton'] par $_POST['choix']
a++
Hors ligne
Merci beaucoup et ce sera surement nécessaire !
A+
Hors ligne
ne t'inquietes pas, c'est tres simple
a++
Hors ligne
Salut,
Bon, si la 1ere lecon est assimilée, il faut passer a la 2ieme
explique moi exactement ce que tu veux, et nous le ferrons ensemble.
a++
Hors ligne
Bonsoir (regarde l'heure!),
J'ai vraiment tout remis à plat, et donc considérablement simplifié mon programme, surtout en le découpant. J'évacue ainsi les difficultés 'bloquantes" d'aiguillage et de redirections qui foirent. Je n'irai pas jusqu' à dire que ma vitesse de croisière est satisfaisante ...
Ceci étant le wahaaa! suggéré par ta formule magique n'était pas simulé ! Elle reste encore mystérieuse et je te ferai volontiers signe pour avoir quelques explications...
Si tu pouvais me donner quelques infos pour traiter ta remarque ( :$cdeOption .= " <option value= $item[0]>- $item[0]</option>\n"; <------- les tableaux ne sont pas parser, il faut les mettres entre {} ) car cette ligne traîne toujours dans mon code ....
Merci de bien vouloir penser à moi et à +
Hors ligne
Saluton,
Si tu pouvais me donner quelques infos pour traiter ta remarque ( :$cdeOption .= " <option value= $item[0]>- $item[0]</option>\n"; <------- les tableaux ne sont pas parser, il faut les mettres entre {} ) car cette ligne traîne toujours dans mon code ....
Tout simplement.
Ou plus simple pour les débutant utiliser la fonction sprintf().
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je crois qu'il s'en sort pas le pti Zad
a++
Hors ligne
... pas de provok? je rame c'est sûr...
Non j'ai avancé, surtout en supprimant les cotés "bordeliques" (simple ou double cotes ?). Lorsqu'on y voit plus clair c'est déja plus facile de se retrouver.
J'ai une pose programmée et je m'y remets la semaine prochaine.
A+
Hors ligne
Bonjour,
Alors j'ai pris le temps de lire le post initial par curiosité, du coup désolé j'ai pas lu la suite entre mon post et le post initial^^, mais c'est l'horreur hein. il y a au moins une erreur par ligne et je suis gentil, comment veux-tu que ton navigateur interprète correctement le code html que ton interpréteur php lui demande d'afficher?
1) je connais pas ton doctype, mais commence par mettre toutes tes balises et leurs attributs en minuscule pour être compatible avec tous les doctypes.
2) Tous les attributs de balises doivent être entre guillemets (simple ou double selon le contexte) et ce, même quand il y a une variable a interpréter au milieu.
3)
<TD WIDTH=154>
l'horreur! qui de plus ne sera pas pris en compte. La bonne syntaxe est
etc...
mets tout au propre et regarde ce que ça donne
Bonne continuation.
Dernière modification par Jc (13-02-2011 10:56:03)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne