Soucis technique sur la verification de plusieurs champs..

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 27 Septembre 2008.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Salut,
    Je rencontre un petit soucis sur la vérification de plusieurs champs. Si un champ est différent du résultat souhaité je lui ajoute +1 et je vérifie ainsi 3 champ. Donc si le résultat est supérieure à 0 ou inférieure à 3, j'ai mon erreur qui s'affiche!
    La ou sa merdouille, c'est qu'il faut qu'il y est une erreur à partir de la ligne 2 pour que l'erreur de la ligne 1 s'affiche 8O ...
    En résumé:
    Actuellement si j'ai une erreur sur mes 3 premier champ et aucune erreur dans les 3 suivants, j'ai rien qui s'affiche.
    Code:
    ...
    $i =0;
    $a =0;
    //ligne 1
    if($lechamp21 != 0000-00-00){
    $i++;
    }
    if($lechamp22 != 0000-00-00){
    $i++;
    }
    if($lechamp23 != 0){
    $i++;
    }
    if($i > 0 and $i < 3){
    echo 'erreur ligne 1';}
    
    //ligne 2
    
    if($lechamp24 != 0000-00-00){
    $a++;
    }
    if($lechamp25 != 0000-00-00){
    $a++;
    }
    if($lechamp26 != 0){
    $a++;
    }
    if($a > 0 and $a < 3){
    echo 'erreur ligne 2';}
    ...
    
    J'ai essayé avec des else if mais rien n'y fait !
    Ou se trouve mes erreurs svp ?
    Merci
     
  2. Bacteries
    Bacteries WRInaute passionné
    Inscrit:
    27 Mai 2004
    Messages:
    1 253
    J'aime reçus:
    0
    A mon avis tu utilises quelque chose de bien compliqué pour pas grand chose.

    Que souhaites tu faire exactement?

    Car là avec un booléen :
    Code:
    $err = false;
    $ligne = '';
    if($lechamp21 != '0000-00-00' || $lechamp22 != '0000-00-00' || $lechamp23 != '0'){
    $err = true;
    $ligne = '1';
    }
    
    
    if($lechamp24 != '0000-00-00' || $lechamp25 != '0000-00-00' || $lechamp26 != '0'){
    if (err) {
     $ligne .= '& 2';
    } else {
      $ligne .= '2';
    }
    $err = true
    }
    
    if ($err) {
      echo 'Erreur ligne ' . $ligne;
    }
    
    Y'a sureement de faire ça mieux et plus simplement selon ce que tu veux faire.
     
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Merci de m'avoir répondu Bacteries :).

    Alors, ce que je souhaite faire:

    Les variables suivantes
    $lechamp21 $lechamp22 $lechamp23
    correspondent aux champs suivant
    date debut1 date fin1 prix1
    et ainsi de suite sur 10 lignes .. jusqu'à date debut10 date fin10 prix10soit en tout 20 dates et 10 prix.
    Je veux contrôler chaque ligne par groupe de 3 de façon à ce que si un des 3 champs de la première ligne date debut1 date fin1 prix1 est vide, cela me retourne une erreur.
    Soit sur une même ligne les 3 champs sont vides, soit ils sont tout les 3 remplis et ainsi de suite.

    Par ailleurs et pour vérifier en plus la validité de chaque champ "date", je souhaiterais ajouter la condition suivante:
    Code:
    else if(!eregi("^([0-9]{4})-([0-9]{2})-([0-9]{2})*$",$lechamp21))
    et pour les différents prix:
    Code:
    else if (!eregi("^[0-9]*$",$lechamp23))
    Voilou en gros ce que je tente de faire ^^.
     
  4. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    Et pourquoi ne fais tu pas une boucle sur un tableau pour la gestion de tes "lignes" ? Ca me semblerait quand même beaucoup plus logique qu'un immonde copier/coller difficilement maintenable :p
     
  5. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    ..immonde copier/coller?

    Pour être franc, je suis un peut largué sur l'histoire de la boucle sur un tableau .. un exemple stp ?
    Merci
     
  6. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    D'après ce que tu disais, tu as 10 lignes qui contiennent chacune 3 champs.

    C'est à dire que tu as 10 fois ce genre de code, les uns à la suite des autres :
    Code:
    //ligne 1
    if($lechamp21 != 0000-00-00){
    $i++;
    }
    if($lechamp22 != 0000-00-00){
    $i++;
    }
    if($lechamp23 != 0){
    $i++;
    }
    if($i > 0 and $i < 3){
    echo 'erreur ligne 1';}
    Et ça ne te choque pas ?
     
  7. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bhin .. je ne suis pas une flèche dans le domaine alors je sais pertinemment que c'est pas génial même si parfois sa fonctionne ... et compte tenue de mes maigres "compétences" en php ... non, sa ne me choque pas plus que sa.

    Ceci dit, j'essaye ^^.

    La ou je sèche, c'est que je ne parvient pas à contrôler c'est 3 champs en même temps.
    Si je fais if($lechamp21 != '0000-00-00' || $lechamp22 != '0000-00-00' || $lechamp23 != '0') sa ne marchera pas si un des champs est remplit correctement, idem avec des or ou alors il y a une subtilitée qui ma échappé...

    Tu me parle de boucle dans un tableau .. moi je pense à un 'while' et dans ce cas, je ne vois pas quelle peut être la condition.

    C'est pas manque d'essayer et de vouloir comprendre ^^ !
     
  8. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    Et si demain tu passes de 10 à 100 lignes, tu fais comment ?

    Code:
    foreach( $listeLignes as $numeroLigne as $uneLigne ){
        if( $ligne['dateDebut'] != 'XXX' or $ligne['dateFin'] != 'XXX'  [etc...] ){
            echo "Erreur ligne $numeroLigne.\n";
        }
    }
    Cela ne te semble pas beaucoup plus clair comme code ?


    Sinon pour ton test, tu cherches à faire quoi au juste ? Declencher une erreur dès qu'un champ est "non renseigné" ?

    Code:
    if($lechamp21 != '0000-00-00' or $lechamp22 != '0000-00-00' or $lechamp23 != '0') {
    // au moins un des champs est "rempli"
    }
    Code:
    if($lechamp21 != '0000-00-00' and $lechamp22 != '0000-00-00' and $lechamp23 != '0') {
    // les 3 champs sont "remplis"
    }
    Autre ?
     
  9. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Ouiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii ^^ .Je veux passer à l'action suivante uniquement si tout les champs d'une même ligne sont renseignés ou non renseignés. Soit c'est totalement vide, soit c'est totalement plein.

    Code:
    if($lechamp21 != '0000-00-00' or $lechamp22 != '0000-00-00' or $lechamp23 != '0') {
    // au moins un des champs est "rempli"
    }
    Donc sa me retourne une erreur si 1 ou 2 ou les 3 champs sont remplit.


    Je dois mal m'expliquer ^^, alors je ré essaye une dernière fois:
    En version "bourrin" sa donne un truc du style:
    Code:
    ...
    $lechamp21 = $_POST["date_debut_1"];
    $lechamp22 = $_POST["date_fin_1"];
    $lechamp23 = $_POST["prix_1"];
    $lechamp24 = $_POST["date_debut_2"];
    $lechamp25 = $_POST["date_fin_2"];
    $lechamp26 = $_POST["prix_2"];
    
    //on contrôle les champs
    
    if($lechamp21 != '' || $lechamp22 == '' || $lechamp23 != ''){
    echo 'erreur ligne 1';
    }
    else if($lechamp21 != '' || $lechamp22 != '' || $lechamp23 == ''){
    echo 'erreur ligne 1';
    }
    else if($lechamp21 != '' || $lechamp22 == '' || $lechamp23 == ''){
    echo 'erreur ligne 1';
    }
    else if($lechamp21 == '' || $lechamp22 != '' || $lechamp23 != ''){
    echo 'erreur ligne 1';
    }
    else if($lechamp21 == '' || $lechamp22 == '' || $lechamp23 != ''){
    echo 'erreur ligne 1';
    }
    else if($lechamp21 == '' || $lechamp22 != '' || $lechamp23 == ''){
    echo 'erreur ligne 1';
    }
    else if(!eregi("^([0-9]{4})-([0-9]{2})-([0-9]{2})*$",$lechamp21)){ 
    echo 'erreur ligne 1';
    }
    else if(!eregi("^([0-9]{4})-([0-9]{2})-([0-9]{2})*$",$lechamp22)){ 
    echo 'erreur ligne 1';
    }
    else if (!eregi("^[0-9]*$",$lechamp23)){ 
    echo 'erreur ligne 1';
    }
    
    //Arrivé ici c'est ok, alors je recommence pour la seconde ligne
    
    if($lechamp24 != '' || $lechamp25 == '' || $lechamp26 != ''){
    echo 'erreur ligne 2';
    }
    else if($lechamp24 != '' || $lechamp25 != '' || $lechamp26 == ''){
    echo 'erreur ligne 2';
    }
    else if($lechamp24 != '' || $lechamp25 == '' || $lechamp26 == ''){
    echo 'erreur ligne 2';
    }
    else if($lechamp24 == '' || $lechamp25 != '' || $lechamp26 != ''){
    echo 'erreur ligne 2';
    }
    else if($lechamp24 == '' || $lechamp25 == '' || $lechamp26 != ''){
    echo 'erreur ligne 2';
    }
    else if($lechamp24 == '' || $lechamp25 != '' || $lechamp26 == ''){
    echo 'erreur ligne 2';
    }
    else if(!eregi("^([0-9]{4})-([0-9]{2})-([0-9]{2})*$",$lechamp24)){ 
    echo 'erreur ligne 2';
    }
    else if(!eregi("^([0-9]{4})-([0-9]{2})-([0-9]{2})*$",$lechamp25)){ 
    echo 'erreur ligne 2';
    }
    else if (!eregi("^[0-9]*$",$lechamp26)){ 
    echo 'erreur ligne 2';
    }
    
    //Arrivé ici c'est ok, alors je recommence pour la troisième ligne
    etc....
    etc...
    
    Bon, c'est long, pas esthétique, et en plus sa marche pas .. mais c'est le principe que je cherche..
     
  10. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    Justement le fait de dupliquer 40 fois le même test ne fait qu'ajouter de la complexité inutilement...

    L'essentiel est d'exprimer clairement le besoin.
    Pour une même ligne, tu veux que tous les champs soient remplis ou aucun. (cf ton "Soit c'est totalement vide, soit c'est totalement plein.").

    Et bah en PHP ça se retranscrit de la même façon...
    Cas valide 1 : tous les champs sont vides.
    Code:
    if( $champ1 == '' and $champ2 == '' and $champ3 == '' )
    Cas valide 2 : tous les champs sont remplis.
    Code:
    if( $champ1 != '' and $champ2 != '' and $champ3 != '' )
    On regroupe les deux :
    Code:
    if( ( $champ1 == '' and $champ2 == '' and $champ3 == '' ) or
        ( $champ1 != '' and $champ2 != '' and $champ3 != '' ) )
    Et comme toi tu cherches le contraire, on ajoute le "NOT" (et les parenthèses qui vont bien) :
    Code:
    if( ! ( ( $champ1 == '' and $champ2 == '' and $champ3 == '' ) or
        ( $champ1 != '' and $champ2 != '' and $champ3 != '' ) ) )
    Ou encore, on ressort le théorème de De Morgan... hum, j'en avais même oublié le nom :
    Code:
    if( ( $champ1 != '' or $champ2 != '' or $champ3 != '' ) and
        ( $champ1 == '' or $champ2 == '' or $champ3 == '' ) )
     
  11. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Merci Bool ,

    Je comprend le fond mais pas la logique ..(désolé).
    J'ai repris tes différents codes que je me suis "traduit" pour mieux comprendre.
    Code:
    if( ( $champ1 == '' and $champ2 == '' and $champ3 == '' ) or
        ( $champ1 != '' and $champ2 != '' and $champ3 != '' ) )
    
    La les conditions sont remplies, donc ces ok.

    Après tu dis que l'on cherche le contraire:

    Code:
    if( ! ( ( $champ1 == '' and $champ2 == '' and $champ3 == '' ) or
        ( $champ1 != '' and $champ2 != '' and $champ3 != '' ) ) )
    
    En version "traduite" sa donne donc:
    Code:
    	Si
    	$champ1 plein et $champ2 plein et $champ3 plein 
    	OU
    	$champ1 vide et $champ2 vide et $champ3 vide 
    	
    
    Donc normalement sur le echo qui suit sa me retourne une erreur si les 3 champs sont remplit ou vide. Ce qui revient à la finale au 1er code, donc pas bon .. non ?

    Sur le code suivant:
    Code:
    if( ( $champ1 != '' or $champ2 != '' or $champ3 != '' ) and
        ( $champ1 == '' or $champ2 == '' or $champ3 == '' ) )
    
    Version traduit sa donne:
    Code:
    	SI 
    	$champ1 plein ou $champ2 plein ou $champ3 plein
    	ET
    	$champ1 vide ou $champ2 vide ou $champ3 vide
    
    
    Donc normalement sur le echo qui suit, sa me retourne une erreur si un des champs est remplit ou vide donc pas bon non plus..non ?

    Les conditions recherchés devrait être normalement:
    Code:
    	Si
    	$champ1 plein et $champ2 plein et $champ3 vide 
       OU	
    	$champ1 plein et $champ2 vide et $champ3 plein 
    	OU
    	$champ1 plein et $champ2 vide et $champ3 vide 
    	OU
    	$champ1 vide et $champ2 plein et $champ3 plein 
    	OU
    	$champ1 vide et $champ2 vide et $champ3 plein 
    	OU
    	$champ1 vide et $champ2 plein et $champ3 vide
    
    	--> ERREUR
        --> SI OK ON CONTINUE
    
    D'avance navré si je suis totalement à côté de la plaque !
    PS: sur les conditions je fais comme sa:
    Si -> ma condition est pas remplit -> erreur -> sinon je continue
     
  12. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    Non tu as oublié de "traduire" le "NOT" devant, qui a pour unique effet d'inverser la condition.

    Et surtout dans la suite, si tu négliges les parenthèses tu n'y arriveras jamais...

    Code:
       SI
    (   $champ1 plein ou $champ2 plein ou $champ3 plein )
       ET
    (   $champ1 vide ou $champ2 vide ou $champ3 vide )
    Ici ça veut dire que si tu as à la fois un champ vide et un champ plein, c'est qu'il y a une erreur. Et ça correspond exactement à ce que tu disais : "tout ou rien".
     
  13. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Bhin non, je ne l'ai pas oublié justement.

    Ton code:
    Code:
    if( ! ( ( $champ1 == '' and $champ2 == '' and $champ3 == '' ) or
        ( $champ1 != '' and $champ2 != '' and $champ3 != '' ) ) ) 
    
    revient de façon traduite à:
    Code:
       Si
       ($champ1 plein et $champ2 plein et $champ3 plein)
       OU
       ($champ1 vide et $champ2 vide et $champ3 vide)
        
    
    Le contraire de $champ1 == '' sinon dit $champ1 vide est bien $champ1 plein ?
    Donc la première ligne du code dit bien:
    -> si tout est plein
    ou
    Pour la seconde:
    -> si tout est vide

    PS: si je te prend la tête, tu as le droit de ne pas me répondre ^^.
     
  14. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    Lol, non tu vas trop vite en raccourcis :
    Code:
    if( ! ( ( $champ1 == '' and $champ2 == '' and $champ3 == '' ) or
        ( $champ1 != '' and $champ2 != '' and $champ3 != '' ) ) ) 
    correspond à ça :
    Code:
       Si
       ($champ1 plein OU $champ2 plein OU $champ3 plein)
       ET
       ($champ1 vide OU $champ2 vide OU $champ3 vide)
    C'est à dire la même chose que mon dernier bloc.

    Cf le théorème de De Morgan justement. Si tu veux "simplifier" le NOT, il faut l'appliquer à tous les éléments et remplacer tous les OU par des ET (et vice/versa).
     
  15. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Avec un peut de retard, merci Bool ^^.

    Je ne pensais pas que le "NOT" influait également sur les "and" ,"or" ...
    En tout cas, j'espère m'en souvenir et encore merci :wink:
     
Chargement...
Similar Threads - Soucis technique verification Forum Date
petit soucis url rewriting URL Rewriting et .htaccess 17 Janvier 2022
Besoin d'aide pour soucis avec le certbot chez OVH - VPS URL Rewriting et .htaccess 6 Avril 2021
Avez vous des soucis avec paypal? Moi j'en peux plus. Monétisation d'un site web 13 Mars 2021
Soucis Meta description et Drupal Référencement Google 12 Octobre 2020
Soucis de description dans les resultats google Problèmes de référencement spécifiques à vos sites 10 Juin 2020
WordPress Soucis 404 suite changement structure permaliens Référencement Google 18 Juin 2019
Soucis d'affichage de publicité AdSense 4 Janvier 2018
soucis d'indexation Demandes d'avis et de conseils sur vos sites 27 Octobre 2017
Soucis d'affichage dans Google ! Référencement Google 22 Avril 2017
Soucis de classement ou incompréhension Problèmes de référencement spécifiques à vos sites 29 Octobre 2015
Prestashop - Soucis Url - Site multilingue Débuter en référencement 24 Juin 2015
Soucis de redirection sans www vers www URL Rewriting et .htaccess 13 Avril 2015
Soucis avec PageSpeed Crawl et indexation Google, sitemaps 23 Février 2015
Le nom de mon blog pourrait-il me donner des soucis légaux ? Débuter en référencement 26 Janvier 2015
Soucis menu drop down on click Développement d'un site Web ou d'une appli mobile 13 Novembre 2014
soucis de réécriture URL Rewriting et .htaccess 29 Octobre 2014
Soucis URL Rewriting et paramètres GET (php) URL Rewriting et .htaccess 1 Septembre 2014
Soucis avec un charset trompeur, enfin je pense Développement d'un site Web ou d'une appli mobile 5 Août 2014
[Soucis indexation] Classement page indexée + désindexation + 404 Crawl et indexation Google, sitemaps 21 Juillet 2014
Soucis d'indexation de pages avec passage de parametres Crawl et indexation Google, sitemaps 27 Mai 2014