Autor Zpráva
PetrQ
Profil
Dobrý den,
pravděpodobně se zeptám hloupě, ale řeším problém s formulářem v php, kde mimo jiné ukládám datum do session ( ochrana proti vymazání zadaných údajů při kontrole nevyplněných položek v PHP ), resp. využívám tři select listy - den, měsíc, rok - ke každému vytvořím session, do DB pak z těchto tří vytvořím datum
$datumnarozeni="$rok"."$mesic"."$den";

a uložím ve formátu date.
Potřeboval bych zamezit tomu, aby se hodnota při změně selectu do session přičítala, což se někdy stane. Ačkoli není v selectu např. rok 2020, v DB se občas objeví.
Obešel jsem to kontrolou v javascriptu a zrušil session, ale je možné řešení v php?
Session mažu až po uložení do dat DB.
Děkuji předem Petr

Takto vypadá select:
<select id="rok" name="rok" style="width: 90px;" >
                <!-- zapamatuje si zadaný údaj select boxu po reloadu-->
                <?php if($_SESSION['rok']=='')
          echo "<option value='".date("Y", strtotime($datt))."'>".date("Y", strtotime($datt))."</option>";
		    else {
		            echo "<option value='".$_SESSION['rok']."' style='text-align:center'>".$_SESSION['rok']."</option>";

		  } 
		  ?>
                <option value="2011">2011</option>
                <option value="2010">2010</option>
                <option value="2009">2009</option>
                </select>
panther
Profil
PetrQ:
ukládání roku do session máš kde? V uvedeném kousku kódu není nikde ani náznak toho, že by se někde něco přičítalo. Pokud v session už něco je, a pošleš tam další hodnotu, ta původní se zahodí.
Tori
Profil
PetrQ:
ukládám datum do session ( ochrana proti vymazání zadaných údajů při kontrole nevyplněných položek v PHP )
Ten formulář zpracováváte jiným skriptem, než který generuje formulář? (že musíte použít session místo $_POST)

Ad řádky 3-8: Co když vyplním rok, ale ne měsíc - pak bude v selectu dvakrát stejný rok? Jestli by nebylo lepší spíš podle hodnoty v session/POST předvybrat některou hodnotu:
echo '<select name="rok"><option value="">Vyberte rok</option>';
for ($rok = 2012; $rok >=2000; $rok--)  {
  echo "<option value='$rok'" . ($rok == $_SESSION['rok'] ? ' selected' : '') . ">$rok</option>";
}
echo '</select>';
PetrQ
Profil
panther:
Po
session_start();

následuje
$_SESSION['den']=$_POST['den'];
$_SESSION['mesic']=$_POST['mesic'];
$_SESSION['rok']=$_POST['rok'];

$mesic=$_SESSION['mesic'];
$den=$_SESSION['den'];
$rok=$_SESSION['rok'];

$datumnarozeni="$rok"."$mesic"."$den";

následuje uložení do Mysql.


Pokud v session už něco je, a pošleš tam další hodnotu, ta původní se zahodí.
To jsem doufal nicméně občas se tak asi nestane a v db mám rok 2020, přesto, že v selectu vůbec není ...

Nemůže tedy být chyba ve formátu data? Popř. mě napadlo - mám session nazvané stejně na stránce registrace i editace.
Nebo problém při odesílání formuláře - dvakrát klik na submit, opakované odeslání při odchycení chyb nebo nevím ...
Nedaří se mi nasimulovat tu situaci.
Běží to na Station a chyby se projevily nejvíc u uživatelů ze zahraničí - Rusko, Polsko, Čechy pouze jednou
Nemůžu přijít na to, kde se ta hodnota bere. Ale vždycky je 2020. Ať už byl zadán rok 2010 nebo 2009 a dál se rozhodí i den. Měsíc mi zatím seděl vždycky.
V 90% případů datum bylo v pořádku ...
jenikkozak
Profil
PetrQ:
$datumnarozeni="$rok"."$mesic"."$den";
Do databáze ukládáte datum ve formátu YYYYMMDD, tedy bez pomlček?
Každopádně na serveru je nutné všechna data přicházející od uživatele kontrolovat.
PetrQ
Profil
jenikkozak:
Ne, v db je to normálně 2010-06-02

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