Autor Zpráva
gerix
Profil
Zdravím, chtěl bych poprosit o radu ohledně zjištění existence session v array.

Používám jako základ tento script. Jde mi o to, že na první straně vyplním textove_pole1, textove_pole2. Na druhé straně formuláře chci udělat kontrolu jestli existují nebo ne a v závisloti na to vypsat formulář.

Zkoušel jsem něco sesmolit, ale pořád mi to hází chybu: Fatal error: Can't use function return value in write context in

Co dělám špatně? Díky za odpovědi.

if (isset($_SESSION($registrace["textove_pole1"])) || isset($_SESSION($registrace["textove_pole2"]))) {
    echo "existuje minimalne jedna z techto hodnot - vypisu formular";
}
else {
    echo "neexistuje ani jedna promenna";
}
Alphard
Profil
$_SESSION()?
gerix
Profil
Zkoušel jsem to i takhle, sice to nehodi chybu, ale i když mám vyplněny hodnoty "textove_pole1","textove_pole2" stále to zobrazuje chybu "neexistuje ani jedna promenna".

if (isset($_SESSION[$registrace["textove_pole1"]]) || isset($_SESSION[$registrace["textove_pole2"]])) {
    echo "existuje minimalne jedna z techto hodnot - vypisu formular";
}
else {
    echo "neexistuje ani jedna promenna";
}
Alphard
Profil
Jakub Vrána to tam má jinak, my nevíme, kde berete $registrace.
gerix
Profil
Takhle to myslím, co dělám špatně při testování jestli hodnoty existují?

<?php
session_start();
$posledni_stranka = 1;

if (!$_POST) {
    $stranka = 0;
    $registrace = array();
} else {
    $stranka = intval($_POST["stranka"]);
    $form_id = (isset($_POST["form_id"]) ? intval($_POST["form_id"]) : count($_SESSION["registrace"]));
    $registrace = &$_SESSION["registrace"][$form_id];
    $chyba = "";
    
    // uložení vyplněných hodnot
    foreach ($_POST as $key => $val) {
        if ($key != "form_id" && $key != "zpet" && $key != "stranka") {
            $registrace[$key] = $val;
        }
    }
    
    if ($_POST["zpet"]) {
        $stranka--;
    } else {
        
        // kontrola vyplněných hodnot
        switch ($stranka) {
            case 1:
                if (!check_email($_POST["email"])) {
                    $chyba .= "Vyplňte prosím e-mail.\n";
                }
                if (!$chyba && !mysql_query("INSERT INTO uzivatele (jmeno, email) VALUES ('" . mysql_real_escape_string($registrace["jmeno"]) . "', '" . mysql_real_escape_string($registrace["email"]) . "')")) {
                    $chyba = "Data se nepodařilo uložit.";
                }
                if (!$chyba) {
                    header("Location: ok.php");
                    exit;
                }
            break;
        }
        if (!$chyba) {
            $stranka++;
        }
    }
}

// vypsání formuláře
echo "<form action='' method='post'>\n";
if ($_POST) {
    echo "<input type='hidden' name='form_id' value='$form_id' />\n";
    echo "<input type='hidden' name='stranka' value='$stranka' />\n";
    if ($chyba) {
        echo "<p>$chyba</p>\n";
    }
}
switch ($stranka) {
    case 0:

        echo 'pole1: <input name="textove_pole1" value="' . htmlspecialchars($registrace["textove_pole1"]) . '" />';
        echo 'pole2: <input name="textove_pole2" value="' . htmlspecialchars($registrace["textove_pole2"]) . '" />';

    break;
    case 1:

        if (isset($_SESSION[$registrace["textove_pole1"]]) || isset($_SESSION[$registrace["textove_pole2"]])) {
                echo "existuje minimalne jedna z techto hodnot - vypisu formular";
        }
        else {
                 echo "neexistuje ani jedna promenna";
        }

    break;
}
echo "\n<input type='submit' value='" . ($stranka < $posledni_stranka ? "Další" : "Dokončit") . "' />\n";
if ($stranka) {
    echo "\n<input type='submit' name='zpet' value='Zpět' />\n";
}
echo "Strana: " . ($stranka + 1) . "/" . ($posledni_stranka + 1) . "\n";
echo "</form>\n";
?>
Alphard
Profil
Zkuste tohle, je tam na začátku reference, moc se mi to nechce číst celé, se dál děje :-) Jestli to nepůjde, tak print_r($_SESSION); a podívat se, jak to vypadá.
if (isset($registrace["textove_pole1"]) || isset($registrace["textove_pole2"]))
gerix
Profil
Alphard:
Zkuste tohle, je tam na začátku reference, moc se mi to nechce číst celé, se dál děje :-) Jestli to nepůjde, tak print_r($_SESSION); a podívat se, jak to vypadá.
>
if (isset($registrace["textove_pole1"]) || isset($registrace["textove_pole2"]))


píše to, že existustují hodnoty a to v obou případech(vyplněno, nevyplněno).

Vyplněno:
Array ( [registrace] => Array ( [0] => Array ( [textove_pole1] => y [textove_pole2] => x ) ) )

Nevyplněno:
Array ( [registrace] => Array ( [0] => Array ( [textove_pole1] => [textove_pole2] => ) ) )
Alphard
Profil
Možná chcete použít empty(), kontrolované proměnné existují. Tady jsou pěkné tabulky, dejte se do jejich studia.
gerix
Profil
s funkcí empty() to už funguje. Jěště bych měl jednu otázku.

V případě, že nezadám žadnou hodnotu vypíše to, že neexistuje
V případě, že zadám obě hodnoty vypíše to, že existuje
a teď problém:
V případě, že zadám jen jednu hodnotu vypíše to že neexistuje - jde tohle nějak ošetřit aby stačila jen jedna hodnota?

	if (empty($registrace["textove_pole1"]) || empty($registrace["textove_pole2"])) {
	    echo "neexistuje ani jedna promenna";
	}
	else {
	    echo "existuje minimalne jedna z techto hodnot - vypisu formular";
	}
	
panther
Profil
gerix:
if (empty($registrace["textove_pole1"]) && empty($registrace["textove_pole2"])) {
    echo "neexistuje ani jedna promenna";
} else {
    echo "existuje minimalne jedna z techto hodnot - vypisu formular";
}
gerix
Profil
Díky moc:) Teď vše funguje jak má.

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: