Autor Zpráva
Vilak
Profil
Zdravím. Mám nějaký php script a v něm podmínku, v ní echo a v echu mám JS script, který by měl vytvořit vyskakovací okno. Ovšem to nefunguje. Poradí mi někdo, proč? Teď se mi neukazuje ani okno samotné (jakoby tam daný JS nebyl).
Jde mi o to, aby se mi do vyskakovacího okna vypsalo toto:
                        for ($i=0; $i <= count($allergens1); $i++) { 
                            echo $allergens1[$i]."<br>";
                        }
JS script vypadá takto:
                        echo '
                        <script type="text/javascript">
                                window.onload = function () {
                                    var vypis ="<?php for ($i=0; $i <= count($allergens1); $i++) { 
                                        echo $allergens1[$i]\n;
                                    } ?>";
                                    alert(vypis);
                                }
                        </script>
                        ';
A celá část scriptu (celá podmínka) - asi není nutno číst:
                    if (isset($_POST['go_allergens'])) {
                        $allergen = $_POST['allergens'];
                        $id = $_POST['id'];
                        $allergens = explode(",", $allergen);
                        $allergens1 = array();
                        for ($i=0; $i < count($allergens); $i++) { 
                            echo "alergeny jsou:".$allergens[$i]."<br>";
                            $number = $allergens[$i];
                            $dotaz = mysql_query("SELECT `allergen` FROM `allergens` WHERE `number` = '$number'");
                            while ($vypis = mysql_fetch_assoc($dotaz)) {
                                $allergens1[] = $vypis['allergen'];
                            }
                        }
                        echo "Alergeny jsou:<br>";
                        for ($i=0; $i <= count($allergens1); $i++) { 
                            echo $allergens1[$i]."<br>";
                        }
                        print_r($allergens1);
                        echo '
                        <script type="text/javascript">
                                window.onload = function () {
                                    var vypis ="<?php for ($i=0; $i <= count($allergens1); $i++) { 
                                        echo $allergens1[$i]\n;
                                    } ?>";
                                    alert(vypis);
                                }
                        </script>
                        ';
                    }
pole $allergens1 má hodnoty, které má mít (ověřeno). pomocí PHP to vypsat dokážu. Ovšem nevím, jak to dat do JS. Má někdo nápad?
Jen chci poprosit, jestli byste to mohli (ohledně JS) vysvětlit trochu polopaticky, protože s ním pracuji poprvé. Děkuji.
xROAL
Profil
<?php v tom echu nemá čo hľadať, veď predsa už si v PHP, načo ho otvárať znovu? Skús to takto:
<?php
$allergensString = '';
for($i = 0, $c = count($allergens1); $i < $c; $i++){
    $allergensString .= $allergens1[$i].PHP_EOL;    // kvôli prehľadnosti zostavíme najskôr výsledný text
}
echo '
    <script type="text/javascript">
        window.onload = function(){
            vypis = "'.$allergensString.'";    // teraz už je to jednoduché
            alert(vypis);
        }
    </script>
';
Vilak
Profil
Nefunguje mi to. Nevím proč. Vyskakovací okno se ani neobjeví.
Script nyní vypadá takto:
                    if (isset($_POST['go_allergens'])) {
                        $allergen = $_POST['allergens'];
                        $id = $_POST['id'];
                        $allergens = explode(",", $allergen);
                        $allergens1 = array();
                        for ($i=0; $i < count($allergens); $i++) { 
                            echo "alergeny jsou:".$allergens[$i]."<br>";
                            $number = $allergens[$i];
                            $dotaz = mysql_query("SELECT `allergen` FROM `allergens` WHERE `number` = '$number'");
                            while ($vypis = mysql_fetch_assoc($dotaz)) {
                                $allergens1[] = $vypis['allergen'];
                            }
                        }
                        echo "Alergeny jsou:<br>";
                        for ($i=0; $i <= count($allergens1); $i++) { 
                            echo $allergens1[$i]."<br>";
                        }
                        print_r($allergens1);
                        $allergensString = '';
                        for($i = 0, $c = count($allergens1); $i < $c; $i++){
                            $allergensString .= $allergens1[$i].PHP_EOL;    // kvôli prehľadnosti zostavíme najskôr výsledný text
                        }
                        echo '
                            <script type="text/javascript">
                                window.onload = function(){
                                    vypis = "'.$allergensString.'";    // teraz už je to jednoduché
                                    alert(vypis);
                                }
                            </script>
                        ';
                    }
Kde je chyba?
juriad
Profil
xROAL:
Hodnoty je nutné přenášet do JS vždy po prohnání funkcí json_encode. Kód lze dále zjednodušit.

<?php
$allergensString = implode("\n", $allergens1);
echo '
    <script type="text/javascript">
        window.onload = function(){
            var vypis = ' . json_encode($allergensString) . ';
            alert(vypis);
        }
    </script>
';

Vilak:
Pokud bys v JS chtěl pole místo řetězce, stačí místo $alergens1 na 6. řádku použít $alergens1. Funkce json_encode se postará o správný JavaScriptový formát pole.

Další zlepšení je použít jediný dotaz do databáze s podmínkou `number` IN (1, 4, 10, 3). Vyžaduje to trochu práce.

Dále pak vždy v JS deklaruj proměnné pomocí var. Předejdeš dost ošklivým chybám.

K chybě: Co vše to zobrazí? Jak vypadá zdrojový kód stránky v prohlížeči (Ctrl+U)?

Fixnut překlep ↓
Vilak
Profil
Super! Funguje! Díky juriad!
Ovšem bojoval jsem s tím a až po chvíli jsem si všiml, že místo dvou l tam je jen jedno... (u allergens1) - takže to dyštak oprav, pro budoucí návštěvníky.
dávám zde celý FUNKČNÍ script (vypsání informací z databáze do vyskakovacího okna):
                    if (isset($_POST['go_allergens'])) {
                        $allergen = $_POST['allergens'];
                        $id = $_POST['id'];
                        $allergens = explode(",", $allergen);
                        $allergens1 = array();
                        for ($i=0; $i < count($allergens); $i++) { 
                            echo "alergeny jsou:".$allergens[$i]."<br>";
                            $number = $allergens[$i];
                            $dotaz = mysql_query("SELECT `allergen` FROM `allergens` WHERE `number` = '$number'");
                            while ($vypis = mysql_fetch_assoc($dotaz)) {
                                $allergens1[] = $vypis['allergen'];
                            }
                        }
                        echo "Alergeny jsou:<br>";
                        for ($i=0; $i <= count($allergens1); $i++) { 
                            echo $allergens1[$i]."<br>";
                        }
                        print_r($allergens1);
                        $allergensString = implode("\n", $allergens1);
                        echo '
                            <script type="text/javascript">
                                window.onload = function(){
                                    var vypis = ' . json_encode($allergensString) . ';
                                    alert(vypis);
                                }
                            </script>
                        ';
                    }

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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