[PHP] Undefined Variable existante ...

Résolu/Fermé
Utilisateur anonyme - Modifié par sonik21 le 2/05/2010 à 00:41
 Utilisateur anonyme - 3 mai 2010 à 18:13
Bonjour,
Voilà maintenant une bonne heure que je bloque sur une erreur, sur un script pourtant très simple, mais je ne vois vraiment pas pourquoi il me renvoi un "Undefined variable" :
<?php  
function get_errors($errors_log)  
{  
 $errors_file = $errors_log;  
 $errors_log = implode("\n", ${$errors_log});  //le script bloque ici  
 $fp_errors_log = fopen($errors_file.'.txt', 'a+');  
 fwrite($fp_errors_log, $errors_log);  
 fclose($fp_errors_log);  
}  

$error = array();  
$error[] = 'erreur#1';  
$error[] = 'erreur#2';  
$error[] = 'erreur#3';  

get_errors('error'); //apparemment la variable $error ne serait pas définie ...  
?>


Je ne comprends vraiment pas pourquoi j'ai le droit à ceci :
Notice: Undefined variable: error in S:\wamp\www\*********\*****\***.php  on line 6
(et par conséquent une erreur sur l'implode ensuite)

Merci d'avance pour votre aide :)



It's Hard to concentrate, but if it can Make you feel better ...(?)

2 réponses

Euh il me semble au contraire que $error est définie trois fois et que ce n'est pas une variable mais un tableau.

Je peut me tromper mais tu as indiqué dans ta fonction que le paramétre doit être une variable:
//--
function get_errors($errors_log)
//--
/* pour indiquer que c'est un tableau le paramétre il faut mettre:
function get_errors($errors_log[]){
//-- ce que fait ma fonction

}

//--------autre problème avec les tableaux, décidément, mais bon la ca dervait marquer une erreur direct

$error = array();
// odnc on a un array
$error[] = 'erreur#1';// faux on n'affecte pas une string à un array l'opérateur de concaténisation est le '.' en php.
/* donc au lieu de:
$error[] = 'erreur#2';
$error[] = 'erreur#3';
*/
//-- c'est plus juste:

$error[].='erreur#1;/*-- le point dans le cas d'un array a indice numérique et sans le dit indice entre les crochets va concatener/rajouter le string à la fin du tableau(nouvel indice)*/
$error[].='erreur#2;
$error[].='erreur#3;

//--ou alors encore plus simple:

$error= array('erreur#1'','erreur#2','erreur#3');
0
Utilisateur anonyme
2 mai 2010 à 01:44
Euh il me semble au contraire que $error est définie trois fois et que ce n'est pas une variable mais un tableau. 
Là n'est pas le problème, puisque j'envoi à la fonction du texte, donc de type string, et pas un tableau. Le texte sert ensuite à nommer le tableau $error[] dans la fonction implode. Et pour ce qui est d'indiquer à la fonction que le paramètre est un tableau, ceci
function get_errors(array $errors_log) 
me semblerait plus correct ...
Pour ce qui est de l'affection du texte à mon array, la façon dont je le fais fonctionne parfaitement, et me semble correct ...

Merci tout de même pour ta réponse ;)
0
ah oui pardon j'avait lu une variable ou tu mets une string.
As tu essayé $error [].= au lieu de $error[]=

parfois il suffit d'un truc tout bête et ça fait 2 mois que j'en chXXX sur des tableaux à multidimensions à cause d'une analyse bâclée...merci patron
0
Utilisateur anonyme
3 mai 2010 à 18:13
Avec la concaténation ça ne marche pas mieux ... :/
Enfin je pense que je vais rajouter un paramètre à ma fonction qui contiendra le texte, ce sera aussi simple à mettre en place ^^
<?php
function get_errors(array $errors_log, $log_name)
{ 
	$errors_log = implode("\n", $errors_log);
	$fp_errors_log = fopen($log_name.'.txt', 'a+');
	fwrite($fp_errors_log, "\n".$errors_log);
	fclose($fp_errors_log);
}
?>
Le texte est séparé de la variable, ça m'oblige à recopier deux fois le nom de la variable, mais au moins ça fonctionne ^^
0