Autor Zpráva
janky
Profil
Dobrý den, používám dibi. Z databáze předám do funkce jedno nebo více polí v poli. Chtěl bych je zpracovat, pokud je polí více vypsat vícekrát ul seznam.

Foreach mi vrací

Notice: Undefined variable: card_face in D:\www\mtg_card_price\includes\functions.php on line 386

Notice: Trying to access array offset on value of type null in D:\www\mtg_card_price\includes\functions.php on line 386

function get_card_text($card_arr) {

    $out = "";

    foreach ($card_arr as $card) {

        $out = '<ul class="list-group mb-3 shadow-sm">';
      
        foreach ($card as $face) {

            $out .= '<li class="list-group-item"><b>'.$face['face_name'].'</b></li>';
            $out .= '<li class="list-group-item">'.$face['face_type_line'].'</li>';
            if($face['face_oracle_text']) {
                $out .= '<li class="list-group-item">'.nl2br($face['face_oracle_text']).'</li>';
            };
            if($face['face_flavor_text']) {
                $out .= '<li class="list-group-item"><i>'.$face['face_flavor_text'].'</i></li>';
            };
            if($face['face_loyalty']) {
                $out .= '<li class="list-group-item">Loyalty: '.$face['face_loyalty'].'</li>';
            };
            if($face['face_power']) {
                $out .= '<li class="list-group-item">'.$face['face_power'].' / '.$face['face_toughness'].'</li>';
            };
            $out .= '</ul>';
        };

        $out .= '</ul>';
    }

    return $out;
};

var_dump($face) mi vrátí hodnoty bez klíčů.
Taps
Profil
Bohužel nevím, co je na řádku 386. Bez věčí ucelenosti kódu, zřejmě nebude schopni pomoci.
anonym_
Profil *
janky:
Undefined variable: card_face. V uvedeném kódu ale žádná taková proměnná není.

A jak tu chybu odstranit? Zadefinovat proměnnou, zkontrolovat scope...
janky
Profil
Notice: Undefined variable: card_face in D:\www\mtg_card_price\includes\functions.php on line 386 tuto chybu jsem již odstranil. Každopádně pořád ten kód nefunguje. Po odstranění problému s proměnou card_face. Mám tyto chyby: pastebin.com/vQdztzGt

ve zkratce to vypadá že pro každou hodnotu kterou chci získat z pole dostanu
Warning: Illegal string offset 'face_name' in D:\www\mtg_card_price\includes\functions.php on line 386

na řádku 386 je řádek 11 z výše uvedené funkce
$out .= '<li class="list-group-item"><b>'.$face['face_name'].'</b></li>';

Pole které předávám do funkce (z var_dump) pastebin.com/ejesytzA
anonym_
Profil *
janky:
Tak vzhkedem k tomu, ze jde o objekt a ne pole, tak -> namísto hranatých závorek, ze?
janky
Profil
Když zaměním -> za hranate zavorky dostanu
Notice: Trying to get property 'face_name' of non-object in D:\www\mtg_card_price\includes\functions.php on line 386

Edit:
Ještě doplním takto vypadá var_dump($face) v druhém foreach pastebin.com/WsGTEZ3v
Vypadá to jako hodnoty z pole bez klíčů.

Edit:

Zkouším na to jít jinak udělal jsem si jen 1 foreach
function get_card_text($card_arr) {
 
    $out = "";
 
    foreach ($card_arr as $face) {
 
        $out = '<ul class="list-group mb-3 shadow-sm">';
 
            $out .= '<li class="list-group-item"><b>'.$face['face_name'].'</b></li>';
            $out .= '<li class="list-group-item">'.$face['face_type_line'].'</li>';
            if($face['face_oracle_text']) {
                $out .= '<li class="list-group-item">'.nl2br($face['face_oracle_text']).'</li>';
            };
            if($face['face_flavor_text']) {
                $out .= '<li class="list-group-item"><i>'.$face['face_flavor_text'].'</i></li>';
            };
            if($face['face_loyalty']) {
                $out .= '<li class="list-group-item">Loyalty: '.$face['face_loyalty'].'</li>';
            };
            if($face['face_power']) {
                $out .= '<li class="list-group-item">'.$face['face_power'].' / '.$face['face_toughness'].'</li>';
            $out .= '</ul>';
        };
 
        $out .= '</ul>';
    }
 
    return $out;
};

Pokud mám v $card_arr pouze 1 pole tak to funguje a funkce vrátí ul . Pokud ale předám 2 pole tak se po prvním foreach přepíše $out a funkce vrátí zase pouze 1 ul. Takže bych potřeboval poradit jak to udělat aby se to nepřepsalo a funkce vrátila 2 seznamy.
Kajman
Profil
Zkuste před rovnítko v sedmém řádku přidat tečku. Neodstraní to notice, ale možná nebude jen poslední ul.

Zkuste dumpnout i $card_arr na začátku funkce.
janky
Profil
Děkuji za pomoc. Tečka před rovnítkem pomohla a pokud jsou v $card_arr 2 pole funkce vypíše 2x ul.

Nevíte někdo proč v prvním případě nefungoval ten foreach ve foreach?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0