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 :

fonction et message d'erreur paramétré [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut fonction et message d'erreur paramétré
    Salm ; j'ai la fonction ci-dessous qui vérifie si la valeur saisie dans un input est une valeur de type entier naturel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ....
    function verif_numpos ($varnum)
    {
    $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
    $varnum =filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
    if (  $varnum=== false)  
    {
      $msg=' Veuillez saisir un nombre dans la case:';
    } 
     
    }
    la deuxième fonction affiche le message d'erreur formaté police couleur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function affichage_msg ($taille, $couleur,$erreurs_msg) 
    {
    echo '<font size = "'.$taille.'"  color = "'.$couleur.'" >'.$erreurs_msg.'</font>';
    }
    les deux fonctions ci-dessus son dans le fichier fonct.inc.php

    maintenant j'ai 16 champs a vérifier de m1 a m16.
    en prenant comme exemple le champs m:
    code de contrôle se trouve dans page cont.inc.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ........
    include('../foncreq/cont.inc.php'); 
    ......
    if(.................)
    	{
    	$erreurs_msg['m'] = '$msg'.' M:00-01 SVP'.';
    	}
    dans la page formulaire j'ai le code d'affichage du contenu de la variable du message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    include('../mod/cont.inc.php');
    .................
    if (!empty($erreurs_msg['m'])) 
        {
       affichage_msg ("3", "red",$erreurs_msg['m']);
     
        }
    comment appelé la fonction de contrôle du champ a vérifier dans le if(......) afin d'affiché un message d'erreur selon le champs?

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; j'ai testé le contenu da la variable $varnum avec var_dump pour voir la valeur retournée , le résultat est un message d'erreur variable ($varnum)non reconnue.
    je crois que je doit revoir la structure de ma fonction non!!!

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    j'ai testé le contenu da la variable $varnum avec var_dump pour voir la valeur retournée , le résultat est un message d'erreur variable ($varnum)non reconnue.
    Le problème c'est parmi les code que tu donnes et concernant la vérification du nombre, il n'y a que la déclaration de la fonction.

    En faite il manque le code qui appel cette fonction verif_numpos(), on ne sait ni où ni à quel moment elle utilisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    include('../mod/cont.inc.php');
    .................
    if (!empty($erreurs_msg['m'])) 
        {
       affichage_msg ("3", "red",$erreurs_msg['m']);
     
        }
    Dans ce code, où s'effectue l'appel à verif_numpos() ?


    A mon sens tu devrais revoir un peu peu la partie qui s'occupe à gérer les messages de retours.
    Par exemple, ici tu prévois que le message soit initialisé dans la fonction verif_numpos().
    Il serait peut être mieux que cela ne se fasse pas à ce niveau, que cette fonction s'occupe uniquement de dire si la vérif et bonne ou pas, donc de retourner vrai ou faut.
    Ce serait après, selon la valeur de retour d'initialiser ou pas le message de retour.

    Puis pour cette fonction affichage_msg(), je ne suis pas convaincu de sa réelle utilité ou efficacité.
    Soit on créer une vrai fonction de gestion de message, c'est elle qui intègrerait le type de message (info, erreur, erreur grave, voir autre), sans plus.
    C'est à dire de stocker au fure et à mesure des messages brut.
    Ce serait ailleurs où on s'occuperait de la mise en forme du ou des messages.

    En, somme, il faudrait au final un tableau qui stockerait ces différents messages avec sont type, et c'est son type qui définirait la mise en forme faite en CSS (et non des <font>).
    On ne fait plus de nos jour de mise en forme en HTML, on délègue ça au Css.

    Faut voir maintenant si cela correspond à se que tu recherche à faire.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; RunCodePhp :
    ton approche est logique normalement sa devait fonctionné comme tel.
    pour simplifier les choses je reprend ma fonction dans un fichier a part.
    fonction
    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
     
    ........
    if (isset($_POST['validform'])) 
    {
    function verif_numpos ($varnum)
       {
       $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
       $varnum =filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
       }
    // l'appel de la fonction
     
    $m=$_POST['m']; // affectation de la variable post dans m
    verif_numpos($m); //appel de la fonction
    if (  $varnum=== false)  // ici condition d'affichage
    {
    echo 'Veuillez saisir un nombre dans la case M:00-01 SVP.';
    }   	
     
    }
    après éxécution j'ai un message d'erreur :
    Undefined variable: varnum in
    , il ne reconnais pas la variable $varnum !!!!

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Il ne faut surtout pas mettre ta fonction à l'intérieur d'une condition, cela n'a aucun sens.

    La création d'une fonction (on dit sa "déclaration" qui est plus juste) doit se faire ailleurs, dans un fichier mes_fonctions.php par exemple et inclus.
    Tant qu'elle n'est pas appelée elle est inerte, ne sert à rien à la limite, comme toutes les fonctions native dans Php.


    J'avais pas fais attention, mais la fonction ne retourne rien, il est là le problème.
    Il faut un return et ensuite récupérer sa valeur de retour lors de l'appel.

    Exemple :
    mes_fonctions.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function verif_numpos ($varnum)
    {
        $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
        $varnum = filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
        if ($varnum !== FALSE) return TRUE.
        return FALSE; 
    }
    ?>
    (La fonction retourne vrai ou faut (et non la valeur de $varnum)

    La page qui contient les traitements : (on inclus le fichier des divers fonction, pour exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    include 'mes_fontions.php';
     
    ........
    if (isset($_POST['validform'])) 
    {
        $varnum = $_POST['m']; // affectation de la variable post dans m
        $verif = verif_numpos($varnum); //appel de la fonction
        if ($verif === false)  // ici condition d'affichage
        {
            echo 'Veuillez saisir un nombre dans la case M:00-01 SVP.';
        }
    }
    ?>
    $verif contient TRUE ou FALSE selon le cas
    $varnum contient la valeur dans POST.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    j'ai suvit tes conseils mes sa me génère un message d'erreur
    Parse error: syntax error, unexpected T_RETURN in C:\wamp\www\essai\a.php on line 68
    ligne 68 : return FALSE;

  7. #7
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    voila j'ai un peu arranger le code comme suite:
    fichier mes_fonctions.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function verif_numpos ($varnum)
    {
    $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
    $varnum = filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
     if ($varnum === FALSE) return false;
     
    }
    fichier traitement.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ..........
    if (isset($_POST['validform'])) 
    {
     
    	$varnum = $_POST['m']; // affectation de la variable post dans m
    	$verif = verif_numpos($varnum); //appel de la fonction
    		if ($verif === false)  // ici condition d'affichage
    			{
    			echo 'Veuillez saisir un nombre dans la case M:00-01 SVP.';
    			}
     
    }
    sa marche très bien
    après cela , je doit refaire le code traitement 16 fois ( y'a 16 champs numériques) !!!!!

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function verif_numpos ($varnum)
    {
    $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
    $varnum = filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
     if ($varnum === FALSE) return false;
     
    }
    Mouais ...
    Personnellement j'appelle ça faire des économies de bout chandelles
    Faire un return TRUE explicite quand la valeur est correcte ce n'est pas le bout du monde.


    après cela , je doit refaire le code traitement 16 fois ( y'a 16 champs numériques) !!!!!
    Pourquoi ne structure tu pas ton formulaire de façon à obtenir un tableau de valeur ?

    Exemple : (HTML en "dur", sans boucle rien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form>
    <input name="num[]" />
    <input name="num[]" />
    <input name="num[]" />
    ... etc ...
    </form>
    A la récupération on pourra alors boucler directement :
    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
    <?php
     
    if (isset($_POST['num'])) {
        $msg = array();
        $liste_num = array();
        foreach($_POST['num'] as $num) {
            if (verif_numpos($num) === FALSE) {
                $msg[] = 'Erreur ... etc ...';
            }
            else {
                $liste_num[] = $num;
            }
        }
    }
    ?>
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    mon formulaire :
    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
     
    <form action="<?php echo htmlentities ($_SERVER['PHP_SELF']); ?>" method="post">
    	<table>
            <!-- première ligne du tableau-->
    		<thead>
    			<tr>
    				<td><label for="com">Commune</label></td>
    				<td colspan="2">
     
    					<select name="com">
    						<option value="">Choisissez...</option>
    							<?php
    							foreach ($datacom as $com) 
    								{
    								// on affiche les informations de l'enregistrement en cours
    								echo '<option value="'.$com['cdc'].'">'.$com['com'].'</option>';
     
    								}
     
    							?>
    					</select>
     
    				</td>
     
    			</tr>
    			<tr>
    				<td><label for="datedec">Date</label></td>
    				<td colspan="2"><input type="text" name="datedec" value="<?php if (isset($_POST['datedec']))echo stripslashes(htmlentities(trim($_POST['datedec']))); ?>" placeholder="JJ/MM/AAAA" size="10" maxlength="10" id="datedec" /></td>
     
    			</tr>
    			<tr>
    				<th>Trânches d'âges an(s)</th>
    				<th>Sexe M</th>
    				<th>Sexe F</th>
    			</tr>
    		</thead>
    		<tbody> <!-- Corps du tableau -->
    			    <tr>
     
    				   <td><label for="m">00-01</label></td>
    				   <td><input type="test" name="m" value="<?php if (isset($_POST['m']))echo stripslashes(htmlentities(trim($_POST['m']))); ?>" placeholder="000" size="1" maxlength="3" id="m" /></td>
    				   <td><input type="test" name="f" value="<?php if (isset($_POST['f']))echo stripslashes(htmlentities(trim($_POST['f']))); ?>" placeholder="000" size="1" maxlength="3" id="f" /></td>
    				</tr>
    				<tr>
    				   <td><label for="m1">02-04</label></td>
    				   <td><input type="test" name="m1" value="<?php if (isset($_POST['m1']))echo stripslashes(htmlentities(trim($_POST['m1']))); ?>" placeholder="000" size="1" maxlength="3" id="m1" /></td>
    				   <td><input type="test" name="f1" value="<?php if (isset($_POST['f1']))echo stripslashes(htmlentities(trim($_POST['f1']))); ?>" placeholder="000" size="1" maxlength="3" id="f1" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">05-09</label></td>
    				   <td><input type="test" name="m2" value="<?php if (isset($_POST['m2']))echo stripslashes(htmlentities(trim($_POST['m2']))); ?>" placeholder="000" size="1" maxlength="3" id="m2" /></td>
    				   <td><input type="test" name="f2" value="<?php if (isset($_POST['f2']))echo stripslashes(htmlentities(trim($_POST['f2']))); ?>" placeholder="000" size="1" maxlength="3" id="f2" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">10-19</label></td>
    				   <td><input type="test" name="m3" value="<?php if (isset($_POST['m3']))echo stripslashes(htmlentities(trim($_POST['m3']))); ?>" placeholder="000"size="1" maxlength="3" id="m3" /></td>
    				   <td><input type="test" name="f3" value="<?php if (isset($_POST['f3']))echo stripslashes(htmlentities(trim($_POST['f3']))); ?>" placeholder="000" size="1" maxlength="3" id="f3" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">20-29</label></td>
    				   <td><input type="test" name="m4" value="<?php if (isset($_POST['m4']))echo stripslashes(htmlentities(trim($_POST['m4']))); ?>" placeholder="000" size="1" maxlength="3" id="m4" /></td>
    				   <td><input type="test" name="f4" value="<?php if (isset($_POST['f4']))echo stripslashes(htmlentities(trim($_POST['f4']))); ?>" placeholder="000" size="1" maxlength="3" id="f4" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">30-39</label></td>
    				   <td><input type="test" name="m5" value="<?php if (isset($_POST['m5']))echo stripslashes(htmlentities(trim($_POST['m5']))); ?>" placeholder="000" size="1" maxlength="3" id="m5" /></td>
    				   <td><input type="test" name="f5" value="<?php if (isset($_POST['f5']))echo stripslashes(htmlentities(trim($_POST['f5']))); ?>" placeholder="000" size="1" maxlength="3" id="f5" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">40-49</label></td>
    				   <td><input type="test" name="m6" value="<?php if (isset($_POST['m6']))echo stripslashes(htmlentities(trim($_POST['m6']))); ?>" placeholder="000" size="1" maxlength="3" id="m6" /></td>
    				   <td><input type="test" name="f6" value="<?php if (isset($_POST['f6']))echo stripslashes(htmlentities(trim($_POST['f6']))); ?>" placeholder="000" size="1" maxlength="3" id="f6" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">50-59</label></td>
    				   <td><input type="test" name="m7" value="<?php if (isset($_POST['m7']))echo stripslashes(htmlentities(trim($_POST['m7']))); ?>" placeholder="000" size="1" maxlength="3" id="m7" /></td>
    				   <td><input type="test" name="f7" value="<?php if (isset($_POST['f7']))echo stripslashes(htmlentities(trim($_POST['f7']))); ?>" placeholder="000" size="1" maxlength="3" id="f7" /></td>
    				</tr>
    				<tr>
    				   <td><label for="ident">60 et plus </label></td>
    				   <td><input type="test" name="m8" value="<?php if (isset($_POST['m8']))echo stripslashes(htmlentities(trim($_POST['m8']))); ?>" placeholder="000" size="1" maxlength="3" id="m8" /></td>
    				   <td><input type="test" name="f8" value="<?php if (isset($_POST['f8']))echo stripslashes(htmlentities(trim($_POST['f8']))); ?>" placeholder="000" size="1" maxlength="3" id="f8" /></td>
    				</tr>
    		</tbody>
    		<tr >
    			<td class="bouton"></td>
                <td class="bouton"><input type="submit" name="validform" value="Valider"/></td>
    			<td class="bouton"><input type="submit" value="Annuler" ONCLICK="window.close()" /></td>
            </tr>
    	</table>
    </form>
    c'est mon code en intégralité.
    est ce que vous pouvez me donné un exemple de deux champs avec ta méthode.merci

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Comme dans l'exemple que j'ai mis, c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <td><input type="text" name="m[]" value="<?php if (isset($_POST['m']))echo stripslashes(htmlentities(trim($_POST['m']))); ?>" placeholder="000" size="1" maxlength="3" id="m" /></td>
    <td><input type="text" name="f[]" value="<?php if (isset($_POST['f']))echo stripslashes(htmlentities(trim($_POST['f']))); ?>" placeholder="000" size="1" maxlength="3" id="f" /></td>
    Puis 2 boucles, une sur $_POST['m'] et une autre sur $_POST['f'], en reprenant le même code.
    Fait un essai (un pure test) avec 2 ou 3 input, et comprendre le principe.

    Faut juste savoir que le HTML intègre nativement que les contrôle (input, select, textarea, etc ... peuvent être des éléments à plusieurs dimensions (1, 2, 3, etc ..).
    Et en retour on obtient la même structure, donc à plusieurs dimensions.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="dim1[dim2][dim3]" />
    Au bout en POST on obtiendra :
    $_POST['dim1']['dim2']['dim3'] -> La valeur


    Ce n'est que des tableaux, même structure, il y a rien de compliqué.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Oui maitre ; là je suis devant un défit !!!
    je vais essayé merci

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    je vais essayé
    Ici je te donne un moyen d'automatiser cela, de rendre les choses plus dynamiques (si on peu dire).

    Pour que ça soit plus facile, il te faut le faire dès le départ, c'est à dire de créer un tableau intégrant les différents m et f.
    Sinon ça risque d'être un peu compliqué pour reprendre la valeur de POST en cas d'erreur dans le formulaire.

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $mf[] = array('m' => '000', 'f' => '000');
    $mf[] = array('m' => '000', 'f' => '000');
    // ... etc 16 fois ...
    Ce tableau pourra alors être exploité à 2 étapes :
    - Celle pour générer le HTML du formulaire
    - Et réinitialisé avec le valeur de POST en cas d'erreur.

    Tu pourrais même rajouté le message d'erreur dans ce tableau accompagnant les ou les éléments qui contiennent les erreurs.


    D'ailleurs, et au niveau du formulaire, au lieu de faire 2 éléments m et f séparé, on peu le faire avec 1 seul.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="text" name="num[m][]" />
    <input type="text" name="num[f][]" />
    Du coup, 1 seule boucle suffit à la récupération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ($_POST['num'] as $num) {
        if (isset($num['m'], $num['f'])) {
            if (verif_numpos($num['m']) === FALSE) // ERREUR sur M
            if (verif_numpos($num['F']) === FALSE) // ERREUR sur F
        }
    }
    (je simplifie)
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Merci RunCodePhp pour ta patience avec mois.
    un exemple simple :
    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
     
    .......
    <form id="monform" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
      <p>
        <label>M :
          <input type="text" name="num[m][]" value="<?php if (isset($_POST['num']))echo stripslashes(htmlentities(trim($_POST['num']))); ?>" />
        </label>
      </p>
      <p>
        <label>F :
          <input type="text" name="num[f][]" value="<?php if (isset($_POST['num']))echo stripslashes(htmlentities(trim($_POST['num']))); ?>" />
        </label>
      </p>
     
      <p>
        <label>
          <input type="submit" name="validform"  value="Envoyer" />
        </label>
      </p>
    </form>
     
    <?php
     
    //////début fonction /////////////
    function numpos ($varnum)
    {
    $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
    $varnum = filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
    if ($varnum === FALSE) return false;
     
    }
     
    ////// fin fonction//////////
     
    ///// début traitement données validés /////////
    if (isset($_POST['validform'])) 
    	{
    		$mf[] = array('m' => '000', 'f' => '000'); // 2 champs
    		$mf[] = array('m' => '000', 'f' => '000'); // //  //
    		$mf[] = array('m' => '000', 'f' => '000');  // //  //
    		$mf[] = array('m' => '000', 'f' => '000');  // //  //
    		$mf[] = array('m' => '000', 'f' => '000');  // //  //
    		$mf[] = array('m' => '000', 'f' => '000');  // //  //
    		$mf[] = array('m' => '000', 'f' => '000'); // //  //
    		$mf[] = array('m' => '000', 'f' => '000'); // //  //
     
    		foreach ($_POST['num'] as $mf) 
    		{
    			if (isset($mf['m'], $mf['f'])) 
    			{
    				if (numpos($mf['m']) === FALSE) // ERREUR sur M
    				{
    				echo 'Veuillez saisir un nombre dans la case M:00-01 SVP.';
    				}
    				if (numpos($mf['F']) === FALSE) // ERREUR sur F
    				{
    				echo 'Veuillez saisir un nombre dans la case F:00-01 SVP.';
    				}
    			}
    		}
     
    }
     
    ////// fin traitement données validés ////////
    a l'exécution j'ai des messages d'erreurs type :
    Warning: trim() expects parameter 1 to be string, array given in C:\wamp\www\s3g\a.php on line 32 Call Stack #TimeMemoryFunctionLocation 10.0067391192{main}( )..\a.php:0 20.0097407384trim ( )..\a.php:32 " />
    si j'ai bien compris y'a un problème compatibilité de champs !!!!!
    problème réglé comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="num[m][]" value="<?php if (isset($_POST['num[m][]']))echo stripslashes(htmlentities(trim($_POST['num[m][]']))); ?>" />
    y'a plus de messages d'erreur warning , mais y'a pas de récupération des données dans le input , aussi y'a pas l'affichage du message de contrôle !!!

  14. #14
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Houlà ... ça ne va pas.

    Ce que je te conseils, c'est de faire les choses pas à pas, petit à petit, car là tu parts sur une pages intégrant trop de choses.
    Si on fait d'une manière à droite et qu'à gauche ce n'est synchro forcément ça coincera.

    Il te faut d'abord comprendre le principe, sinon cela n'a aucun intérêt.
    Dans ce cas vaut mieux opter pour 16 vérifs (une part une), dans un 1er temps.


    Donc fait cela sur une page à part, sur 3 inputs, c'est suffisant.
    Un truc comme ceci :
    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
    <?php
    // Liste des M / F
    $mf[] = array('m' => '000', 'f' => '000');
    $mf[] = array('m' => '000', 'f' => '000');
    $mf[] = array('m' => '000', 'f' => '000');
     
    // Récupération des M / F
    if (isset($_POST['num'])) {
     
        $cpt = 0;
        foreach ($_POST['num'] as $num) {
            if (isset($num['m'], $num['f'])) {
                // Réinitialisation des valeurs de M / F
                // avec ceux obtenus en POST
                $mf[$cpt] = array('m' => $num['m'], 'f' => $num['f']);
     
                if (verif_numpos($num['m']) === FALSE) {
                    $mf[$cpt]['m_err'] = 'Erreur ...';
                }
     
                if (verif_numpos($num['f']) === FALSE) {
                    $mf[$cpt]['f_err'] = 'Erreur ...';
                }
            }
            $cpt++;
        }
    }
     
     
    ?>
    <html>
    <head>
     
    </head>
     
    <body>
    <form action="essai.php" method="post">
    <?php
    foreach($mf as $num) {
        // Retour des éventuels messages d'erreurs
        if (isset($num['m_err'])) echo $num['m_err'].'<br />';
        if (isset($num['f_err']))  echo $num['f_err'].'<br />';
    ?>
    <p>
            <br /><label>MF</label>
            <br /><input type="text" name="num[m][]" value="<?php echo $num['m']; ?>" />
            <br /><input type="text" name="num[f][]" value="<?php echo $num['m']; ?>" />
    </p>
    <?php
    }
    ?>
    <p>
        <input type="submit" name="valider" value="Valider" />
    </p>
    </form>
     
    </body>
    </html>
    Code pas du tout testé, mais ça ne devrait pas être trop loin.

    Ici, rien oblige à intégrer tout le code.
    Tu peux juste générer les inputs, et faire un print_r() pour voir comment sont structurés les données.
    Normalement ça va renvoyer un tableau à 3 dimensions :
    $_POST['num']['m'][0] -> valeur du 1er : num m
    $_POST['num']['f'][0] -> valeur du 1er : num f
    ... etc du 2ème, 3ème ...

    Des couples de M/F en faite, tout comme dans les inputs, et même le $mf à l'origine de tout ça.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  15. #15
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re , le var_dump de $_POST['num'] retourne :
    array
    'm' =>
    array
    0 => string '2a' (length=2)
    'f' =>
    array
    0 => string '20' (length=2)
    donc les valeurs sont bien transmis , mais le contrôle ne s’effectue pas !!!

  16. #16
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    donc les valeurs sont bien transmis , mais le contrôle ne s’effectue pas !!!
    Attention, j'avais rectifié le code à un moment donné, changé $mf par $num pour éviter un conflit entre le tableau créé au début et la boucle.
    Ici -> foreach ($_POST['num'] as $num) {Puis une autre petite erreur : f au lieu de F (ce sont des minuscules).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function numpos ($varnum)
    {
    $int_options = array("options"=>array("min_range"=>0, "max_range"=>256));
    $varnum = filter_var($varnum, FILTER_VALIDATE_INT, $int_options);
    if ($varnum === FALSE) return false;
    return TRUE;
    }
    Rajoute un return comme ci-dessus, sait-on jamais.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  17. #17
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    donc les valeurs sont bien transmis , mais le contrôle ne s’effectue pas !!!
    c'est par rapport au poste de 15h13 ,

  18. #18
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Il y a une erreur concernant la structure des noms coté HTML.
    Il faut plutôt les nommer comme ceci (et explicitement) :
    num[0][m], num[0][f]
    ... etc ...

    En corrigeant :
    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
    <?php
    // Liste des M / F
    $mf[] = array('m' => '000', 'f' => '000');
    $mf[] = array('m' => '000', 'f' => '000');
    $mf[] = array('m' => '000', 'f' => '000');
     
    // Récupération des M / F
    if (isset($_POST['num'])) {
     
        $cpt = 0;
        foreach ($_POST['num'] as $num) {
            if (isset($num['m'], $num['f'])) {
                // Réinitialisation des valeurs de M / F
                // avec ceux obtenus en POST
                $mf[$cpt] = array('m' => $num['m'], 'f' => $num['f']);
     
                if (verif_numpos($num['m']) === FALSE) {
                    $mf[$cpt]['m_err'] = 'Erreur ...';
                }
     
                if (verif_numpos($num['f']) === FALSE) {
                    $mf[$cpt]['f_err'] = 'Erreur ...';
                }
            }
            $cpt++;
        }
    }
     
     
    ?>
    <html>
    <head>
     
    </head>
     
    <body>
    <form action="essai.php" method="post">
    <?php
    foreach($mf as $key => $num) {
        // Retour des éventuels messages d'erreurs
        if (isset($num['m_err'])) echo $num['m_err'].'<br />';
        if (isset($num['f_err']))  echo $num['f_err'].'<br />';
    ?>
    <p>
        <label>MF</label>
        <br /><input type="text" name="num[<?php echo $key; ?>][m]" value="<?php echo $num['m']; ?>" />
        <br /><input type="text" name="num[<?php echo $key; ?>][f]" value="<?php echo $num['f']; ?>" />
    </p>
    <?php
    }
    ?>
    <p>
        <input type="submit" name="valider" value="Valider" />
    </p>
    </form>
     
    </body>
    </html>
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  19. #19
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; RunCodePhp:
    ton idée est bonne , c'est autre manière de voir les choses ou tous simplement être efficace.
    je crois que ta proposition pour l'instant est un TP pour moi , je doit m’entrainai.
    et merci pour ta patience avec moi

  20. #20
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    ton idée est bonne , c'est autre manière de voir les choses ou tous simplement être efficace.
    je crois que ta proposition pour l'instant est un TP pour moi , je doit m’entrainai.
    Ce n'est en rien mon idée, ceci fait totalement partie des normes HTML et autres.
    Elle est peut être méconnue, peu utilisée, et c'est vraiment à tord.

    Ceci dit, c'est un peu pour ça que j'avais suggéré de le faire à part, car quand on découvre à peine quelque chose c'est normal.
    Mais j'insiste, ce n'est juste que de la manipulation/structure de tableaux, rien de plus.
    Ca demande donc d'être assez à l'aise avec les tableaux à plusieurs dimensions.


    A savoir que ceci est tout autant valable pour les formulaires que pour des paramètres en GET dans les liens.

    C'est à dire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="toto.php?num[0][m]=a&num[0][f]=b&num[1][m]=c&num[1][f]=d">Un lien</a>
    Et on obtiendra en GET un tableau à plusieurs dimensions avec la même structure.
    $_GET['num'][0]['m'] -> a
    $_GET['num'][0]['f'] -> b
    $_GET['num'][1]['m'] -> c
    $_GET['num'][1]['f'] -> d
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Message d'erreur - paramètre non valide
    Par mariebru dans le forum Modélisation
    Réponses: 9
    Dernier message: 22/04/2011, 13h12
  2. Fonction Copy() - Message d'Erreur permission Denied
    Par clementh dans le forum Langage
    Réponses: 4
    Dernier message: 01/05/2009, 18h25
  3. Réponses: 2
    Dernier message: 10/01/2007, 23h28
  4. Réponses: 2
    Dernier message: 01/06/2006, 14h54
  5. message d'erreur - passage de paramètres
    Par fxc44 dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2006, 12h53

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