[PHP] Erreur: Cannot use a scalar value as an array

Erreur: Cannot use a scalar value as an array [PHP] - PHP - Programmation

Marsh Posté le 10-12-2007 à 23:26:10    

Salut,
j'ai un problème avec une de mes fonctions. Elle permet de vérifier les valeurs d'un formulaire en fonction de leur type. Je gère le fait qu'un type d'erreur ne doit aparaîtr qu'une seule fois par un tableau $erreur['type_erreur'] dont la case correspondant au type de l'erreur détectée est positionnée à true dès qu'une de ces erreurs apparaît. Ca fonctionne si un seul type d'erreur, mais dès qu'un deuxième type d'erreur apparaît, j'ai une erreur de php "Cannot use a scalar value as an array". Voilà le code:

Code :
  1. function valider_var($chaine, $type, $erreur=array())
  2.    {
  3.    if ($erreur==array())
  4.       $erreur = array('texte' => false, 'nom' => false, 'nombre' => false, 'url' => false, 'date' => false);
  5.    debug($erreur);
  6.    if (($type==FTEXTE) && (!preg_match("/[-a-zA-Z_0-9\.]*/", $chaine)))
  7.       {
  8.       if (!$erreur['texte'])
  9.          {
  10.          passer_message_info("Attention: les textes ne doivent contenir que des lettres, chiffres ou les caractères spéciaux suivants: '.', '-', '_'.", INFO);
  11.          $erreur['texte'] = true;
  12.          return false;
  13.          }
  14.       }
  15.    if (($type==FNOM) && (!preg_match("/[a-zA-Z]+[-a-zA-Z_0-9\.]*[a-zA-Z0-9]+/", $chaine)))
  16.       {
  17.       if (!$erreur['nom'])
  18.          {
  19.          passer_message_info("Attention: les noms doivent commencer obligatoirement par une lettre, terminer par une lettre ou un chiffre, et ne contenir que des lettres, chiffres ou les caractères spéciaux suivants: '.', '-', '_'.", INFO);
  20.          $erreur['nom'] = true;
  21.          return false;
  22.          }
  23.       }
  24.    elseif (($type==FNOMBRE) && !is_numeric($chaine))
  25.       {
  26.       if (!$erreur['nombre'])
  27.          {
  28.          passer_message_info("Attention: les id et les années ne doivent être composés que de chiffres.", INFO);
  29.          $erreur['nombre'] = true;
  30.          return false;
  31.          }
  32.       }
  33.    elseif (($type==FURL) && (!preg_match('#^(http://)([-a-z0-9\._])+\.[a-z]{2,6}(/[-a-z0-9\._]*)*#i', $chaine)))
  34.       {
  35.       if (!$erreur['url'])
  36.          {
  37.          passer_message_info("Attention: les adresses http doivent être de la forme: http://url.ext .", INFO);
  38.          $erreur['url'] = true;
  39.          return false;
  40.          }
  41.       }
  42.    elseif (($type==FDATE) && (!preg_match('.^([0-2][0-9]|3[0-1])[/-](0[1-9]|1[0-2])[/-][1-2]([0-9]){3}$.', $chaine)))
  43.       {
  44.       if (!$erreur['date'])
  45.          {
  46.          passer_message_info("Attention: les dates doivent être entrées au format jj/mm/aaaa ou jj-mm-aaaa.", INFO);
  47.          $erreur['date'] = true;
  48.          return false;
  49.          }
  50.       }
  51.    return true;
  52.    }


 
J'appelle la fonction comme ceci:
 

Code :
  1. foreach ($var_formulaire as $nom_champs)
  2.          {
  3.          if ($valeurs_champs[$i] = traiter_var($_POST[$nom_champs], 0, true))
  4.                 {
  5.                 if (!valider_var($valeurs_champs[$i], $types_formulaire[$i], $erreur))
  6.                       $erreur=true;
  7.                 }
  8.           $i++;
  9.           }


 
Est-ce que quelqu'un aurait une idée de comment résoudre ce problème?
Merci d'avance!

Reply

Marsh Posté le 10-12-2007 à 23:26:10   

Reply

Marsh Posté le 11-12-2007 à 09:28:10    

Euh... C'est quelle ligne exactement qui provoque l'erreur ?

Reply

Marsh Posté le 11-12-2007 à 11:18:19    

Salut,
l'erreur porte toujours sur une des lignes " $erreur['type_erreur'] = true; ", mais cela se produit seulement lors de l'apparition de plusieurs erreurs (donc lorsqu'il doit modifier plusieurs cellules du tableau).

Reply

Marsh Posté le 11-12-2007 à 11:20:52    

On veut la ligne précise, ce sera mieux ;) ;)

Reply

Marsh Posté le 11-12-2007 à 12:24:03    

- ton $erreur n'est pas défini la première fois que t'appelles valider_var ;
- tu lui donnes "true" comme valeur alors que ta fonction veut un array ;
- pour savoir si ton array est vide tu as count($array) == 0 ;
- etc...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed