Notice: Undefined index – jak ošetřit?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kokoumes
Člen | 39
+
0
-

Ahojte, jsem začátečník a pořád nemůžu přijít na to, proč mi nette píše tuto chybu. Notice: Undefined index: – a pak u každý položky ve výpisu u adres_jmeno.
Zdroj vypadá takhle:

<?php
$po = array();
        $result = dibi::query('SELECT ...);
        $po["-"] .= 'Vyberte město';
        foreach ($result as $n => $row) {

        	$po[$row['adres_jmeno']] .= $row['mesto'];


          }
        return  $po;
?>

Dokázal by někdo prosím poradit jak toto ošetřit? Díky

newPOPE
Člen | 648
+
0
-

S najvacsou pravdepodobnostou nie .= ale len =

  • .= → zretazenie premennych (+ dalsie bonusy :-D)
  • = → priradenie premennych

Editoval newPOPE (23. 2. 2011 11:00)

kokoumes
Člen | 39
+
0
-

Oprava.. je to tím.. díky moc ;-)

Editoval kokoumes (23. 2. 2011 11:17)

Chbox
Člen | 125
+
0
-

zpravidla Laděnka hlásí, kterej index není definovanej, takže si pořádně přečti hlášku anebo si vydampuj ty proměnný, například jestli $result není prázdnej

Editoval Chbox (23. 2. 2011 11:18)

kokoumes
Člen | 39
+
0
-

Co jinýho mám požívat místo .= ? jakmile tohle použiju, tak na mě vždycky křičí Notice: Undefined variable.
Dokázal by někdo poradit? nebo aspoň jak tyhle hlášky vypnout tak abych nemusel přepnout na PRODUCTION mód

Ondřej Brejla
Člen | 746
+
0
-

A jakpak to používáš?

V bootstrapu Debug::$strictMode = FALSE;…ale nevypínal bych to, je to ošklivé a nepěkné…

Editoval Ondřej Brejla (25. 2. 2011 15:27)

kokoumes
Člen | 39
+
0
-

třeba takhle

<?php
for($i=0;$i<count($progNameId) ; $i++)
		   {
         $po .= "[id]='".$progNameId[$i]."'";
}
?>
studna
Člen | 181
+
0
-

Notice se nemá přehlížet. A hlasí ti to, že proměnná $po není definována?

Pak bude asi count( $progNameId ) == 0 a cyklus se neprovede.

kokoumes
Člen | 39
+
0
-

Jo hlásí. A count( $progNameId ) určitě 0 neni

studna
Člen | 181
+
0
-

Hm. A když dáš..

<?php
for($i=0;$i<count($progNameId) ; $i++)                   {
         $po = "defined";
}
?>

..tak hláška zmizí?

kokoumes
Člen | 39
+
0
-

Jo. Prostě jak tam neni tečka je to bez hlášky, ale vypíše se mi právě jen poslední z cyklu :-(

studna
Člen | 181
+
0
-

No, ono zápis s „tečkou“ se dá nahradit

<?php
for($i=0;$i<count($progNameId) ; $i++)
                   {
         $po = $po . "[id]='".$progNameId[$i]."'";
}
?>

Tak to funguje?

Ondřej Brejla
Člen | 746
+
0
-

Ono právě proto, že je to zkratka zápisu $po = $po . '' to křičí. Protože na pravé straně používáš proměnnou $po, která není inicializována. Řešením je před for cyklus šoupnout inicializaci.

$po = ''; // třeba...
for($i=0;$i<count($progNameId) ; $i++) {
    $po .= "[id]='".$progNameId[$i]."'";
}

A noticka by měla zmizet…