webentwicklung-frage-antwort-db.com.de

PHP Wie zu beheben Hinweis: Undefinierte Variable:

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);
}

Error :

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\...

wie kann ich das beheben?

3
Beebrabie

Definieren Sie die Variablen am Anfang der Funktion. Wenn keine Datensätze vorhanden sind, sind die Variablen vorhanden und Sie erhalten keine Fehlermeldung. Suchen Sie im zurückgegebenen Array nach Nullwerten.

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

Deklarieren Sie sie vor der while-Schleife.

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

Sie erhalten die Benachrichtigung, da die Variablen innerhalb der Schleife deklariert und zugewiesen werden. 

6
akr

Sie sollten Ihre Variablen außerhalb der while-Schleife initialisieren. Außerhalb der while-Schleife haben sie derzeit keinen Gültigkeitsbereich. Sie verlassen sich nur auf die Gnade von PHP, damit die Werte außerhalb der Schleife übertragen werden

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

alternativ sieht es so aus, als würden Sie nur eine Reihe zurück erwarten. du könntest es einfach sagen

$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

Ich würde vermuten, dass Ihre Abfrage nicht wie erwartet ausgeführt wird und Sie mit undefinierten Variablen zur Rückkehrzeile gelangen.

Auf die Art und Weise, wie Sie die Variablen zuweisen, würden Sie bei jeder Wiederholung der Schleife dieselbe Variable überschreiben, sodass Sie nicht die gesamte Ergebnismenge zurückgeben würden.

Schließlich scheint es merkwürdig zu sein, eine numerisch eingegebene Ergebnismenge anstelle einer assoziativ eingegebenen Ergebnismenge zurückzugeben. Erwägen Sie, nur die Felder zu benennen, die in SELECT erforderlich sind, und die Tastenzuweisungen zu behalten. Also so etwas wie:

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;
}

Sie könnten auch in Betracht ziehen, eine Frage zu eröffnen, wie Sie Ihre Abfrage verbessern können. Ist sie derzeit so abscheulich?.

3
Mike Brant

Es sieht so aus, als hätten Sie keine Datensätze, die Ihrer Abfrage entsprechen. Sie möchten also ein leeres Array (oder eine Null oder etwas anderes) zurückgeben, wenn die Anzahl der Zeilen == 0 ist.

1
Dr. McKay

xampp Ich schätze, du verwendest Mysql. 

mysql_fetch_array($result);  

Und stellen Sie sicher, dass $ result nicht leer ist.

0
Ganu