Autor Zpráva
Dark
Profil *
Ahote. Nainstaloval som si EasyPHP, vsetko ide, ALE mam jeden problem.. spravil som si taky chat a pri kolonke kde pisem spravu to vyhadzuje " Notice: Undefined variable: sprava in c:\internet\chat\form.php on line 8 "

Ked ale poslem nejaky text na ten chat tak sa normalne napise.. ono to v podstate ide, ale vyhadzuje tam toto.. neviete niekto co to je ? vsetky register_globals com som nasiel v kazdom php.ini som nastavil na On a stale to robi :(
WertriK
Profil *
Soupni sem kod jinak ti asi nehelpnem....
Dark
Profil *
Zdrojovy kod toho chatu co mi to tam robi najdete komplet na adrese http://www.tipyatriky.sk/index.php?cat=www27&kat=8
jozob
Profil
Ide o to, že používas premennú, ktorá neexistuje. Robí to aj vtedy, ak zistuješ v podmienke, akú má premenná hodnotu a pod. Skrátka vždy, keď pristupuješ k tejto premennej a nebola jej vopred pridelená hodnota, php engine nahlási poznámku (nie chybu, len poznámku), že daná premenná nebola zadefinovaná (php automaticky zadefinuje premennú pri prvom vložení hodnoty do tejto premennej).

Prvé možné riešenie tohto problému je otestovanie, či premenna existuje funkcou isset:

if(isset($testovana_premenna))
{
/* praca s premennou - vykona sa len v pripade, ze je zadefinovana(ma hodnotu) */
}


Druhé riešenie spočíva v editácii súboru php.ini, ktorý pri štandardnej inštalácii EasyPHP nájdeš v priečinku C:\Program Files\EasyPHP1-8\php\. Otvor ho v nejakom editore a nájdi kľúč error_reporting. Tento kľúč sa nachádza v sekcii Error handling and logging. V Tvojom prípade má error_reporting pravdepodobne hodnotu E_ALL. To znamená, že php engine hlási všetky chyby - vrátane poznámok, čo v podstate nie sú chyby. Túto hodnotu zmeň na error_reporting = E_ALL & ~E_NOTICE
Po uložení súboru php.ini a reštartovaní služby Apache už nebude poznámky hlásiť.

Ja osobne mám hodnotu error_reporting nastavenú na E_ALL a to z jednoduchého dôvodu. Radšej si dám viac práce na ošetrení tohto problému pomocou testovania premenných funkciou isset() priamo v skripte, pretože ak robím skript, ktorý bude bežať aj na inom servery, nikto mi nezaručí, že tam nebude error_reporting hlásiť aj poznámky.

To je všetko... Ámen
jozob
Profil
Ešte doplňujem:
Tvoj kód som videl až teraz, takže:
Celú časť:

if($sprava != ""){ // ak sprava niečo obsahuje

if($meno == "") $meno = "anonym"; // ak užívateľ nevyplnil meno bude sa volať anonym
$meno=htmlspecialchars($meno); //konvertovanie špeciálnych znakov na HTML
$sprava=htmlspecialchars($sprava); // entity
$cas=Date("d.m.Y H:i:s"); // aktuálny dátum a čas vo formáte 29.03.2003 18:49:34
$odkaz=$cas." : <b>".$meno."</b> : ".$sprava."<br>"; //formátovanie odkazu
$fp = fopen("data/odkazy.dat","a"); // otvorenie súbor pre doplnenie
flock($fp,2); //uzamknutie súboru
fputs($fp,$odkaz); // zápis odkazu do súboru
flock($fp,3); //odomknutie súboru
fclose($fp); // zatvor subor //zatvorenie súboru
echo "<script language='JavaScript'>
parent.frames['show'].location = 'show.php'
</script>";
}


by som zmenil na:


if(isset($sprava)){ // ak sprava niečo obsahuje

if($meno == "") $meno = "anonym"; // ak užívateľ nevyplnil meno bude sa volať anonym
$meno=htmlspecialchars($meno); //konvertovanie špeciálnych znakov na HTML
$sprava=htmlspecialchars($sprava); // entity
$cas=Date("d.m.Y H:i:s"); // aktuálny dátum a čas vo formáte 29.03.2003 18:49:34
$odkaz=$cas." : <b>".$meno."</b> : ".$sprava."<br>"; //formátovanie odkazu
$fp = fopen("data/odkazy.dat","a"); // otvorenie súbor pre doplnenie
flock($fp,2); //uzamknutie súboru
fputs($fp,$odkaz); // zápis odkazu do súboru
flock($fp,3); //odomknutie súboru
fclose($fp); // zatvor subor //zatvorenie súboru
echo "<script language='JavaScript'>
parent.frames['show'].location = 'show.php'
</script>";
}
jozob
Profil
A ešte do tretice:
ešte by pre dokonalosť bolo dobré ošetriť udalosť, kedy by bola premenná $sprava zadefinovaná, ale bola by prázdna, takže podmienku by som ešte upravil pridaním otestovania, či niečo obsahuje:

if(isset($sprava) && strlen($sprava)!=0){ // ak sprava niečo obsahuje
Dark
Profil *
Super.. Dakujem velmi pekne za taketo podrobne vysvetlenie a navrhy. Naozaj dik este raz za pomoc ;)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0