[PHP] Altersabfrage

broom0815

Cadet 3rd Year
Registriert
Apr. 2003
Beiträge
36
Hallo!

cih bekomme über ein formular eine eingabe des geburtsdatums:

ein feld (geb_tag) für den Tag (Format 01-31)
ein Feld(geb_mon) für den Monat (Format 01-12)
ein Feld(geb_jahr) dür das Jahr (Format z.b. 1911)

nun will ich mit einer if-abfrage überrpüfen, ob die person, die sich einträgt über oder unter 18 ist!

wie mach ich das am geschicktesten?

danke im voraus!
 
hab's jetzt nicht getestet, aber Fehler kannst du ja selber beheben:

PHP:
<?php

// Datum auf Richtigkeit überrüfen
if ( !checkdate ( $geb_mon, $geb_tag, $geb_jahr ) ) {
    echo 'Das Datum '.$datum.' ist falsch.';

// >= 18?
} else {
  if ( date ( 'Y' ) - $geb_jahr > 17 ) echo 'alt genug';
  elseif ( date ( 'Y' ) - $geb_jahr == 17 AND $geb_mon - date ( 'n' ) > 0 ) echo 'alt genug';
  elseif ( date ( 'Y' ) - $geb_jahr == 17 AND $geb_mon - date ( 'n' ) == 0 AND $geb_tag - date ( 'j' ) >= 0 ) echo 'alt genug';
  else echo 'nicht alt genug';
}

?>

gibt sicher eine elegantere Lösung ;)
 
Zuletzt bearbeitet:
danke, hätte nicht gedacht, dass es eine so einfache möglichkeit gibt. werds gleich mal ausprobieren
 
@Loopo

Das Script ist wirklich einfach, ob es auch genial ist,das werde ich einmal testen;)

MfG
CJ
 
So ginge es auch mit weniger if's:

Code:
<?php
$alter=mktime(0,0,0,$geb_mon, $geb_tag, $geb_jahr);
$heuteminus18jahre=mktime(0,0,0,date ( 'm' ),date ( 'd' ),date ( 'Y' )-18);
if($alter<=$heuteminus18jahre)
{
	echo "über 18\n";
}
else
{
	echo "Sorry, du bist ".$alter-$heuteminus18jahre." Tage zu jung!\n";
}
?>
 
Das sieht ja noch einfacher aus...
...jetzt habe ich es noch nicht einmal geschafft,
das von Loopo zu testen;)

Aber pcwTJaR, deines teste ich auch noch:D

MfG
CJ
 
ja, die 4 Tage, die ich mich jezz mit PHP beschäftige machen sich doch ausgezahlt.

Eigentlich bin ich ja ein oller Perl-Anhänger und verfechter unverständlicher Regulärer Ausdrücke *g*
 
Original erstellt von pcwTJaR
ja, die 4 Tage, die ich mich jezz mit PHP beschäftige machen sich doch ausgezahlt.

Eigentlich bin ich ja ein oller Perl-Anhänger und verfechter unverständlicher Regulärer Ausdrücke *g*
die gibt's aber bei PHP auch ;)
 
Original erstellt von pcwTJaR
So ginge es auch mit weniger if's:

Code:
<?php
$alter=mktime(0,0,0,$geb_mon, $geb_tag, $geb_jahr);
$heuteminus18jahre=mktime(0,0,0,date ( 'm' ),date ( 'd' ),date ( 'Y' )-18);
if($alter<=$heuteminus18jahre)
{
	echo "über 18\n";
}
else
{
	echo "Sorry, du bist ".$alter-$heuteminus18jahre." Tage zu jung!\n";
}
?>

sehr sehr cool...

genau sowas hab ich gesucht. danke. das andere funzt übrigens auch! auf euch ist echt verlass!
 
Original erstellt von Loopo
die gibt's aber bei PHP auch ;)

kennst du Grund 10, warum Pascal besser ist als C *g*
10. In C kann man dieses tun:
for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
In Pascal kann man dieses NICHT tun:
for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

Naja, in perl die Ausdrücke kommen aufgrund der formatierung noch besser an als das iolle preg_raplace(); *g*
 
:eek: :confused_alt: :freak: :stacheln: :watt: freak2

mir reicht das schon :p

Code:
^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-.]?[0-9a-zA-Z])*\\.[a-zA-Z]{2,3}$
 
In C kann man dieses tun:
for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

In Pascal kann man dieses NICHT tun:
for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

das muss ich mir mal merken :D
 
eine email-überprüfung, die 4-zeichen-lange top-level-domains ausschliesst udn diverse Sonderzeichen nicht wirklich abfängt sowie ein "-" am Anfang nicht zulässt, was es aber durchaus gibt.

Würde ich nicht benutzen, da sehr viele gültige Adressen ausgeschlossen werden...

Edit:

Wie kann ich die Gültigkeit einer Mailadresse testen? nach de.comp.lang.php (dclp) FAQ
 
Zuletzt bearbeitet:
He jetzt weiß ich, an wen ich mich wenden kann, wenn ich wieder bösartige RegExps schreiben muss :)

Das mit C ist geil... und funktioniert wirklich... wobei P dann höchstwahrscheinlich ein Compilermakro für printf ist.

Hat sich mal jemand den Code zu SHA angeschaut? Ein Kommiliton hat mir mal den in Perl geschriebenen Source gezeigt... sieht fast so witzig aus wie eine Binärdatei im Texteditor :)
 
Guten Morgen,

ich habe leidernoch nicht soviel Ahnung von PHP, kann mir jemand vielleicht einen kompletten Quellcode machen mit HTML, die Formatierung mach ich dann selber!

Danke :p
 
ich habe eine HTML Datei mit folegendem Inhalt geschrieben

HTML:
<html>
<head>
<form action="check.php" method="post">
MONTH 
<select name="mon" size="1">
<option value=""> </option>
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
DAY 
<select name="day" size="1">
<option value=""> </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>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>

YEAR 
<select name="year">
<option value=""></option>
<option value="1900">1900</option>
<option value="1901">1901</option>
<option value="1902">1902</option>
<option value="1903">1903</option>
<option value="1904">1904</option>
<option value="1905">1905</option>
<option value="1906">1906</option>
<option value="1907">1907</option>
<option value="1908">1908</option>
<option value="1909">1909</option>
<option value="1900">1910</option>
<option value="1911">1911</option>
<option value="1912">1912</option>
<option value="1913">1913</option>
<option value="1914">1914</option>
<option value="1915">1915</option>
<option value="1916">1916</option>
<option value="1917">1917</option>
<option value="1918">1918</option>
<option value="1919">1919</option>
<option value="1920">1920</option>
<option value="1921">1921</option>
<option value="1922">1922</option>
<option value="1923">1923</option>
<option value="1924">1924</option>
<option value="1925">1925</option>
<option value="1926">1926</option>
<option value="1927">1927</option>
<option value="1928">1928</option>
<option value="1929">1929</option>
<option value="1930">1930</option>
<option value="1931">1931</option>
<option value="1932">1932</option>
<option value="1933">1933</option>
<option value="1934">1934</option>
<option value="1935">1935</option>
<option value="1936">1936</option>
<option value="1937">1937</option>
<option value="1938">1938</option>
<option value="1939">1939</option>
<option value="1940">1940</option>
<option value="1941">1941</option>
<option value="1942">1942</option>
<option value="1943">1943</option>
<option value="1944">1944</option>
<option value="1945">1945</option>
<option value="1946">1946</option>
<option value="1947">1947</option>
<option value="1948">1948</option>
<option value="1949">1949</option>
<option value="1950">1950</option>
<option value="1951">1951</option>
<option value="1952">1952</option>
<option value="1953">1953</option>
<option value="1954">1954</option>
<option value="1955">1955</option>
<option value="1956">1956</option>
<option value="1957">1957</option>
<option value="1958">1958</option>
<option value="1959">1959</option>
<option value="1960">1960</option>
<option value="1961">1961</option>
<option value="1962">1962</option>
<option value="1963">1963</option>
<option value="1964">1964</option>
<option value="1965">1965</option>
<option value="1966">1966</option>
<option value="1967">1967</option>
<option value="1968">1968</option>
<option value="1969">1969</option>
<option value="1970">1970</option>
<option value="1971">1971</option>
<option value="1972">1972</option>
<option value="1973">1973</option>
<option value="1974">1974</option>
<option value="1975">1975</option>
<option value="1976">1976</option>
<option value="1977">1977</option>
<option value="1978">1978</option>
<option value="1979">1979</option>
<option value="1980">1980</option>
<option value="1981">1981</option>
<option value="1982">1982</option>
<option value="1983">1983</option>
<option value="1984">1984</option>
<option value="1985">1985</option>
<option value="1986">1986</option>
<option value="1987">1987</option>
<option value="1988">1988</option>
<option value="1989">1989</option>
<option value="1990">1990</option>
<option value="1991">1991</option>
<option value="1992">1992</option>
<option value="1993">1993</option>
<option value="1994">1994</option>
<option value="1995">1995</option>
<option value="1996">1996</option>
<option value="1997">1997</option>
<option value="1998">1998</option>
<option value="1999">1999</option>
</select>
<br><br>
<input name="submit" type="submit" class="but" value="Click Here to Submit" name="signature"> 
</form>

</body>
</html>

und dazu folgende PHP Datei (check.php) im selben Verzeichniss
PHP:
<?php

// Datum auf Richtigkeit überrüfen
if ( !checkdate ( $mon, $day, $year ) ) {
    echo 'Das Datum '.$datum.' ist falsch.';

// >= 18?
} else {
  if ( date ( 'Y' ) - $year > 17 ) echo 'alt genug';
  elseif ( date ( 'Y' ) - $year == 17 AND $mon - date ( 'n' ) > 0 ) echo 'alt genug';
  elseif ( date ( 'Y' ) - $year == 17 AND $mon - date ( 'n' ) == 0 AND $day - date ( 'j' ) >= 0 ) echo 'alt genug';
  else echo 'nicht alt genug';
}

?>

bekomme aber beim absenden des Formulares immer die Meldung
Das Datum ist falsch.

Bitte um Hilfe :(

edit: ZeroFlash, habe es selber mal versucht, aber bin gescheiert, so ist es wohl einfacher mir zu helfen :)
 
Zuletzt bearbeitet:
ich glaub mit der einstellung und den angaben wird dir hier keiner weiterhelfen... wie wärs mal wenn du

a.) sagst was du machen willst

und

b.) versuchst das ganze mit helfe selber zu bauen, die arbeit wird dir keiner abnehmen, helfen aber sicherlich gerne wenn du es präzise ausdrückst und vll mal zeigst was du bisher zur lösung deines problems gemacht hast...

edit: wieso warst auch auf einmal schneller mit schreiben... bin zu faul zum löschen ;P
 
Zurück
Oben