andre grund: PHP Altersprüfung!

Hallo,

und zwar will ich für meine seite eine altersprüfung hinzufügen! Wenn man sein   Geburtsjahr ein gibt und älter als 16 ist soll man zur homepage werden weitergeleitet und wenn man jünger ist soll man auf google.de geleitet werden.

hier meine der code meiner eingabe seite!
[code lang=php]
Index Seite
<br>
<br>
Sie müssen älter als 16 sein!
<br>
<br>
Geburtsdatum.: <input type="text" name="jahr" size="4">
<input type="submit" value="weiter zur seite">
[code]

wenn man dann den Button "weiter zur seite" drückt soll die Berechnung ausgeführt werden. Wenn das Ergebnisse älter als 16 ist soll man zur Homepage kommen und wenn es kleiner (auch bei 16 ) ist soll man auf google.de kommen. Könnte mir da jemand helfen kenne mich nicht mit php aus.

danke für die mühe!

  1. Guten Abend,
    wiso willst du das ganze unbedingt mit PHP machen? Mit JavaScript wäre doch das viel einfacher.

    Gruss Hackerboy1993

    1. hallo,

      JavaScript würde auch gehen!

      1. hallo,

        JavaScript würde auch gehen!

        Ich schreibe dir freundlicherweise ein skript in php ;-)
        Warte kurz.

        1. das wäre super nett von dir

          1. Funktioniert das so bei dir??

            http://timolang.freehostia.com/ab16.php

            Gruss Timo

            1. ja funzt perfekt!super nett von dir.

              könnte ich den code bekommen?

              mfg

              1. Klar.

                Gute Nacht und noch viel Spass beim Programmieren.

                Grüsse Hackerboy // Timo

                  
                <?php  
                session_start();  
                $dateiname="ab16.php"; /// Hier den Namen der aktuellen Datei angeben.  
                $homepage="dubist16.html"; /// Hier den Namen der Seite angeben an die man weitergeleitet wird, sofern man 16 ist.  
                  
                  
                if($todo=="check")  
                {  
                 $timestamp = time();  
                 $currentyear = date("Y",$timestamp);  
                 $minimumyear = $currentyear-16;  
                  
                 if($_POST["jahr"]<$minimumyear)  
                 {  
                  
                 header("Location: $homepage");  
                 }  
                  
                 else  
                 {  
                  
                 header("Location: http://www.google.de");  
                 }  
                  
                  
                }  
                else  
                {  
                echo <<<END  
                <html>  
                <body>  
                <br>  
                <br>  
                Sie müssen älter als 16 sein!  
                <br>  
                <br>  
                <form action="$dateiname?todo=check" method="post">  
                Geburtsdatum.: <input type="text" name="jahr" size="4">  
                <input type="submit" value="weiter zur seite">  
                </form>  
                </body>  
                </html>  
                END;  
                }  
                ?>  
                  
                
                
                1. Hallo,

                  bitte schickt diesen Thread nicht so ins Archiv.

                  ... wenn ich gestern 16 geworden wäre, dann möchte ich doch nicht bis Silvester warten, um diese tolle Seite zu sehen.

                  Das muss doch auch mit php hinzukriegen sein ;)

                  Gruß plan_B

                  --
                       *®*´¯`·.¸¸.·
                  1. Hello,

                    bitte schickt diesen Thread nicht so ins Archiv.

                    ... wenn ich gestern 16 geworden wäre, dann möchte ich doch nicht bis Silvester warten, um diese tolle Seite zu sehen.

                    Das muss doch auch mit php hinzukriegen sein ;)

                    klar ist das hinzukriegen.
                    Wie lautet also Deine konkrete Frage zum Thema? :-)

                    Dann gehen wir mal davon aus, dass der Besucher in Zukunft sein komplettes Geburtsdatum eingeben kann, nicht muss. Je genauer er das macht, desto genauer kann seine "Freischaltung" stattfinden.
                    Sinnvollerweise werden dafür drei Datenfelder benutzt:

                    <p>
                        Geburtsdatum: TT MM JJJJ<br>
                        <input type="text" name="gebdat[tag]" size="2" value="00">
                        <input type="text" name="gebdat[monat]" size="2" value="00">
                        <input type="text" name="gebdat[jahr]" size="4" value="0000">
                      </p>

                    Was muss nun damit geschehen auf Serverseite?

                    • Umwandlung und Rangecheck für
                        -- Jahr   Wenn nicht angegeben, abbrechen
                        -- Monat  Wenn nicht angegeben oder falsch, mit 12 ersetzen
                        -- Tag    Wenn nicht angegeben oder falsch, mit zum Monat (und Jahr)
                                  passendem Wert für volle Tagezahl ersetzen.

                    Je nachdem, wieviele davon den Check bestanden haben, Bestimmung/Festlegung des Eingabewertes für den Vergleich. Vergleichen mit dem Stichtag und dann prüfen...

                    Viele Spaß beim Codieren.

                    Ein harzliches Glückauf

                    Tom vom Berg

                    http://bergpost.annerschbarrich.de
                    .

                    --
                    Nur selber lernen macht schlau
                    1. Hallo Tom,

                      Viele Spaß beim Codieren.

                      ... dass du das hinkriegst, hatte ich keinen Zweifel dran. Die Aufforderung ging eher in Richtung der Nachwuchscoder hier :)

                      Gruß plan_B

                      --
                           *®*´¯`·.¸¸.·
                      1. allo danke für die ganze hilfe!

                        wo muß ich den variable einfügen?

                        $_POST['jahr'] = intval($_POST['jahr']);

                        ------------------
                        hier ist der code vom Hackerboy!

                        <?php
                        session_start();
                        $dateiname="ab16.php"; /// Hier den Namen der aktuellen Datei angeben.
                        $homepage="dubist16.html"; /// Hier den Namen der Seite angeben an die man weitergeleitet wird, sofern man 16 ist.

                        if($todo=="check")
                        {
                         $timestamp = time();
                         $currentyear = date("Y",$timestamp);
                         $minimumyear = $currentyear-16;

                        if($_POST["jahr"]<$minimumyear)
                         {

                        header("Location: $homepage");
                         }

                        else
                         {

                        header("Location: http://www.google.de");
                         }

                        }
                        else
                        {
                        echo <<<END
                        <html>
                        <body>
                        <br>
                        <br>
                        Sie müssen älter als 16 sein!
                        <br>
                        <br>
                        <form action="$dateiname?todo=check" method="post">
                        Geburtsdatum.: <input type="text" name="jahr" size="4">
                        <input type="submit" value="weiter zur seite">
                        </form>
                        </body>
                        </html>
                        END;
                        }
                        ?>

                2. Mahlzeit,

                  OMG - selten so schlechten Code gesehen ...

                  session_start();

                  Wofür eine Session?

                  $dateiname="ab16.php"; /// Hier den Namen der aktuellen Datei angeben.
                  $homepage="dubist16.html"; /// Hier den Namen der Seite angeben an die man weitergeleitet wird, sofern man 16 ist.

                  if($todo=="check")

                  Wo wird die Variable $todo mit einem Inhalt gefüllt? Richtig - nirgendwo. Also wird die Bedingung niemals erfüllt und der Besucher bekommt immer nur das Formular zu sehen, wird jedoch niemals irgendwohin umgeleitet. Bravo!

                  if($_POST["jahr"]<$minimumyear)

                  Ahja. Und was ist, wenn in $_POST['jahr'] gar kein Jahr, ja vielleicht sogar gar kein numerischer Wert drin steht?

                  header("Location: $homepage");

                  header() erfordert bei Angabe von "Location:" einen vollständigen URI. Wenn ich mir anschaue, was in $homepage drinsteht, scheint das wohl eher nicht zuzutreffen.

                  Geburtsdatum.: <input type="text" name="jahr" size="4">

                  Normalerweise würde der durchschnittliche Benutzer hier erwarten, dass er sein komplettes Geburtsdatum eingeben soll - würde ich zumindest bei der "Feldbeschriftung" denken. Woher soll man wissen, dass nur das Jahr gemeint ist?

                  MfG,
                  EKKi

                  --
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. Grüße,| hallo,

        JavaScript würde auch gehen!

        sowas von sinnlos^^ wenn ich den abschalte - was dann? keine chance mehr auf die seite zu gelngen oder völliger ausfall des alterschutzes?

        klientseitige sicherheitsmaßnahmen sind so zuverlässig wie chinesische demokratie. also kan man sich die mühe gleich sparen und es bei einem hinweis belassen^^

        MFG
        bleicher

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
        Boccaccio
        1. Hi,

          sowas von sinnlos^^ wenn ich den abschalte - was dann? keine chance mehr auf die seite zu gelngen oder völliger ausfall des alterschutzes?

          Wenn der "Schutz" darin besteht, aus dem vom User eingegebenen Geburtsjahr das Alter zu ermitteln, ist sowieso kein Schutz vorhanden.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Grüße,| Hi,

            sowas von sinnlos^^ wenn ich den abschalte - was dann? keine chance mehr auf die seite zu gelngen oder völliger ausfall des alterschutzes?

            Wenn der "Schutz" darin besteht, aus dem vom User eingegebenen Geburtsjahr das Alter zu ermitteln, ist sowieso kein Schutz vorhanden.

            derart eindeutig lächerlich, fast wie das antirauchergesetzt, sollte es aber IMHO nicht sein XD

            MFG
            bleicher

            --
            __________________________-
            Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
            Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
            Boccaccio
          2. Hello,

            Wenn der "Schutz" darin besteht, aus dem vom User eingegebenen Geburtsjahr das Alter zu ermitteln, ist sowieso kein Schutz vorhanden.

            Vielleicht mag Andre aber tortzdem gerne wissen, wie das Prinzip funktioniert, auch wenn es in diesem Anwendungsfall nicht sehr sinnvoll ist?

            Hallo Andre,

            Wenn Du einen  Datenwert an PHP übertagen bekommen hast, kannst Du damit eine Bedingung füttern.
            Ich nehme an, dass Du im Formular auch ein <form>-Element hast?

            <input type="text" name="jahr" size="4">

            Bei Dir kommt der Wert dann in $_POST['jahr'] an. Achte auf Groß-/Kleinschreibung für den Index des $_POST-Arrays.

            Damit kannst Du nun eine bedingung füttern.
            Vorher solltest Du ihn aber auf ein unschädliches Datenformat konvertieren, falls Dir jemand über diesen Eingabekanal einen Roman geschickt hat anstelle des Alters. Das Formular ist ja fälschbar.

            Wir benutzen dafür gleich dieselbe Variable, damit wir auch später immer sehen können, woher der Wert kam:

            $_POST['jahr'] = intval($_POST['jahr']);

            Nun kann in $_POST nur noch ein numerischer Wert, eine Ganzzahl stehen.

            Na, und dann musst Du rechnen. Gehen wir mal davon aus, dass jamand im Januar geboren ist, der hat dann eben nach dieser einfachen Methode pech gehabt, denn Du willst ja auch die Dezember-Schäfchen erfassen. Die sollen auch 16 sein.

            if ($_POST['jahr'] - 1993 >= 16)
              {
                 ## Bedingung erfüllt
                 seite_anzeigen();
              }
              else
              {
                 ## Weiterleitung zu google
                 header('Location: http://www.google.de/search?q=%22leider+noch+nicht+16%22=');
              }

            Vor der Benutzung der header()-Funktion darf noch keinerlei Ausgabe an den Browser stattgefunden haben. Header müssen immer erst alle gesammelt worden sein, bevor die Ausgabe beginnt, da sie ja am Anfang eines request oder einer Response stehen müssen.
            Dem Browser wird also mit dem Location-Header die Information gesendet, dass er bitte nochmal anfragen soll unter der angegenenen _vollständigen_ URL.

            Für Deine Funktion seite_anzeigen() (musst Du selber schreiben) gibt es verschiedene Lösungsansätze. Der beste wäre wohl, hier die eigentliche Seite per readfile()-Funktion
            http://de.php.net/manual/en/function.readfile.php aus einer Datei hinzuzuladen. Die sollte dann aber valides HTML und ggf, CSS und JavaScript enthalten, also keine PHP-Befehle, denn readfile() scheut nicht rein in die Datei, die es an den Browser weiterleitet. Wenn in der Seite noch PHP-Code auszuwerten ist, dann müsstest Du include_once() benutzen dafür. In diesem Falle musst   Du aber darauf achten, dass die Datei in einem gesicherten vertrauenswürdigen Bereich abgelegt ist, also keinesfalls von einer URL geholt wird.

            Wenn Du auch hier mit einem Location-Header weiterleiten würdest, dann könnte nachher jeder, der den Link kennt, auch ohne Deine "Prüfung" den Link verwenden...

            Ein harzliches Glückauf

            Tom vom Berg

            http://bergpost.annerschbarrich.de
            .

            --
            Nur selber lernen macht schlau
            1. Hello,

              if ($_POST['jahr'] - 1993 >= 16)

              Die Bedingung ist natürlich so Quatsch. Aber das bekommst Du doch auch selber hin ;-)

              Wenn das aktuelle Jahr - dem Geburtsjahr >= 17 ist muss es heißen,
                  wenn Du nur nach dem Jahr fragst. Mehr sollte das nicht ausdrücken.

              if (date('Y') - $_POST['jahr'] >= 17)  ## 16+1, weil auch die Dezemberhasen erst 16 werden müssen

              So ist es wohl besser...

              Ein harzliches Glückauf

              Tom vom Berg

              http://bergpost.annerschbarrich.de
              .

              --
              Nur selber lernen macht schlau
            2. Hallo danke für die ganze hilfe!

              wo muß ich den variable einfügen?

              $_POST['jahr'] = intval($_POST['jahr']);

              ------------------
              hier ist der code vom Hackerboy!

              <?php
              session_start();
              $dateiname="ab16.php"; /// Hier den Namen der aktuellen Datei angeben.
              $homepage="dubist16.html"; /// Hier den Namen der Seite angeben an die man weitergeleitet wird, sofern man 16 ist.

              if($todo=="check")
              {
               $timestamp = time();
               $currentyear = date("Y",$timestamp);
               $minimumyear = $currentyear-16;

              if($_POST["jahr"]<$minimumyear)
               {

              header("Location: $homepage");
               }

              else
               {

              header("Location: http://www.google.de");
               }

              }
              else
              {
              echo <<<END
              <html>
              <body>
              <br>
              <br>
              Sie müssen älter als 16 sein!
              <br>
              <br>
              <form action="$dateiname?todo=check" method="post">
              Geburtsdatum.: <input type="text" name="jahr" size="4">
              <input type="submit" value="weiter zur seite">
              </form>
              </body>
              </html>
              END;
              }
              ?>

              1. Hello,

                wo muß ich den variable einfügen?

                $_POST['jahr'] = intval($_POST['jahr']);

                Die Variable ist schon da, wenn das Script aufgerufen wird, wenn z.B. am Formular nichts manipuliert wurde...

                Also richtigerweise müsste man vorher fragen, ob die Variable überhaupt vorhanden ist:

                if (!isset($_POST['jahr']))   ### die Variable wurde gar nicht angelegt
                   {
                      ## Abbruch mit böser Fehlermeldung
                   }
                   else
                   {
                      $_POST['jahr'] = intval($_POST['jahr']);  ## Inhalt von $_POST['jahr'] vorbehandeln
                   }

                Diese Vorbehandlung des Inhaltes sollte vor der ersten echten Verwendung (nächster Block) stattdinden

                if($todo=="check")
                {
                $timestamp = time();
                $currentyear = date("Y",$timestamp);
                $minimumyear = $currentyear-16;

                if($_POST["jahr"]<$minimumyear)   ### hier wird $_POST['jahr'] verwendet

                Da Clients lügen können, die Daten auch von Bots geschickt werden können usw. sollte man immer erst prüfen, ob die erwarteten Daten da sind, ob nicht wventuell zuviele Daten (mehr als erwartet) gekommen sind und ob die Daten im richtigen Format vorliegen, damit sie in den passenden Typ umgewandelt werden können. Außerdem prüft man, wo es nötig ist, ob der Inhalt der Variablen palusible Inhalte enthält und "verpackt" (maskiert) sie so, dass sie für die weitere Verarbeitung unschädlich sind. Das ist aber immer abhängig davon, was man damit macht.

                Ein harzliches Glückauf

                Tom vom Berg

                http://bergpost.annerschbarrich.de
                .

                --
                Nur selber lernen macht schlau
                1. Hallo,

                  also muß die code so aussehn oder? Weil es funzt nicht!

                  <?php
                  session_start();

                  $dateiname="alter_fertig.php"; /// Hier den Namen der aktuellen Datei angeben.
                  $homepage="dubist16.html"; /// Hier den Namen der Seite angeben an die man weitergeleitet wird, sofern man 16 ist.

                  if (!isset($_POST['jahr']))   ### die Variable wurde gar nicht angelegt
                     {
                        ###fehler
                     }
                     else
                     {
                        $_POST['jahr'] = intval($_POST['jahr']);  ## Inhalt von $_POST['jahr'] vorbehandeln
                     }

                  if($todo=="check")
                  {
                   $timestamp = time();
                   $currentyear = date("Y",$timestamp);
                   $minimumyear = $currentyear-16;

                  if($_POST["jahr"]<$minimumyear)
                   {

                  header("Location: $homepage");
                   }

                  else
                   {

                  header("Location: http://www.google.de");
                   }

                  }
                  else
                  {
                  echo <<<END
                  <html>
                  <body>
                  <br>
                  <br>
                  Sie müssen älter als 16 sein!
                  <br>
                  <br>
                  <form action="$dateiname?todo=check" method="post">
                  Geburtsdatum.: <input type="text" name="jahr" size="4">
                  <input type="submit" value="weiter zur seite">
                  </form>
                  </body>
                  </html>
                  END;
                  }
                  ?>

                  1. Mahlzeit,

                    also muß die code so aussehn oder? Weil es funzt nicht!

                    "Funzen" ist kein mir bekanntes deutsches Wort und "funzt nicht" ist keine hilfreiche Problembeschreibung.

                    Mir scheint, Du hast absolut gar keine Ahnung, was Du überhaupt tust. Es bieten sich Dir drei Alternativen:

                    1. Lerne die Grundlagen von PHP, verstehe den Code von "Hackerboy1993", begreife, warum er Mist ist, und programmiere Deine "Altersüberprüfung" selbst (anschließend wirst Du zwar einsehen, dass Dein ganzes Vorhaben Blödsinn ist, aber Du hast immerhin etwas gelernt).

                    2. Lass Dir von jemandem eine Pseudo-Altersüberprüfung (so wie "Hackerboy1993") basteln und lebe mit den sich daraus ergebenden Schwierigkeiten.

                    3. Bezahle jemanden dafür, eine richtige Altersverifikation in Deine Seiten einzubauen.

                    Achja - und bitte poste nicht immer wieder diesen unsäglichen Code vom "Hackerboy1993" ... mittlerweile hat sich den schon jeder ansehen müssen, der diesen Thread verfolgt und er wird dadurch nicht besser, dass er ständig wiederholt wird.

                    MfG,
                    EKKi

                    --
                    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                  2. Hi,

                    also muß die code so aussehn oder? Weil es funzt nicht!

                    Das funz nich, weil du noch nich alt genuch.

                    MfG ChrisB