Autor Zpráva
gerix
Profil
Zdravím,

stáhl jsem si zdrojový kód na vícestránkový formulář od p. Vrány a mám menší problém. V případě,že script spustím v původním naprogramování jede bez problému. Jakmile mezi case 0: a break; vložím svůj převážně html kód neuloží se session (html kód má cca 500 řádků). Tzn. že první strana naběhne bez problémů, kliknu na "pokračovat", přesměruje mě to na další stranu, kliknu na tlačítko "zpět" a najednou údaje chybí(na první straně). Textová pole jsou prázdná. Má příkaz "switch" nějaké omezení? nebo čím by to mohlo být? Zkoušel jsem snad vše, ale nic nepomohlo.

Zde je kód:
switch ($stranka) {
   case 0:

echo "		<div id='formular1'>";


echo "			<div id='formular_mezera1'></div>";
echo "			<div id='formular_osobni_udaje'>";
echo "				<div id='formular_osobni_udaje_nadpis'>";
echo "				<p class='formular_nadpisy_styl'>Osobní údaje<p>";
echo "				</div>";
echo "				<div id='formular_osobni_udaje_nadpis_linka'></div>";
echo "				<div id='formular_osobni_udaje_nadpis_radek0'>";

echo "					<div id='formular_osobni_udaje_nadpis_radek1'><p class='formular_text_styl_tucne'>Pohlaví:<span class='formular_cervena'>*</span></p></div>";
echo "					<div id='formular_osobni_udaje_nadpis_radek2'>";
												
echo '						<div id="formular_osobni_udaje_nadpis_radek2_p"><input type="radio" name="pohlavi" value="1"' . ($registrace['pohlavi'] == 1 ? ' checked="checked"' : '') . '  class="styled2" /><p class="formular_vseobeny_font">Muž</p></div>';
echo '						<div id="formular_osobni_udaje_nadpis_radek2_p"><input type="radio" name="pohlavi" value="2"' . ($registrace['pohlavi'] == 2 ? ' checked="checked"' : '') . '  class="styled2" /><p class="formular_vseobeny_font">Žena</p></div>';

echo "					</div>";

echo "					<div id='formular_osobni_udaje_nadpis_radek1'><p class='formular_text_styl_tucne'>Titul: <a class='tip' href='#' title='Například:<p>-Pan, Paní</p><p>-Ing., Doc.</p>'><img src='image/otaznik_maly.png' class='otaznik_maly'></a></p></div>";
echo "					<div id='formular_osobni_udaje_nadpis_radek2'><input type='text' id='titul' name='titul' class='formular_pole2' value='" . htmlspecialchars($registrace["titul"]) . "'></div>";

echo "					<div id='formular_osobni_udaje_nadpis_radek1'><p class='formular_text_styl_tucne'>Jméno:<span class='formular_cervena'>*</span></p></div>";
echo "					<div id='formular_osobni_udaje_nadpis_radek2'><input type='text' id='jmeno' name='jmeno' class='formular_pole1' value='" . htmlspecialchars($registrace["jmeno"]) . "'></div>";

echo "					<div id='formular_osobni_udaje_nadpis_radek1'><p class='formular_text_styl_tucne'>Přijmení:<span class='formular_cervena'>*</span></p></div>";
echo "					<div id='formular_osobni_udaje_nadpis_radek2'><input type='text' id='prijmeni' name='prijmeni' class='formular_pole1' value='" . htmlspecialchars($registrace["prijmeni"]) . "'></div>";

echo "					<div id='formular_osobni_udaje_nadpis_radek1'><p class='formular_text_styl_tucne'>Datum narození:<span class='formular_cervena'>*</span> <a class='tip' href='#' title='<p>Ve formátu:</p><p>den/měsíc/rok</p><p>Například: 01/02/1988</p>'><img src='image/otaznik_maly.png' class='otaznik_maly'></a></p></div>";
echo "					<div id='formular_osobni_udaje_nadpis_radek2'>";

break;


.......
atd.

Díky za odpovědi
Joker
Profil
gerix:
A hodnoty v $registrace se vezmou odkud?

Má příkaz "switch" nějaké omezení?
Tím to nebude.
gerix
Profil
<?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";
    }
}


pak pokracuje muj jiz zmineny kod... čím tedy? napadá vás něco?
MunzarM
Profil
Ahoj
Koukam na to a
$registrace
si sice ze session načteš, naplníš ho, ale nevidim že bys ho do session zpatky vracel. Je sice předávaná odkazem, ale nespoléhal bych na to a radši to udělal tak, že po naplnění z postu (řádek 20)
$registrace
pěkně uložíš zpátky. Potom tu nikde nemáš submit na odeslání formuláře, ale to bude nejspíš pod tim switchem.

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