| Autor | Zpráva | ||
|---|---|---|---|
| PetrQ Profil |
#1 · Zasláno: 17. 4. 2011, 10:00:50
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 |
#2 · Zasláno: 17. 4. 2011, 10:25:16
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 |
#3 · Zasláno: 17. 4. 2011, 10:51:12
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 |
#4 · Zasláno: 17. 4. 2011, 10:59:14
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 |
#5 · Zasláno: 17. 4. 2011, 11:10:08
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 |
#6 · Zasláno: 17. 4. 2011, 13:08:29
jenikkozak:
Ne, v db je to normálně 2010-06-02 |
||
|
Časová prodleva: 15 let
|
|||
0