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

PHP & Base de données Discussion :

Function php et array qui reste vide


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut Function php et array qui reste vide
    Bonjour,

    Avant de commencer je tiens déjà à remercier ceux qui prendrons le temps de lire mon post.

    Je crée un formulaire HTML et j'aimerai effectuer plusieurs contrôle afin d'être certain que les champs nécessaire soient remplis.

    J'ai donc pour cela une page membre.php et une page fonctions.php

    Voici la fonction que j'utilise afin de vérifier que les champs nécessaire soient remplis. Par le même occasions je remplis mon array $error avec les champs non remplis par l'utilisateur:

    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
     
    function VerificationChamps($champs_non_verifie) {
    $array_champs_non_verifie = explode(',', $champs_non_verifie);
    	foreach($_POST as $cle => $element) {
        	if(!in_array($cle,$array_champs_non_verifie)) {
        		if(empty($element)) $error[] = $cle.' est non renseigné';
        	}
      	}
    	if(empty($error)) {
    		return TRUE;
    	}
    	else {
    		return FALSE;
    	}
    }

    Dans ma page membre.php j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $champs_non_verifie = ('lastname,city');
    $array_champs_non_verifie = explode(',', $champs_non_verifie);
    $error = array();
     
    if(VerificationChamps($champs_non_verifie)==TRUE) {
    // Continuer d'autre contrôle
    }
    else {
    // print_r($error);
    }
    Mon gros problème est que le TRUE ou FALSE passe comme il faut mais que mon Array $error reste vide!

    Quand je ne passe pas par une fonction, j'arrive à obtenir le résultat de l'array $erreur...

    Auriez-vous une idée, solution?

    Merci d'avance et bonne journée,

    Christophe

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Une fonction, n'a, par défaut, pas accès aux variables externes. Il faut donc fournir $error en paramètre (paramètre sous forme de référence s'il est modifié - (in)out) ou la déclarer global en début de fonction ou y faire référence via $GLOBALS['error'].

    Mais ici autant retourner directement le tableau $error (interne à la fonction), ça faciliterait les choses et on peut ensuite tester s'il est vide ou non directement.

    Plus d'informations dans la documentation : Portée des variables.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut Merci pour votre réponse rapide
    Citation Envoyé par julp Voir le message
    Une fonction, n'a, par défaut, pas accès aux variables externes. Il faut donc fournir $error en paramètre (paramètre sous forme de référence s'il est modifié - (in)out) ou la déclarer global en début de fonction ou y faire référence via $GLOBALS['error'].

    Mais ici autant retourner directement le tableau $error (interne à la fonction), ça faciliterait les choses et on peut ensuite tester s'il est vide ou non directement.

    Plus d'informations dans la documentation : Portée des variables.
    Je suis débutant et je viens de lire l'info que vous m'avez donnée, je dois dire que cela m'a beaucoup aidé!

    Je viens d'ajouter la ligne suivante à mon code et cela marche à merveille!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function VerificationChamps($champs_non_verifie) {
    global $error;
    $error = array();
    Encore un grand merci pour votre aide précieuse et super rapide.

    Christophe

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut Suite du problème
    Re bonjour forum et merci d'avance pour votre aide,

    Maintenant je rencontre le problème avec 2 fonctions, l'une efface la variable globale de l'autre, moi j'aimerai additionner le résultat des deux!

    Voici le code des deux fonctions:
    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
     
    function VerificationChamps($champs_non_verifie) {
    global $error;
    $array_champs_non_verifie = explode(',', $champs_non_verifie);
    	foreach($_POST as $cle => $element) {
        	if(!in_array($cle,$array_champs_non_verifie)) {
        		if(empty($element)) $error[] = $cle.' est non renseigné';
        	}
      	}
    	if(empty($error)) {
    		return TRUE;
    	}
    	else {
    		return FALSE;
    	}
    }
     
    function valid_email($str) {
    global $error;
    if (! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) $error[] = 'Email incorrect';
    	if(empty($error)) {
    		return TRUE;
    	}
    	else {
    		return FALSE;
    	}
    }

    Le code de ma page membre.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(valid_email($_POST['mail'])==TRUE && VerificationChamps($champs_non_verifie)==TRUE) {
    // Suite du code
    }
    else {
    // print_r($error);
    }
    Le array $error se remplis donc correctement, mais n'additionne pas les deux fonctions, uniquement les erreurs d'une des 2 fonctions sont dans mon array. Quand j'inverse l'ordre des fonctions, j'obtiens le contraire, cela montre donc bien qu'un fonctions écrase l'autre.

    Avez vous une idée de comment conservé le contenu de mon array et y additionner de nouvelle erreur.

    Merci d'avance pour votre aide et excusez moi pour mon ignorance, je débute et votre aide m'est précieuse.

    Christophe

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut Solution
    Bonjour Forum,

    Je crois que je viens de trouver qu'après une des conditions du if = FALSE il n'exécute pas les autres conditions du if. La fonction 2 ne sera donc pas prise en compte et ne remplira donc pas mon array, je peux me tromper...

    Merci pour votre aide.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    C'est bien le cas. Les opérateurs && et || (ou leur autre forme, and et or) sont dites coupe-circuit : elles n'évaluent pas les expressions de droite s'il n'y en a pas besoin. Donc dès que PHP a une condition vraie avec || ou fausse avec &&, il stoppe l'analyse de l'expression.

    (la doc)

Discussions similaires

  1. Réponses: 20
    Dernier message: 19/06/2014, 23h45
  2. ProgressBar qui reste vide
    Par dragonxav72 dans le forum GTK+
    Réponses: 6
    Dernier message: 27/04/2013, 15h22
  3. DataGridView via Linq qui reste vide
    Par sphynxounet dans le forum C#
    Réponses: 3
    Dernier message: 16/09/2010, 11h12
  4. Applet sans erreur qui reste vide (grise)
    Par savageman86 dans le forum Applets
    Réponses: 2
    Dernier message: 29/05/2009, 22h05
  5. [AJAX] 3 liste lièes en Ajax dont une qui reste vide
    Par mimotin dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/08/2008, 20h40

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