web-dev-qa-db-fra.com

PHP Comment corriger Remarque: Variable non définie:

code:

Function ShowDataPatient($idURL)
{
    $query =" select * from cmu_list_insurance,cmu_home,cmu_patient where cmu_home.home_id = (select home_id from cmu_patient where patient_hn like '%$idURL%')
                     AND cmu_patient.patient_hn like '%$idURL%'
                     AND cmu_list_insurance.patient_id like (select patient_id from cmu_patient where patient_hn like '%$idURL%') ";

    $result = pg_query($query) or die('Query failed: ' . pg_last_error());

    while ($row = pg_fetch_array($result))
    {
        $hn = $row["patient_hn"];
        $pid = $row["patient_id"];
        $datereg = $row["patient_date_register"];
        $prefix = $row["patient_prefix"];
        $fname = $row["patient_fname"];
        $lname = $row["patient_lname"];
        $age = $row["patient_age"];
        $sex = $row["patient_sex"];
    }          
    return array($hn,$pid,$datereg,$prefix,$fname,$lname,$age,$sex);
}

Erreur :

Notice: Undefined variable: hn in C:\xampp\htdocs\...  
Notice: Undefined variable: pid in C:\xampp\htdocs\... 
Notice: Undefined variable: datereg in C:\xampp\htdocs\...    
Notice: Undefined variable: prefix in C:\xampp\htdocs\...    
Notice: Undefined variable: fname in C:\xampp\htdocs\...    
Notice: Undefined variable: lname in C:\xampp\htdocs\...    
Notice: Undefined variable: age in C:\xampp\htdocs\...    
Notice: Undefined variable: sex in C:\xampp\htdocs\...

comment résoudre ce problème?

3
Beebrabie

Définissez les variables au début de la fonction. Ainsi, s'il n'y a pas d'enregistrements, les variables existent et vous n'obtiendrez pas l'erreur. Recherchez les valeurs NULL dans le tableau renvoyé.

$hn = null;
$pid = null;
$datereg = null;
$prefix = null;
$fname = null;
$lname = null;
$age = null;
$sex =null;
19
mseifert

Déclarez-les avant la boucle while.

$hn = "";
$pid = "";
$datereg = "";
$prefix = "";
$fname = "";
$lname = "";
$age = "";
$sex = "";

Vous obtenez la notification car les variables sont déclarées et attribuées à l'intérieur de la boucle. 

6
akr

Vous devez initialiser vos variables en dehors de la boucle while. En dehors de la boucle while, ils n'ont actuellement aucune portée. Vous comptez simplement sur les bonnes grâces de php pour laisser les valeurs transiter en dehors de la boucle

           $hn = "";
           $pid = "";
           $datereg = "";
           $prefix = "";
           $fname = "";
           $lname = "";
           $age = "";
           $sex = "";
           while (...){}

alternativement, il semblerait que vous n'attendiez qu'une seule rangée. alors vous pouvez juste dire

$row = pg_fetch_array($result);
if(!row) {
    return array();
}
$hn = $row["patient_hn"];
$pid = $row["patient_id"];
$datereg = $row["patient_date_register"];
$prefix = $row["patient_prefix"];
$fname = $row["patient_fname"];
$lname = $row["patient_lname"];
$age = $row["patient_age"];
$sex = $row["patient_sex"];

return array($hn,$pid,$datereg,$prefix,$fname,$lname,$age,$sex) ;
4
Zak

Je suppose que votre requête ne fonctionne pas comme prévu et que vous arrivez à la ligne de retour avec des variables non définies.

En outre, de la manière dont vous effectuez l'affectation de variable, vous écraseriez la même variable à chaque itération de boucle, de sorte que vous ne retourniez pas l'ensemble des résultats.

Enfin, il semble étrange de renvoyer un jeu de résultats chiffré au lieu d'un jeu associé. Pensez à ne nommer que les champs nécessaires dans SELECT et à conserver les affectations de clés. Donc, quelque chose comme ça:

Function ShowDataPatient($idURL){
       $query =" select * from cmu_list_insurance,cmu_home,cmu_patient where cmu_home.home_id = (select home_id from cmu_patient where patient_hn like '%$idURL%')
                 AND cmu_patient.patient_hn like '%$idURL%'
                 AND cmu_list_insurance.patient_id like (select patient_id from cmu_patient where patient_hn like '%$idURL%') ";

   $result = pg_query($query) or die('Query failed: ' . pg_last_error());

   $return = array();
   while ($row = pg_fetch_array($result)){
       $return[] = $row;
   }          

   return $return;
}

Vous pouvez également envisager d’ouvrir une question sur la manière d’améliorer votre requête. C’est plutôt odieux en l’état actuel.

3
Mike Brant

Il semble que vous ne disposiez d'aucun enregistrement correspondant à votre requête. Vous souhaitez donc renvoyer un tableau vide (ou nul ou quelque chose d'autre) si le nombre de lignes == 0.

1
Dr. McKay

xampp je suppose que vous utilisez mysql. 

mysql_fetch_array($result);  

Et assurez-vous que $ result n'est pas vide.

0
Ganu