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 in_array qui ne fonctionne pas sur un tableau associatif


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Points : 51
    Points
    51
    Par défaut Fonction in_array qui ne fonctionne pas sur un tableau associatif
    Bonjour/Bonsoir

    Avant de faire ce topic sachez que j'ai cherché dans les forums (pas une journée entière non plus) sans trouver de réponses.

    J'ai créé une procédure pour vérifier la longueur de champs d'un formulaire.
    Cette procédure sera utilisée avec 4 formulaires différents mais il ont des champs "commun" (qui ont le même nom/identifiant).
    En revanche je ne teste pas la longueur des champs de type textearea car ils sont illimitées dans la base de données.

    Donc j'ai un tableau contenant le nom des champs à vérifier et pour chacun leur longueur maximum.
    Ensuite je parcours mon $_POST et si le champ actuel de ma boucle est dans mon tableau, alors je dois tester la longueur de ce champ.
    Le problème c'est que le test pour déterminer si mon champ est dans le tableau ou pas (et donc dont la longueur est à tester ou pas) ne fonctionne pas.
    Comme vous allez le voir dans le code j'utilise la fonction in_array.
    Je me demande si le problème ne vient pas du fait que le tableau dans lequel la fonction doit chercher est un tableau associatif .. ?

    J'ai mis des ptits mouchard et un pti "nop" s'il ne trouve pas le champ dans le tableau et bien pour tout les champs il m'affiche "nop"


    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
    function verifFieldsLenght($p)
    {
    	$error_lenght_field_message = "";
    	$lenght_error = false; //Variable indiquant si une ou plusieurs erreur ont eut lieu et si donc un ou plusieurs champs sont trop long.
     
    	switch($p)//En fonction de la page et donc l'objet en cours d'ajout, les champs a vérifier sont différent et leur taille maximum aussi, on crée donc un tableau associatif associant nom du champ a sa longueur maxi.
    	{
    		case "l" : $fieldsLenght = array("titre" => "50", "application"=>"50", "version"=>"15", "societe"=>"75","url"=>"200","numero"=>"100","clef"=>"100","date"=>"10", "nom"=>"100", "mail"=>"150");
    			break;
    		case "s" : $fieldsLenght = array("titre" => "50", "utilisateur"=>"35", "password"=>"50", "url"=>"200");
    			break;
    		case "cb" : $fieldsLenght = array("titre" => "50", "titulaire"=>"75", "numero"=>"50", "date_expiration"=>"10", "type_cb"=>"25");
    			break;
    		case "cp" : $fieldsLenght = array("titre" => "50", "banque_name"=>"50", "numero"=>"50", "type_compte"=>"50");
    			break;
    	}
    	//Création d'un tableau pour donner la "traduction" des champs n'ayant pas le meme nom ds la base et ds les formulaires d'ajout/d'affichage
    	$fieldsLocalized = array("url"=>"site web","numero"=>"numéro", "password"=>"mot de passe", "date_expiration"=>"date d'expiration", "type_cb"=>"type", "banque_name"=>"Banque", "type_compte"=>"type");
     
    	foreach($_POST as $key=>$var) //Parcours du tableau $_POST contenant les champs remplis
    	{
    		if(in_array($key, $fieldsLenght)) //Si le champs testé se trouve dans le tableau contenant tout les champs et leur taille repsective alors on test (les champs description et notes sont illimités et ne sont donc pas testés)
    		{
    			echo $key;
    			if(strlen($var) > $fieldLenght[''.$key.'']) //Si la longueur de la valeur du champ est plus longue que la longueur maxi indiquée ds le tableau on passe la variabl d'erreur a vrai et on stocke le nom du champ trop long
    			{
    			 	$lenght_error = true;
    			 	$name_wrong_field[] = $key;
    			}
    		}
    		else
    		{echo "nop";}
    	}
    	if($lenght_error) //S'il y a eut une erreur
    	{
    		echo "ERREUR";
    		$nb_wrong_field = sizeof($name_wrong_field); //On récupère le nombre d'élément ds le tableau pour savoir combien de champ sont trop long et adapter le emssage d'erreur en fonction de ca.
     
    		if($nb_wrong_field == 1)//Cas où seul 1 champ est trop long
    		{
    			if(in_array($name_wrong_field[0], $fieldsLocalized)) //Si le champ trop long se trouvent aussi ds le tableau des champs "traduit" on récupère sa "traduction"
    			{
    				$name_field = $fieldsLocalized["".$name_wrong_field[0].""];
    			}
    			else
    			{
    				$name_field = $name_wrong_field[0];
    			}
     
    			$error_lenght_field_message = "<span class='error'>Le champ <span onClick=\"setFocus('".$name_wrong_field[0]."')\">".$name_field."</span> est trop long, il doit faire ".$fieldsLengt[$name_wrong_field[0]]." caractères maximum.";
    		}
    		elseif($length_tab > 1)
    		{
    			$error_lenght_field_message = "Les champs ";
    			for($i = 0; $i <= $length_tab; $i++)
    			{
    				//TRAITEMENT A VENIR
    			}
    		}
    	}
     
    	unset($fieldsLengt);
    	unset($name_too_long_field);
     
    	return($error_lenght_field_message);
    }

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par Tibimac Voir le message
    Je me demande si le problème ne vient pas du fait que le tableau dans lequel la fonction doit chercher est un tableau associatif .. ?
    oui c'est ça
    pour tester si la clé existe dans le tableau il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($fieldLenght[$key]))

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Points : 51
    Points
    51
    Par défaut
    Ah ouai effectivement ca fonctionne
    Bon et bien j'aurais appris que la fonction in_array ne fonctionne pas sur les tableaux associatif.
    Merci beaucoup pour ton aide

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

Discussions similaires

  1. fonction confirm() qui ne fonctionne pas sur IE7
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2008, 09h47
  2. Script JSP qui ne fonctionne pas sur n'importe quel poste
    Par vannary dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 18/12/2006, 11h56
  3. Fonction While {} qui ne fonctionne pas
    Par zoom61 dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2006, 12h17
  4. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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