Autor Zpráva
gix
Profil *
Zdravim, mam registracni formular ktery se sklada z nekolika kroku => z nekolika stranek. Na prvni uzivatel vyplni jmeno, na druhe prijmeni,..... s overenim vyplnenych poli a s overenim emailu. Nakonec se vse ulozi do databaze. Vse funguje jak ma az na jednu vec. Kdyz se uzivatel chce vratit na predchozi krok, pole ktere vyplnil je prazdne. Jak docilit toho abych uchoval hodnotu kterou tam zadal? Diky moc za rady.

tohle je kód:

<?php

include("config.php");
$spojeni=mysql_connect($MySQL_server,$MySQL_user,$MySQL_user_password);
$spojenidb=mysql_select_db($MySQL_db);


session_start();
$posledni_stranka = 3;
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 = "";


function check_email($email) {
    $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // znaky tvořící uživatelské jméno
    $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // jedna komponenta domény
    return eregi("^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$", $email);
}


   
   // uložení vyplněných hodnot
   foreach ($_POST as $key => $val) {
      if ($key != "form_id" && $key != "zpet" && $key != "stranka") {
         $registrace[$key] = stripslashes($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 (!strlen($_POST["prijmeni"])) {
               $chyba .= "Příjmení nesmí být prázdné.\n";
            }
         break;
         case 2:
            if (!strlen($_POST["adresa"])) {
               $chyba .= "Adresa nesmí být prázdná.\n";
            }
         break;
         case 3:
            if (!check_email($_POST["email"])) {
               $chyba .= "Vyplňte prosím e-mail.\n";
            }
            if (!$chyba && !mysql_query("INSERT INTO uzivatele (jmeno, prijmeni, adresa, email) VALUES ('" . addslashes($registrace["jmeno"]) . "', '" . addslashes($registrace["prijmeni"]) . "', '" . addslashes($registrace["adresa"]) . "', '" . addslashes($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"]) . '" />';
   break;
   case 1:
      echo 'Příjmení: <input name="prijmeni" value="' . htmlspecialchars($registrace["prijmeni"]) . '" />';
   break;
   case 2:
      echo 'Adresa: <input name="adresa" value="' . htmlspecialchars($registrace["adresa"]) . '" />';
   break;
   case 3:
      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";
?> 

tiso
Profil
gix: takéto rozdelenie formulára po jednotlivých políčkach je blbosť, pre návštevníkov je jednoduchšie vyplniť tieto údaje naraz. Rozdeľovanie na viac stránok sa používa iba pri rozsiahlych formulároch, a pri takých, kde sú ďalšie časti závislé od vyplnenia predchádzajúcich. Tento formulár do týchto skupín nepatrí.
gix
Profil *
chjo, tohle je jen ukazka.... je jasny ze bych to takhle nikdy v zivote nepouzil... budu delat mnohem vetsi formular ale potrebuju tohle jako vzor. Ma otazka tedy trva..
xmark
Profil
gix:
Skladuj to třeba v cookies.
gix
Profil *
tak uz jsem to vyresil. Mel bych ale jeste jednu otazku...

Nefunguje mi diakritika pri vlozeni do databaze...

soubor je ulozenej jako utf8 , v databazi je taky zvoleno utf8 a na zacatku stranky mam
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>x</title>

</head>


<body>


proc mi to teda vlozi do databaze misto hacku a carek klikyhaky? Diky za odpoved
xmark
Profil
Na konci config.php:

  mysql_query("SET character_set_results=utf8");
  mysql_query("SET character_set_connection=utf8");
  mysql_query("SET character_set_client=utf8");
  mysql_query("SET names='utf8';");
gix
Profil *
xmark:

Diky moc, z části to funguje:)

Když vložím "žščřďťň" tak mi to zapíše jako => "ľąčřď»ň"

Je to problém samotného kódování? Pokud ano, jaké je nejlepší použít?
xmark
Profil
Není to problém samotného kódování.
Musí se shodovat kódování na těchto místech:

1. uvedené kódování v hlavičce stránky
2. skutečné kódování souboru
3. kódování polí tabulky v databázi (teď z hlavy to přesně nevím, ale je tam něco jako utf8-general)
4. kódování v config.php

Resp. ne úplně musí, ale když toto všechno bude utf8, tak nebudeš mít problém.
gix
Profil *
Uz mi to funguje. Diky moc za pomoc

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0