IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Le switch ne marche pas


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut Le switch ne marche pas
    Bonjour à tous,

    Bien qu'étant une fervente lectrice du site (merci d'ailleurs à tous les contributeurs pour leurs tutos clairs et sympathiques), je poste ici pour la première fois.

    Si je fais appel à vous aujourd'hui c'est que je me retrouve confrontée à un soucis depuis plusieurs jours. Je bosse actuellement sur l'élaboration d'un formulaire en php.
    Celui-ci est composé de 2 choses:
    - la classe qui permet le traitement du formulaire + le script qui exécute les instructions
    - le formulaire en html.

    Le principe est simple (le code qui suit est normalement assez commenté et explicite pour être facilement compréhensible): l'utilisateur vient sur la page du formulaire et remplit les champs. Au clic sur "submit" ou s'il tape "entrée", le script vérifie la validité des champs (s'ils sont vides, s'ils correspondent au pattern passé en paramètre etc...) Lorsque tout est ok, le script envoie un mail avec le contenu du formulaire et affiche un message pour remercier l'utilisateur.

    Le problème: le script reste bloqué toujours au même endroit, c'est-à-dire avant la vérification du contenu des champs de formulaire. J'ai une variable $action, dans ma classe, qui permet de déterminer l'état du formulaire (1= jamais exécute, 2=validation des données entrées, 3= envoi du mail). Seulement, il reste bloqué, comme si $action ne changeait jamais d'état. Or lorsque que je fais un "echo Email->__getAction();", il me dit bien que $action=2.

    Ci-après le code, de manière à être plus explicite. J'espère que vous aurez compris mon problème, sinon je ré-expliquerais ^_^°

    Merci par avance à ceux qui auront la gentillesse de me venir en aide.

    Bonne journée à tous!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <?php
    		class SendMail
    		{
    			// propri�tés privées : tous les éléments et attributs utilisables (certaines valeurs sont entrées par défaut)
    			//variable de ma classe[...]
    			var $action; //variable permettant de tester si le formulaire vient juste d'�tre cr�er
     
     
    			//Constructeur
    			public function  SendMail ($type = "texte")
    			{ 
    				$this->action=1;
    				if ($type == "texte")
    				{ 
    					$this->entete = "Content-type: text/plain; charset=iso-8859-1n"; 
    				} 
    				elseif ($type == "html")
    				{ 
    					$this->entete = "Content-type: text/html; charset=iso-8859-1n"; 
    				} 
    			}
     
    			public function __GetAction()
    			{
    				return $this->action;
    			}
     
    			public function __SetAction($new_Action)
    			{
    				$this->action=$new_Action;
    			}
     
    			//instructions de ma classe [...]			
    		}//fin de la classe SendMail
     
     
    		//Création d'un nouvel objet SendMail
    		$destinataire="test@test.com"; //on configure l'adresse destinataire
    		$objet="Test mail site";
    		$contenu="";
    		$Email=new SendMail("HTML");
     
    		echo '<p>test cas 1</p>';
     
     
    		switch($Email->__GetAction())
    		{
    			case 1:
    				//on met tous les champs à vide s'ils sont nulls
    				$nom          =    isset($_POST['nom'])            ?  $_POST['nom'] : '';
    				//etc...[...]
    			break;
     
    			case 2:
    				//Récupération des variables du formulaire
     
    				$valid=0; //variable servant à déterminer si $action change d'état ou non
     
    				//on vérifie que les entrées obligatoires ne soient pas vides
    				//on vérifie, si elles sont remplies, qu'elles correspondent
    				//au pattern passé en paramètre
     
    				if($Email->TestEmpty($nom))
    				{
    					echo '<p>Le champ "Nom" est vide</p>';
    					$valid++;
    				}
    				else
    				{
    					if($Email->TestEntry($Email->patternstring, $nom)==0)
    					{
    						echo '<p>Le champ "Nom" n\'a pas un format valide</p>';
    						$valid++;
    					}
    				};
     
    				//idem pour les autres champs [...]
     
     
    				if($valid==0)
    				{
    					$Email->__SetAction(3); 
                                            //les entrées sont valides, on passe à l'envoi de mail
    				}
    			break;
    			case 3:
    				//Envoi du mail car toutes les données sont valides
    				//[...]
    			break;
    		}
    		$Email->ActionSubmit();
    		echo '<p>'.$Email->__GetAction().'</p>';
     
    	?>
    	<div ID="Body">
    		<H2>Nous contacter</H2>
    		<form method="POST" action="?" enctype=“multipart/form-data”>
    			<fieldset>
    				<legend>Vos coordonn&eacute;es</legend>
    				<label class="label_Coord" for="nom">Nom </label><input type="text" name="nom" id="nom" value="<?php echo htmlentities($nom); ?>"/><p class="p_asterisk">*</p><br/>
    <!-- Je n'ai mis qu'un champs, mais la syntaxe est la même pour les autres -->
    			<p class="p_com">Veuillez remplir les champs suivit d'un <strong>*</strong></p>
    			<input type="submit" value="Envoyer"/>
    		</form>
    	</div>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu devrais mettre ton echo de controle juste avant le switch, on ne sait jamais.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Résultat: il retourne 1, ce qui signifie qu'avant le switch il est bien initialisé à 1.... Sauf qu'il doit changer d'état après exécution du premier cas....

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je dirais plutôt que c'est le traitement du case 1 qui modifie la valeur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    Oui c'est ça.... Il traite les instruction du case 1 puis modifie la valeur de $action de manière a passer à la validation des données

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ah mais non ça ne marche pas comme ça.
    C'est le résultat de l'expression qui est comparée au "case" : si la variable est modifiée en cours de route, ce n'est pas pris en compte.

    Si 2 est toujours traité après 1, tu peux enlever le break entre 1 et 2.
    Sinon il faut passer par des condition if/elseif.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 10h28
  2. Maximiser fenêtre ne marche pas
    Par sandrinec dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/06/2003, 13h02
  3. Réponses: 9
    Dernier message: 07/05/2003, 13h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 11h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo