Autor Zpráva
Ota
Profil *
Dobrý den, měl bych otázku ohledně uložení/načtení <select> do sessions.

Pokužívám mnou upravený script od p. Vrány na vícestránkový formulář. Zajímá mě, jakým způsobem se dá nejjednodušeji dosáhnout uložení a znovu načtení selectu do session... když ho vyplním a z druhé strany se vrátím zpět je na defaultní hodnotě. U textových polí používá pro načítání:

 value="' . htmlspecialchars($registrace["jmeno"]) . '"


Jak toho tedy dosáhnout? díky za každou radu ... tady je script...


<?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 0:
                if (!strlen($_POST["jmeno"])) {
                    $chyba .= "Jméno nesmí být prázdné.\n";
                }
            break;
            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 'Jméno: <input name="jmeno" value="' . htmlspecialchars($registrace["jmeno"]) . '" />';

	echo "<select name='stat'>";
	echo "<option value='1'>Česká republika</option>";
	echo "<option value='2'>Slovenská republika</option>";
	echo "<option value='3'>Německo</option>";
	echo "<option value='4'>Rakousko</option>";
	echo "</select>";

    break;
    case 1:
        echo 'E-mail: <input name="email" value="' . htmlspecialchars($registrace["email"]) . '" />';
    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";
?>
YoSarin
Profil
optiony změň na:
echo '<option value="1"' . ($registrace['stat'] == 1 ? ' selected="SELECTED"' : '') . '>Česká republika</option>';
(pokud tedy uloženou hodnotu máš načtenou v $registrace['stat'];
Ota
Profil *
Díky šlo to bez problémů..... stejným způsobem jsem udělal i

echo '<input type="radio" name="pohlavi" value="1"' . ($registrace['pohlavi'] == 1 ? ' checked="checked"' : '') . ' class="styled" />Muž';
echo '<input type="radio" name="pohlavi" value="2"' . ($registrace['pohlavi'] == 2 ? ' checked="checked"' : '') . ' class="styled" />Žena';


Ještě bych měl otázku.... Jak udělám pro tohle kontrolu? Když uživatel načte stránku tak není označená žádná hodnota.. Takže bych chtěl aby v případě nezadání žádné volby to hodilo chybu..

Díky...
G3n3sis19
Profil
if (!isset($_POST['pohlavi'])) die(neni_zvolena_zadna_moznost);
Darker
Profil
if(!isset($_POST["pohlavi"]))//chyba


Byls první.
G3n3sis19
Profil
To ať si OP už upraví podle svého ne?

EDIT: jo byl :D

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