Autor Zpráva
petrr
Profil *
Ahojky. mam takový problémek - vytvořil jsem 3x select - (první obsahuje dny, druhý měsíce, třetí roky) mají ukládat data narození uživatele do databáze, jakym zpusobem se to ukládá?

Ještě mám otázku - jak má program poznat když má měsíc 31 nebo 30 nebo 29 dní??? nebo zda je přestupný rok atd? Děkuji
Kajman_
Profil *
Většinou se to ukládá jako date - tedy si tři hodnoty spojíte a uložíte jako 'YYYY-MM-DD'.

jak má program poznat když má měsíc 31 nebo 30 nebo 29 dní??? nebo zda je přestupný rok atd?
Na základce Vám pravidla neřekli?
tatyalien
Profil
Já používám tohle:
function fun_KontrolaData($datum){
	$nalezeno = false;
	// nahradím čárky za tečky (k vůli překliknutí)
	$odeslano = str_replace(",", ".", $datum);
	// rozdělím text do pole pomocí teček
	// $PoleDatumu[0] - den
	// $PoleDatumu[1] - měsíc
	// $PoleDatumu[2] - rok
	$PoleDatumu = explode(".", $odeslano);
	// kontrola zda pole obsahuje 3 prvnky
	if (count($PoleDatumu) != 3) {
		return false;
	}
	// kontrola zda text obsahuje čísla
	foreach ($PoleDatumu as $rozsekano) { 
		if(!$nalezeno && !is_numeric($rozsekano)) {
			$nalezeno = true;	
  		}	
	}
	if($nalezeno) {
		return false;	
	}
	// poskládám datum typu d.m.rrrr
	$datumovka = fun_odendatPrvniNulu($PoleDatumu[0]).".".fun_odendatPrvniNulu($PoleDatumu[1]).".".$PoleDatumu[2];
	if (platne_datum($datumovka)) {
		// poskládání datumu dle dtb rrrr-m-d a odeslání zpět
			return $PoleDatumu[2]."-".$PoleDatumu[1]."-".$PoleDatumu[0];
	} else  {
		return false;
	}
}
function fun_odendatPrvniNulu($vstup){
	if (strlen($vstup) == 2) {
		return (substr($vstup,0,1) == "0") ? substr($vstup,1,1) : $vstup;	
	} else {
		return $vstup;
	}
}
function platne_datum($datum) {
	// pokud je datum správný, vrátí true, jinak false
    return preg_match('~^([1-9]|19|[12][0-8]|29(?=\\.([^2]|2\\.(([02468][048]|[13579][26])00|[0-9]{2}(0[48]|[2468][048]|[13579][26]))))|30(?=\\.[^2])|31(?=\\.([13578][02]?\\.)))\\.([1-9]|1[012])\\.[0-9]{4}$~D', $datum);
}
function fun_DatumTisk($datum) {
    $test=explode("-",$datum);
    if((count($test))==3) {
    	return $test[2].".".$test[1].".".$test[0];
	} else {
		return false;	
	}
}


tohle jsem si kdysi našel a něco napsal sám, a jsem s tím spokojenej
AM_
Profil
tatyalien:
jen drobný dotaz, proč jsou funkce prefixovány fun_ ? je s nimi legrace, nebo aby se poznalo, že jsou to funkce? v obou případech bych asi tuto prefixaci raději nepoužíval...
tatyalien
Profil
AM:
Ale byl jsem zvyklej z VB v excelu pro jednoznačnost si dát funkci prefix fun_ už od tohohle taky odcházím, ale v pár projektech tohle mám tak jsem to jen vyhrabal a hodil sem bez úprav...
petrr
Profil *
Add #2

"tedy si tři hodnoty spojíte a uložíte jako 'YYYY-MM-DD'."


Chtěl bych se zeptat, jakým způsobem se tyto tři hodnoty spojují? Děkuji
Keeehi
Profil
tečkou
$datum=$_POST["rok"]."-".$_POST["mesic"]."-".$_POST["den"];
petrr
Profil *
Dobře, ještě jsem se chtěl zeptat - když mám tedy 3x vytvořený <select> (první obsahuje dny, druhý měsíce, třetí roky), jakým způsobem přiřadím hodnotu například: do proměnné
$datum=$_POST["rok"]
?
Děkuji

Pro upřenění mojí otázky přikladam ukazku html:
<html>
<select> <!-- select pro rok narozeni -->
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
</select>

<select> <!-- select pro mesic narozeni -->
<option value="1">leden</option>
<option value="2">unor</option>
<option value="3">brezen</option>
</select>

<select> <!-- select pro den narozeni -->
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</html>
Keeehi
Profil
petrr:
$datum=$_POST["rok"]

Ano, pokud
1) formulář se odesílá pře POST
2) <select name="rok">
petrr
Profil *
Právě to jsem zkoušel ale ve výsledku se mi do databáze uloží: 0000-00-00, včem tedy ještě může být problém? Děkuji
Kajman_
Profil *
Ukažte kód včetně form, opravených select, sestavení datumu a uložení do databáze. Také si nechte vypsat přesné znění dotazu, který do db posíláte a připojte ho sem.
petrr
Profil *
Dobře zasílám údaje:


HTML:


<html>

<select><option value="0"  selected="selected" name="den">den:</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<select><option value="0"  selected="selected" name="mesic">měsíc:</option>
<option value="1">Leden</option>
<option value="2">Únor</option>
<option value="3">Březen</option>
<option value="4">Duben</option>
<option value="5">Květen</option>
<option value="6">Červen</option>
<option value="7">Červenec</option>
<option value="8">Srpen</option>
<option value="9">Září</option>
<option value="10">Říjen</option>
<option value="11">Listopad</option>
<option value="12">Prosinec</option>

</select>
<select><option value="0"  selected="selected" name="rok" >rok:</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
</select>
</html>	
		


datum sem sestavil takto:
<?php

$datumnarozeni=$_POST['rok']."-".$_POST['mesic']."-".$_POST['den'];

?>


a do db to posílám takto:
$queryreg = mysql_query("

INSERT INTO datumnarozeni VALUES ('$datumnarozeni')

");


Výsledkem je že se mi to do db uloží jako: 0000-00-00

Včem může spočívat tento problém? Děkuji
Kajman_
Profil *
Problém je v tom, že ignorujete obě podmínky (rady) z příspěvku [#9]
petrr
Profil *
Proč myslíte že ignoruji? Však mám přepsané ty podmínky v tom kódu, nebo mi tam ještě něco chybí? děkuji
Kajman_
Profil *
1) stále nemáte <form method="POST"...>
2) name cpete tam, kam nepatří

Obě podmínky jsou důležité.
petrr
Profil *
Jo už chápu co myslíte, mám to uložené - ve
<form method="POST"> <select></select></form>


kam tedy jinam to
name
definovat?

takže v #9 je to špatně? Děkuji
Kajman_
Profil *
v [#9] je to správně, v [#12] špatně
petrr
Profil *
děkuji už to vidím

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