Problème 'notice' undefined variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème 'notice' undefined variable

Re: Problème 'notice' undefined variable

par Mazarini » 28 déc. 2011, 16:28

tu as écrit $listeregion.=$result['id_region'].',';
ce qui est équivalent à $listeregion = $listeregion . $result['id_region'].',';
et c'est le $listeregion en gras qui est inconnu au premier passage dans la boucle.
Il faudrait ajouter $listeregion = ""; avant le début de la boucle.

Cela n'est pas grave en soit et tu pourrais supprimer l'affichage du notice ou du warning et ca marcherai très bien. C'est quand même utile pour détecter une faute de frappe dans le nom d'une variable ; bug chiant souvent assez dur à voir.

Re: Problème 'notice' undefined variable

par ladinho58 » 28 déc. 2011, 16:04

D'acc.
Je suis désolé, je vais te déranger une dernière fois :
un var_dump(listeregion) me renvoie ça : string '8,1,2,3,9,7,4,5,6,' (length=18) Qu'est ce que cela m'apporte sur comment arranger mon erreur ? Je ne comprend pas trop..

Re: Problème 'notice' undefined variable

par Mazarini » 28 déc. 2011, 15:51

Ce n'est pas une question d'œil, mais plutôt que c'est une erreur classique que je fais de temps en temps. La simple lecture du message te suffira à deviner la prochaine fois.

Pour ce qui est du message restant, je dirai que dans le formulaire il n'y a pas de region. Un var_dump($_GET) en début de script peut te permettre de voir les zones transmises (et trouver un regiion par exemple)

Edit : pour les formulaire avec methode post, il faut utiliser $_POST (et si methode get : $_GET). Pour les paramètres dans les url (comme action) c'est toujours $_GET

Re: Problème 'notice' undefined variable

par ladinho58 » 28 déc. 2011, 15:41

J'ai enlevé les erreurs de region en faisant ca :

if (!isset($_GET['region']))
$_GET['region']="all";

je l'ai rajouté juste avant
while($result = mysql_fetch_array($queryreg, MYSQL_ASSOC))
	{
		if($i%2)$alt="class='alt'";else $alt="";
		$listeregion.=$result['id_region'].',';
		if($result['id_region']==$_GET['region'])$valueselected='selected="selected"';else $valueselected="";
		echo '<tr '.$alt.'><td>'.$result['nom_region'].'</td><td>'.listeFichiers($result['id_region'],$result['id_modele'],0).'</td></tr>';
		$i++;
	}
Je ne sais pas si c'est bien propre, mais ca à l'air de fonctionner...
En revanche, j'ai toujours une erreur dans ma listeregion. Elle se situe juste dans le code PHP ci-dessus. Z'avez une idée ? :)

Re: Problème 'notice' undefined variable

par ladinho58 » 28 déc. 2011, 15:28

Merci, ca m'a enlevé l'erreur de la constante ! :) Vous avez l'oeil pour les quotes ! Je crois que j'aurai pu rester des heures sans le voir..
En revanche, je conserve toujours mes erreurs sur Undefined index: region in C:\wamp\www\vespa_b1\administration\adm_template.php on line 103
Elles sont au nombre de 9 car j'utilise 9 régions.
Undefined index: region in C:\wamp\www\vespa_b1\administration\adm_template.php on line 103

J'ai également encore le problème sur listeregion à la ligne 102 et encore un problème sur la variable region à la ligne 123.

Re: Problème 'notice' undefined variable

par Ryle » 28 déc. 2011, 15:20

Il te manque des apostrophes ;)

$_GET['region'] va chercher l'index nommé "region" dans le tableau $_GET
$_GET[region] va chercher la valeur de la constante nommée "region", puis va chercher l'index nommé selon la valeur de cette constante dans le tableau $_GET... et comme il ne trouve pas de constante nommée "region", il utilise par dépit la chaîne de caractères correspondante, mais te le fait savoir :)

Edit : mince, grillé ! :)

Re: Problème 'notice' undefined variable

par Mazarini » 28 déc. 2011, 15:18

Il faut mettre des quotes autour de region : $_GET['region']

Edit : sans les cotes, il considère region comme une constante mais non défini. Il considère alors region comme une constante qui a la valeur 'region'.

Problème 'notice' undefined variable

par ladinho58 » 28 déc. 2011, 15:11

Bonjour,

Sur une de mes pages PHP en local, j'ai une erreur notice que je n'arrive pas à supprimer.
Quoi que j'essaye, je me retrouve avec une erreur : Notice: Undefined index: region in C:\wamp\www\vespa_b1\administration\adm_template.php on line 103 et également à la ligne 123.

Cette erreur est également la cause ou alors est la cause d'également ces autres erreurs :
Notice: Use of undefined constant region - assumed 'region' in C:\wamp\www\vespa_b1\administration\adm_template.php on line 87

Notice: Undefined variable: listeregion in C:\wamp\www\vespa_b1\administration\adm_template.php on line 102


Bref, un gros problème de région !
J'avais déjà eu ce genre de problèmes dans d'autres fichiers que j'anéantissais en faisant un joli if (!isset($_GET['l'erreur'])), mais alors là, pas moyen de trouver quoi faire.. Pourriez-vous m'aider à voir comment corriger cette erreur ?
<?php
/**
 * Ecran de gestion des modèles utilisés pour la création de rapports
 * Possibilité de personnaliser le modèle par région
 * Permet l'ajout de nouveaux modèles
 * Modes possibles :
 *  - Mise à jour d'une region (updreg)
 *  - Ajout d'un modèle (addtmpl)
 *  - Suppression d'un modèle (rmv)
*/
//Cas standard, affichage de la liste des régions ainsi que leur modèle associé, puis liste des fichiers


if( !isset($_GET['action']) || $_GET['action']!= "updreg" && $_GET['action']!= "addtmpl" && $_GET['action']!= "rmv")
{	
	
	echo '
			<div id="plaintext">
			Vous pouvez ici gérer les modèles de rapports utilisés par les utilisateurs.
			<br><br/>
			<h3>Modèles utilisés </h3>
			<form method="post" action="adm_template.php?action=updreg">
			<table class="tablebleu">
				<tr>
					<th>Région</th>
					<th>Modèle utilisé</th>
				</tr>
		';	
	//Filtre d'affichage en fonction de la région sélectionnée
		if( isset($_GET[region]) && $_GET[region]!="all")                                        //LIGNE 87
	{
		$filtreregion=" AND m.id_region=".$_GET[region]." ";
	}
		else $filtreregion="";

	$reqregion = "SELECT r.id_region, r.nom_region, r.id_modele, nom_fichier FROM region r LEFT OUTER JOIN modele m ON r.id_modele = m.id_modele ORDER BY nom_region";
	$queryreg = mysql_query($reqregion);
	$i=0;
	
	//Affichage des modèles utilisés par chacune des régions.
	
	while($result = mysql_fetch_array($queryreg, MYSQL_ASSOC))
	{
		if($i%2)$alt="class='alt'";else $alt="";
		$listeregion.=$result['id_region'].',';                                                      //LIGNE 102
		if($result['id_region']==$_GET['region'])$valueselected='selected="selected"';else $valueselected=""; 
		echo '<tr '.$alt.'><td>'.$result['nom_region'].'</td><td>'.listeFichiers($result['id_region'],$result['id_modele'],0).'</td></tr>';
		$i++;
	}
	echo '		
			</table>
			<input type=hidden id="nbChmp" name="nbChmp" value='.$listeregion.'>
			Utiliser ce modèle pour toutes les régions :
			
			'.listeFichiers("all",0,1).'
			
			<input style="float:right" type="submit" value="Mettre à jour"></form>
			<br><br /><hr>
			';

//Affichage des modèles enregistrés, en fonction de la région sélectionnée
	echo '
			<h3>Modèles existants </h3> 
			';		
	
	echo 'Afficher : ';
	addSelectRegion("region", $_GET['region'], true, true, "filterRegion(this.value)", 300, 1);             //LIGNE 123
	echo'<br><br/>';
	echo '
		<form method="POST" action="adm_template.php?action=rmv">
			<table class="tablebleu">
			<tr>
				<th></th>
				<th>Nom</th>
				<th>Région</th>
				<th>Date d\'émission</th>
				<th>Emetteur</th>
				<th>Description</th>
			</tr>
			
			';

Merci d'avance.