Undefined variable

Résolu
AMARI -  
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai dans page php une partie "message du nombre d'enregistrement dans la BD"
j'ai initialisé les compteurs comme ça
$nb_insert=0;
$nb_update=0;
$nb_delete=0;
après j'ai faisais la partie d'insertion , Update et suppression
et puis
j'ai mis cette portion de code
$msg_enr_modifs='<font color="green">';
if($$nb_insert>0) $msg_enr_modifs.=$nb_insert." ajout de lignes de valeurs<br />";
if($nb_update>0) $msg_enr_modifs.=$nb_update." lignes de valeurs modifiées<br />";
if($nb_delete>0) $msg_enr_modifs.=$nb_delete." lignes de valeurs suprimées<br />";
$msg_enr_modifs.='</font>';
il m'affiche comme erreur
que les 3 compteurs sont Undefined variables
et après je utiliser l'id user pour chercher des enregistrements
alors j'ai pensé à la récupération de l'id
la ligne est :
$Id_user=$_SESSION['Id_user'];
de même il m'afficher "Undefined variables, Id_user" quelqu'un peux voir ou se trouve l'erreur svp , merci

29 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Bonjour,

Si tu appelles ces variables dans deux pages PHP qui n'ont aucun rapport l'une avec l'autre, alors il est normal qu'il ne les connaisse pas.
0
AMARI
 
Merci Mihawk
mais j'ai pas compris est que tu peux m'expliquer stp
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
En fait "Undefined variable" signifie que tu déclares tes variables à un endroit, mais que tu t'en sers à un autre endroit... Alors que les deux endroits en question ne sont pas liés l'un à l'autre.

Tu peux essayer de remplacer tes variables compteurs par des variables globales :

global $nb_insert=0;
global $nb_update=0;
global $nb_delete=0; 

Et ensuite tu y accèdes en faisant :

if ($GLOBALS['nb_insert'] > 0) ;
if ($GLOBALS['nb_update'] > 0) ;
if ($GLOBALS['nb_delete'] > 0) ;
0
AMARI
 
non mon code il est dans la même page c'est dans deux page
0
AMARI
 
j'ai essayé de remplacer mon code avec le tien mais il m'affiche ça comme erreur
"( ! ) Parse error: syntax error, unexpected '=', expecting ',' or ';' in C:\wamp\www\on line 41"
est que le syntaxe est faut ??
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
On peut voir ton code dans sa totalité ?
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Quelle est la ligne 41 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
AMARI
 
la ligne 41 c'est celle là
global $nb_insert = 0;
0
AMARI
 
ThEBiShOp : voilà mon code :
<?php

require_once('dbconnect.php');

?>
<?php

$msg_enr_modifs="";

//// -- partie enregistrement des modifs scénario ----
if(isset($_POST['enr_modifs'])){
//le bouton enr modifs a été cliqué
//recup des valeurs postées

$cof_eau_du_sol = $_POST['cof_eau_du_sol'];
$niv_de_debordement = $_POST['niv_de_debordement'];
$taux_concentration = $_POST['taux_concentration'];
$pour_etanchite = $_POST['pour_etanchite'];
$niv_depart = $_POST['niv_depart'];
$sal_sol = $_POST['sal_sol'];
$but = $_POST['but'];
$choix_sortie = $_POST['choix_sortie'];
$origine_iragation = $_POST['origine_iragation'];
$sal_eau_entre = $_POST['sal_eau_entre'];
$condition_climatique = $_POST['condition_climatique'];
$annee = $_POST['annee'];
//$Mois = $_POST['Mois'];
$titre=$_POST['titre'];
$commentaire=$_POST['commentaire'];


//on UPDATE d'abord dans la table scenario les modifs éventuelles de titre et commentaire
$sql_1="UPDATE scenario SET titre='".$titre."',commentaire='".$commentaire."' WHERE id_scenario='".$id_scenario."'";
$requete1 = $db->query($sql_1) ;

//puis Update ou insert ou Delete dans table valeurs
//init compteurs
global $nb_insert = 0;// ligne 41
global $nb_update = 0;
global $nb_delete =0;

// 3 cas: ajout, modif, supression
if(empty($cof_eau_du_sol) && empty($niv_de_debordement) && empty($taux_concentration)&& empty($pour_etanchite)&& empty($niv_depart)
&& empty($sal_sol)&& empty($but)&& empty($choix_sortie)&& empty($origine_iragation)&& empty($sal_eau_entre)&& empty($condition_climatique)){
//les champs ne sont pas vides mais étaient vides avant, c'est un ajout donc INSERT
$sql='insert into valeurs_a_saisir(Id_valeur,cof_eau_du_sol, niv_de_debordement, taux_concentration, pour_etanchite, niv_depart, sal_sol, but, choix_sortie, origine_iragation, sal_eau_entre, condition_climatique, annee, Mois,id_scenario) values ("'.$cof_eau_du_sol.'", "'.$niv_de_debordement.'", "'.$taux_concentration.'", "'.$pour_etanchite.'", "'.$niv_depart.'", "'.$sal_sol.'", "'.$arraybut[$mois].'", "'.$choix_sortie.'", "'.$origine_iragation.'", "'.$sal_eau_entre.'", "'.$condition_climatique.'", "'.$annee.'", "'.$Mois.'","'.$id_scenario.'")';
$requete = $db->query($sql) ;//or die( mysql_error() );

}
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_insert++;

//}

//un ou les champs ont eté modifiés, donc UPDATE
$sql="UPDATE valeurs SET cof_eau_du_sol='".$cof_eau_du_sol."', niv_de_debordement='".$niv_de_debordement."' taux_concentration='".$taux_concentration."'pour_etanchite='".$pour_etanchite."'niv_depart='".$niv_depart."'sal_sol='".$sal_sol."'but='".$arraybut[$mois]."'choix_sortie='".$choix_sortie."'origine_iragation='".$origine_iragation."'sal_eau_entre='".$sal_eau_entre."'condition_climatique='".$condition_climatique."'annee='".$annee."' WHERE id_scenario ='".$id_scenario."' AND mois='".$mois."'";
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_update++;
if(empty($cof_eau_du_sol) && empty($niv_de_debordement) && empty($taux_concentration)&& empty($pour_etanchite)&& empty($niv_depart)
&& empty($sal_sol)&& empty($but)&& empty($choix_sortie)&& empty($origine_iragation)&& empty($sal_eau_entre)&& empty($condition_climatique)){
//les champs sont vides mais n'étaient pas vides avant, c'est une suppression de valeurs donc DELETE
$sql="DELETE FROM valeurs_a_saisir WHERE id_scenario ='".$id_scenario."'";
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_delete++;

}
}
//message du nombre d'enr dans la BDD
$msg_enr_modifs='<font color="green">';
if ($GLOBALS['nb_insert'] > 0) ; $msg_enr_modifs.=$nb_insert." ajout de lignes de valeurs<br />";
if ($GLOBALS['nb_update'] > 0) ;$msg_enr_modifs.=$nb_update." lignes de valeurs modifiées<br />";
if ($GLOBALS['nb_delete'] > 0) ; $msg_enr_modifs.=$nb_delete." lignes de valeurs suprimées<br />";
$msg_enr_modifs.='</font>';


///// ---------------------
////----- Partie recherche des scenari pour cet utilisateur --------
//recup id_utilisateur dans la variable de session
$Id_user=$_SESSION['Id_user'];// ici aussi j'ai Undefined value
//recup du choix eventuel dans la liste déroulante scénario
if(isset($_POST['liste_scenario'])){

$scenario=$_POST['liste_scenario'];
}else{
$scenario="";
}

$sql="SELECT * FROM scenario WHERE Id_user='".$Id_user."' ";
//echo "<br />".$sql;
$requete = $db->query($sql);
//comptage du nb de scénario trouvé pour cet utilisateur
$row_cnt = mysqli_num_rows($requete);
if($row_cnt>0){

//si il y un ou des scénario, on affiche la page avec la liste déroulante
la partie html
?>
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
tu peux oublier les globals déjà vu que tu restes dans ta page.
0
AMARI
 
mais quand j'élimine global il m'affiche comme erreur que le 3 compteurs are undefinde values
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
J'ai l'impression que tu déclares tes variables dans le :

if(isset($_POST['enr_modifs'])){ 

Si jamais tu ne passes pas dans ce if, tu ne déclares pas.
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Au temps pour moi pour les globales, il faut les déclarer et les affecter indépendamment.

global $nb_insert, $nb_update, $nb_delete;
$nb_update=0;
$nb_delete=0;
$nb_delete=0;
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
et c'est censé lui apporter quoi dans son code ?
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
C'était pour gérer le cas où il appelait les compteurs dans 2 scripts différents sans avoir à relire tout son code ;-)
0
AMARI
 
Mihawk ;
j'ai essayé avec ton dernier code il m'affiche encore que les 3 compteurs sont Undefined :(
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
oublie cette histoire de globals.
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Place un echo("Debug"); au niveau de la déclaration des compteurs, et voit si le mot "Debug" s'affiche sur la page ; si il ne s'affiche pas c'est que tu ne passe pas dans le if.
0
AMARI
 
j'ai utilisé il l'a pas affiché et j'ai mis l'initialisation de compteurs comme commentaire il m'a affiché l'erreur (Undefined ) dans l'autre partie du coup pour l'initialisation il y a pas de problème c'est dans cette portion de code que ne connait pas les compteurs
$msg_enr_modifs='<font color="green">';
if ($GLOBALS['nb_insert'] > 0) ; $msg_enr_modifs.=$nb_insert." ajout de lignes de valeurs<br />";
if ($GLOBALS['nb_update'] > 0) ;$msg_enr_modifs.=$nb_update." lignes de valeurs modifiées<br />";
if ($GLOBALS['nb_delete'] > 0) ; $msg_enr_modifs.=$nb_delete." lignes de valeurs suprimées<br />";
$msg_enr_modifs.='</font>';
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
sinon t'enlèves les globals vu que ça sert à rien...

3x que je le dis quand même :/
0
AMARI
 
dans le 2 cas avec ou bien sans global il m'affiche toujours le même erreur , vous savez pas d'ou vient cet erreur :((((((
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
remontre ton code sans les globals.
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Fais pas une fixette là-dessus, ça change rien
0
AMARI
 
voilà le code sans Global
<?php

require_once('dbconnect.php');

?>
<?php

$msg_enr_modifs="";

//// -- partie enregistrement des modifs scénario ----
if(isset($_POST['enr_modifs'])){
//le bouton enr modifs a été cliqué
$cof_eau_du_sol = $_POST['cof_eau_du_sol'];
$niv_de_debordement = $_POST['niv_de_debordement'];
$taux_concentration = $_POST['taux_concentration'];
$pour_etanchite = $_POST['pour_etanchite'];
$niv_depart = $_POST['niv_depart'];
$sal_sol = $_POST['sal_sol'];
$but = $_POST['but'];
$choix_sortie = $_POST['choix_sortie'];
$origine_iragation = $_POST['origine_iragation'];
$sal_eau_entre = $_POST['sal_eau_entre'];
$condition_climatique = $_POST['condition_climatique'];
$annee = $_POST['annee'];
//$Mois = $_POST['Mois'];
$titre=$_POST['titre'];
$commentaire=$_POST['commentaire'];


//on UPDATE d'abord dans la table scenario les modifs éventuelles de titre et commentaire
$sql_1="UPDATE scenario SET titre='".$titre."',commentaire='".$commentaire."' WHERE id_scenario='".$id_scenario."'";
$requete1 = $db->query($sql_1) ;

//puis Update ou insert ou Delete dans table valeurs
//init compteurs
$nb_insert=0;
$nb_update=0;
$nb_delete=0;
// 3 cas: ajout, modif, supression
if(empty($cof_eau_du_sol) && empty($niv_de_debordement) && empty($taux_concentration)&& empty($pour_etanchite)&& empty($niv_depart)
&& empty($sal_sol)&& empty($but)&& empty($choix_sortie)&& empty($origine_iragation)&& empty($sal_eau_entre)&& empty($condition_climatique)){
//les champs ne sont pas vides mais étaient vides avant, c'est un ajout donc INSERT
$sql='insert into valeurs_a_saisir(Id_valeur,cof_eau_du_sol, niv_de_debordement, taux_concentration, pour_etanchite, niv_depart, sal_sol, but, choix_sortie, origine_iragation, sal_eau_entre, condition_climatique, annee, Mois,id_scenario) values ("'.$cof_eau_du_sol.'", "'.$niv_de_debordement.'", "'.$taux_concentration.'", "'.$pour_etanchite.'", "'.$niv_depart.'", "'.$sal_sol.'", "'.$arraybut[$mois].'", "'.$choix_sortie.'", "'.$origine_iragation.'", "'.$sal_eau_entre.'", "'.$condition_climatique.'", "'.$annee.'", "'.$Mois.'","'.$id_scenario.'")';
$requete = $db->query($sql) ;//or die( mysql_error() );

}
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_insert++;

//}

//un ou les champs ont eté modifiés, donc UPDATE
$sql="UPDATE valeurs SET cof_eau_du_sol='".$cof_eau_du_sol."', niv_de_debordement='".$niv_de_debordement."' taux_concentration='".$taux_concentration."'pour_etanchite='".$pour_etanchite."'niv_depart='".$niv_depart."'sal_sol='".$sal_sol."'but='".$arraybut[$mois]."'choix_sortie='".$choix_sortie."'origine_iragation='".$origine_iragation."'sal_eau_entre='".$sal_eau_entre."'condition_climatique='".$condition_climatique."'annee='".$annee."' WHERE id_scenario ='".$id_scenario."' AND mois='".$mois."'";
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_update++;
if(empty($cof_eau_du_sol) && empty($niv_de_debordement) && empty($taux_concentration)&& empty($pour_etanchite)&& empty($niv_depart)
&& empty($sal_sol)&& empty($but)&& empty($choix_sortie)&& empty($origine_iragation)&& empty($sal_eau_entre)&& empty($condition_climatique)){
//les champs sont vides mais n'étaient pas vides avant, c'est une suppression de valeurs donc DELETE
$sql="DELETE FROM valeurs_a_saisir WHERE id_scenario ='".$id_scenario."'";
echo "<br />".$sql;
$requete = $db->query($sql) ;
$nb_delete++;

}
}
//message du nombre d'enr dans la BDD
$msg_enr_modifs='<font color="green">';
if($nb_insert>0) $msg_enr_modifs.=$nb_insert." ajout de lignes de valeurs<br />";
if($nb_update>0) $msg_enr_modifs.=$nb_update." lignes de valeurs modifiées<br />";
if($nb_delete>0) $msg_enr_modifs.=$nb_delete." lignes de valeurs suprimées<br />";
$msg_enr_modifs.='</font>';
// c'est ici qu'il m'affiche l'erreur



///// ---------------------
////----- Partie recherche des scenari pour cet utilisateur --------
//recup id_utilisateur dans la variable de session
$Id_user=$_SESSION['Id_user'];// ici même erreur
//recup du choix eventuel dans la liste déroulante scénario
if(isset($_POST['liste_scenario'])){

$scenario=$_POST['liste_scenario'];
}else{
$scenario="";
}

$sql="SELECT * FROM scenario WHERE Id_user='".$Id_user."' ";
//echo "<br />".$sql;
$requete = $db->query($sql);
//comptage du nb de scénario trouvé pour cet utilisateur
$row_cnt = mysqli_num_rows($requete);
if($row_cnt>0){

//si il y un ou des scénario, on affiche la page avec la liste déroulante
?>
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
tes variables sont déclarées dans :
if (isset($_POST['enr_modifs'])) {

si tu ne rentres pas là dedans, tes variables seront undefined.
0
AMARI
 
alors j'élimine la if (isset($_POST['enr_modifs'])) ????
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
bah si t'estimes que t'en as pas besoin, peut être...
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Déplace l'initialisation des compteurs au début du code :

<?php

$msg_enr_modifs=""; 

//init compteurs
$nb_insert=0;
$nb_update=0;
$nb_delete=0; 

0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
oui, mieux ^^
mais je pense que si tu ne fais pas ton traitement, il ne devrait pas y avoir d'inscription en base, si ?
0
AMARI
 
j'ai éliminé la partie if (isset($_POST['enr_modifs']))
il m'a afficher que tous mes variables son Undifined non seulement les 3 compteurs
0
AMARI
 
Merci Mihawk, merci ThEBiShOp je faisais comme tu m'as dit Mihawk là c'est bon pour les compteurs mais pour l'id_user tjrs il es undifined
//recup id_utilisateur dans la variable de session
$Id_user=$_SESSION['Id_user'];// ici l'erreur
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
C'est un "Undefined variable" ou un "Undefined index" ce coup-là ?
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
$_SESSION['Id_user'] sort de nulle part, c'est normal
il te faut un session_start(); au début de ton code de préférence, et il faut que tu instancies cette variable quelque part dans ton code, sinon ça ne va pas marcher
0
AMARI
 
Mihawk: il m'affiche Undefined index:
ThEBiShOp : pour la sussion_start() j'ai inclue une page head dans la quelle il y la sussion_start()
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
et tu mets quelque chose dans $_SESSION['Id_user'] un moment donné dans tes pages ?
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Il faut gérer le cas où tu n'as pas de Id_User :

///// ---------------------
////----- Partie recherche des scenari pour cet utilisateur --------

$Id_user = (isset($_SESSION['Id_user'])) ? $_SESSION['Id_user'] : null;

//recup du choix eventuel dans la liste déroulante scénario
if ($Id_user != null){
   if(isset($_POST['liste_scenario'])){
      $scenario=$_POST['liste_scenario'];
   } else {
      $scenario="";
   }

   $sql="SELECT * FROM scenario WHERE Id_user='".$Id_user."' ";
   //echo "<br />".$sql;
   $requete = $db->query($sql);
   //comptage du nb de scénario trouvé pour cet utilisateur
   $row_cnt = mysqli_num_rows($requete);
   if($row_cnt>0){

0
AMARI
 
en fait pour la page head il juste session_start();
et j'ai la page accueil dans la quelle si un user est connecté j'affiche tous les pages que lui concerne du coup j'ai utilisé
<?php
// si l'utilisateur est connecté comme simple utilisateur ...
if($_SESSION['privilege'] == "user") { // Affichage conditionnel : si et seulement si l'utilisateur est connecté avec le privilege utilisateur simple ?>
<strong><u>En tant qu'utilisateur simple vous ne pouvez pas effectuer d'actions</u></strong>
<?php }
0
AMARI
 
merci Mihawk c'est bon il m'affiche plus l'erreur de Undfined index il m'a afficher le tableau de valeur normal et qd j'ai inséré mes valeurs et j'ai cliqué sur enregistré il m'a afficher un autre erreur "Notice: Undefined index: Id_user in C:"
et cet erreur vient de cette ligne de code dans ma deuxièmme page .
//on enregistre d'abord dans la table scenario
$sql_1="INSERT INTO scenario (id_scenario,Id_user,titre,commentaire) VALUES('','".$_SESSION['user']."','".$titre."','".$commentaire."')";
echo $sql_1;
pouratnt dans mes 2 table ( User et scenario) sql j'en ai l'id_user
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Tu respectes bien les majuscules / minuscules dans les noms de champ de ta table ?
0
AMARI
 
Mihawk : tu es tjrs là ??
j'attends tjrs ton aide pour corriger mon code
0
AMARI
 
je te donne le code de la 2 émme page :
<?php

require_once('dbconnect.php');

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<p align="center" class="titre"><strong>- : : : Veuillez remplir ce tableau : : : -</strong></p>
<?php


//On verifie que le formulaire a été envoye
if(isset($_POST['enregistrer']))
{
// on récupère les valeurs qui ont poster

$cof_eau_du_sol = $_POST['cof_eau_du_sol'];
$niv_de_debordement = $_POST['niv_de_debordement'];
$taux_concentration = $_POST['taux_concentration'];
$pour_etanchite = $_POST['pour_etanchite'];
$niv_depart = $_POST['niv_depart'];

$sal_sol = $_POST['sal_sol'];
$but = $_POST['but'];
$choix_sortie = $_POST['choix_sortie'];
$origine_iragation = $_POST['origine_iragation'];
$sal_eau_entre = $_POST['sal_eau_entre'];
$condition_climatique = $_POST['condition_climatique'];
$annee = $_POST['annee'];
//$arrayMois = $_POST['Mois'];
$titre=$_POST['titre'];
$commentaire=$_POST['commentaire'];
//on enregistre d'abord dans la table scenario
$sql_1="INSERT INTO scenario (id_scenario,Id_user,titre,commentaire) VALUES('','".$_SESSION['Id_user']."','".$titre."','".$commentaire."')";
echo $sql_1; // ici je faisais echo pour voir quoi il m'affiche
$requete1 = $db->query($sql_1) ;
//recup de l'ID
$id_scenario= mysql_insert_id();
$sql='insert into valeurs_a_saisir(id_valeur,cof_eau_du_sol, niv_de_debordement, taux_concentration, pour_etanchite, niv_depart, sal_sol, but, choix_sortie, origine_iragation, sal_eau_entre, condition_climatique, annee, id_scenario) values ("'.$cof_eau_du_sol.'", "'.$niv_de_debordement.'", "'.$taux_concentration.'", "'.$pour_etanchite.'", "'.$niv_depart.'", "'.$sal_sol.'", "'.$but.'", "'.$choix_sortie.'", "'.$origine_iragation.'", "'.$sal_eau_entre.'", "'.$condition_climatique.'", "'.$annee.'", "'.$id_scenario.'")';
$requete = $db->query($sql) ;//or die( mysql_error() );

}
?>
0