Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Geburstdatum ausrechnen PHP

Diskussion: Geburstdatum ausrechnen PHP im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo Habo, ich lerne seit einiger Zeit PHP. Habe heute morgen ein kleines Script gebastelt, dass anhand der Eingaben ...

Antwort
Alt 09.01.08, 12:53   #1 (permalink)
 
Registriert seit: 21.10.06
weau Leistung: Facit NTK
Likes: 0
Standard Geburstdatum ausrechnen PHP

Anzeige

Hallo Habo,
ich lerne seit einiger Zeit PHP.
Habe heute morgen ein kleines Script gebastelt, dass anhand der Eingaben Tag,Monat,Jahr das Alter errechnen kann.
Ich möchte gerne das ihr meinen Code auf Sinnhaftigkeit und Lesbarkeit mal auseinander nehmt. Nur so kann ich mich verbessern ;-)

Hier mal der Code :

Code:
<?php
/* Dieses PHP-Script findet dein Alter heraus */

//Input User
echo ' Bitte geben Sie ihr Geburtsdatum im Format TT//MM//JJJJ an.
<form action="gebcheck.php" method="POST">
Geb. Tag eingeben : <input type="text" name="tag">
Geb. Monat eingeben : <input type="text" name="monat">
Geb. Jahr eingeben : <input type="text" name="jahr">
<input type="submit">
</form> ' ;

//User Eingaben
$tag = $_POST['tag']; 
$monat = $_POST['monat'];
$jahr = $_POST['jahr'];

/*Debug
echo $tag; echo '</br>';
echo $monat; echo '</br>';
echo $jahr; echo '</br></p>';
*/

//Wenn Input ausgefüllt - Rechnung
if($tag && $monat && $jahr != 0){

	//Aktuelles Datum
	$aktuellesdatum = getdate();
	$tag_heute = $aktuellesdatum[mday];
	$monat_heute = $aktuellesdatum[mon];
	$jahr_heute = $aktuellesdatum[year];


	$alter_tage = $tag_heute - $tag;
	$alter_monat = $monat_heute - $monat;

	if($alter_monat==0){
	$ergebnis = $jahr_heute - $jahr;
	echo $ergebnis;}
        
	if($alter_tage && $alter_monat != 0){
	$ergebnis = $jahr_heute - $jahr -1 ;
	echo $ergebnis;}
	
}

else{
echo "Bitte geben Sie Ihr Gebdatum ein.";}
?>
LG , Weau
weau ist offline   Mit Zitat antworten
Alt 09.01.08, 13:25   #2 (permalink)
 
Registriert seit: 25.07.06
valenterry Leistung: Facit NTK
Likes: 0
Standard RE: Geburstdatum ausrechnen PHP

Zitat:
Original von weau
Hallo Habo,
ich lerne seit einiger Zeit PHP.
Habe heute morgen ein kleines Script gebastelt, dass anhand der Eingaben Tag,Monat,Jahr das Alter errechnen kann.
Ich möchte gerne das ihr meinen Code auf Sinnhaftigkeit und Lesbarkeit mal auseinander nehmt. Nur so kann ich mich verbessern ;-)
Gerne doch

Code:
<?php
/* Dieses PHP-Script findet dein Alter heraus */

//Input User
echo ' Bitte geben Sie ihr Geburtsdatum im Format TT//MM//JJJJ an.
<form action="gebcheck.php" method="POST">
Geb. Tag eingeben : <input type="text" name="tag">
Geb. Monat eingeben : <input type="text" name="monat">
Geb. Jahr eingeben : <input type="text" name="jahr">
<input type="submit">
</form> ' ;

//User Eingaben
$tag = $_POST['tag']; 
$monat = $_POST['monat'];
$jahr = $_POST['jahr'];

/*Debug
echo $tag; echo '</br>';
echo $monat; echo '</br>';
echo $jahr; echo '</br></p>';
*/

//Wenn Input ausgefüllt - Rechnung
if($tag && $monat && $jahr != 0){
Du überprüfst hier, ob die Variablen $tag und $monat überhaupt existieren. PHP geht das ganze so durch:

1. if($tag && $monat && $jahr != 0){
PHP Interpreter: Ist $tag vorhanden und nicht "0"?

Wenn der Besucher also das Feld ausgelassen hat, ist es dennoch vorhanden, aber leer und es steht _nicht_ 0 drin. D.h. obwohl er nichts eingegeben hat, wird in den ersten Anweisungsblock gesprungen.
Besser geht es so:
Code:
 if(!isempty($tag) && !isempty($monat) && !isempty($jahr){
Wobei ich mir nicht ganz sicher bin, ob es "isempty()" oder nur "empty()" war.

Code:
	//Aktuelles Datum
	$aktuellesdatum = getdate();
	$tag_heute = $aktuellesdatum[mday];
	$monat_heute = $aktuellesdatum[mon];
	$jahr_heute = $aktuellesdatum[year];
Die richtige Syntax wäre $array["index"] und nicht $array[index].
Sonst sprichst du nämlich (eventuell vorhandene) Konstanten an. Als besser die richtige Form angewöhnen.

Code:
	$alter_tage = $tag_heute - $tag;
	$alter_monat = $monat_heute - $monat;

	if($alter_monat==0){
	$ergebnis = $jahr_heute - $jahr;
	echo $ergebnis;}
Ich würde dir empfehlen, nach "if" ein Leerzeichen zu machen und die geschwungenen Klammern, in die nächste Zeile zu setzen. Also so:
Code:
if (Bedingung) //oder auch if ( Bedingung )
{
   anweisung1;
   anweisung2;
}
Ist zwar Geschmackssache, aber man soll damit angeblich weniger Fehler machen.

Code:
	if($alter_tage && $alter_monat != 0){
	$ergebnis = $jahr_heute - $jahr -1 ;
	echo $ergebnis;}
}
Code:
else{
echo "Bitte geben Sie Ihr Gebdatum ein.";}
?>
Auch hier solltest du wieder besser einrücken.
Zu allerletzt: Du hast vergessen, Schaltahre mit in deine Rechnung einzubeziehen.
valenterry ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 09.01.08, 13:55   #3 (permalink)
 
Registriert seit: 09.01.05
Imrahil Leistung: Facit NTK
Likes: 0
Standard

1. empty($var) liefert TRUE für eine leere $var zurück.
2. www.php.net/mktime
Lies dich in den Link ein, ist das sinnvollste für diese Anwendung, da du dann gleich mal mit dem Unix Timestamp in Berührung kommst ohne den bei Zeitangaben im Serverseitigen Scripten ohnehin nichts geht.
Übrigens: mkdate($stunde,$minute,$sekunde,$monat,$tag,$jahr) lässt sich mit fast beliebigen zahlen aufrufen.
So ergibt mktime(23,59,59,13,0,1999) (13 für den Monat und 0 für den Tag).
Den letzten Tag des Dezember 1999 ;)
Wäre die 0 eine 1 würde es dir den 1. Januar 2000 anzeigen.
Es sind also beliebige Rechenoperationen möglich.
Beispiel: heute ist der 9.01.2008, das sähe in mktime so aus: mktime(0,0,0,9,1,2008)
Eingabealter: 25 Tage, 4 Monate, 18 Jahre.
Eingabe in mktime(0,0,0,9-25,1-4,2008-18) das gibt dir einen unix timestamp zurück den du mit: date("d-m-Y",mktime(0,0,0,9-25,1-4,2008-18)) als Tag-Monat-Jahr sichtbar machen kannst.
Beachte dazu www.php.net/date
Hf,
Imrahil
Imrahil ist offline   Mit Zitat antworten
Alt 09.01.08, 13:57   #4 (permalink)
Administrator
 
Benutzerbild von Mackz
 
Registriert seit: 02.10.01
Mackz Leistung: Pentium IMackz Leistung: Pentium I
Likes: 30
Standard RE: Geburstdatum ausrechnen PHP

Zitat:
Original von valenterry

Code:
 if(!isempty($tag) && !isempty($monat) && !isempty($jahr){
Wie wärs mit

Code:
if (preg_match("/\d{2}/",$tag) && preg_match("/\d{2}/",$monat) && preg_match("/\d{4}/",$jahr) ){
}
Um das Datum zu validieren ist vielleicht auch checkdate() was für dich.
__________________
RL sux big time... auch 2012!

Deleting pr0n is like killing your best friend

[HaBo] bei Facebook - Werde Fan
Mackz ist offline   Mit Zitat antworten
Alt 09.01.08, 14:50   #5 (permalink)
 
Registriert seit: 25.07.06
valenterry Leistung: Facit NTK
Likes: 0
Standard RE: Geburstdatum ausrechnen PHP

Zitat:
Original von Mackz
Zitat:
Original von valenterry

Code:
 if(!isempty($tag) && !isempty($monat) && !isempty($jahr){
Wie wärs mit

Code:
if (preg_match("/\d{2}/",$tag) && preg_match("/\d{2}/",$monat) && preg_match("/\d{4}/",$jahr) ){
}
Damit wäre es ganz schlecht. Also wenn man schon alles überprüft, kann man auch gleich tollerant werden:

Code:
$tag = ereg_replace ( ".*?(\d{2}).*", "\1", $tag );
Das jeweils für alle und dann erst die Abfrage, ob die Syntax stimmt.
valenterry ist offline   Mit Zitat antworten
Alt 09.01.08, 16:01   #6 (permalink)
Administrator
 
Benutzerbild von Mackz
 
Registriert seit: 02.10.01
Mackz Leistung: Pentium IMackz Leistung: Pentium I
Likes: 30
Standard

Zitat:
Original von valenterry
Damit wäre es ganz schlecht. Also wenn man schon alles überprüft, kann man auch gleich tollerant werden:

Code:
$tag = ereg_replace ( ".*?(\d{2}).*", "\1", $tag );
Das jeweils für alle und dann erst die Abfrage, ob die Syntax stimmt.
Damit wäre es ganz schlecht.

Tolleranz ist was für Noobs Was soll ich dem User unter die Arme greifen wenn er zu doof zum tippen ist? (und das auch noch mit einem unperformanten ereg_replace)
Btw: Dein ist den Code fehlerhaft.
Btw2: Wären hier Dropdown Boxen eh sinnvoller als Inputfelder, womit deine replace-Funktion eh ziemlich sinnlos wird.
__________________
RL sux big time... auch 2012!

Deleting pr0n is like killing your best friend

[HaBo] bei Facebook - Werde Fan
Mackz ist offline   Mit Zitat antworten
Alt 09.01.08, 16:40   #7 (permalink)
 
Registriert seit: 25.07.06
valenterry Leistung: Facit NTK
Likes: 0
Standard

[quote]Original von Mackz
[quote]Original von valenterry
Damit wäre es ganz schlecht. Also wenn man schon alles überprüft, kann man auch gleich tollerant werden:

Code:
$tag = ereg_replace ( ".*?(\d{2}).*", "\1", $tag );
Zitat:
(und das auch noch mit einem unperformanten ereg_replace)
Womit stellst du denn solche Regeln performanter auf? Ein einfaches Ersetzen von Strings reicht doch hier nicht aus?!

Zitat:
Btw: Dein ist den Code fehlerhaft.
Echt? Ich hab ihn nicht getestet, was ist denn daran falsch? Ach, ich seh es gerade, meinst du die Delimiter?

Code:
$tag = ereg_replace ( "/.*?(\d{2}).*/", "\1", $tag );
Ist's besser so?
valenterry ist offline   Mit Zitat antworten
Alt 09.01.08, 22:34   #8 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Arrow

Mackz:

preg_match()? Naja, das sind auch Kanonen auf Spatzen, da du damit ja nur vergleichst, ob eine zweistellige Zahl eingegeben wurde. Prüfen, ob das Datum gültig ist, muss man immer noch mittels checkdate(), also reicht statt preg_match auch ein simples is_int().
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 09.01.08, 22:41   #9 (permalink)
Administrator
 
Benutzerbild von Mackz
 
Registriert seit: 02.10.01
Mackz Leistung: Pentium IMackz Leistung: Pentium I
Likes: 30
Standard

@LX: Auch wieder wahr.... hast recht
__________________
RL sux big time... auch 2012!

Deleting pr0n is like killing your best friend

[HaBo] bei Facebook - Werde Fan
Mackz ist offline   Mit Zitat antworten
Alt 09.01.08, 23:08   #10 (permalink)
Themenstarter
 
Registriert seit: 21.10.06
weau Leistung: Facit NTK
Likes: 0
Standard

Danke für eure Tipps - ich löse das Ganze morgen mit mktime , da es ja auch Schaltjahre direkt mit einrechnen kann :-)
weau ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Geburstdatum ausrechnen PHP
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
math. Formeln ausrechnen in Java... Happydead Code Kitchen 7 12.06.08 22:40
formel ausrechnen [c++] <b00n> Code Kitchen 4 07.10.07 16:13


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61