Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfung Datumseingabe in einem Affenformular

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfung Datumseingabe in einem Affenformular

    Hallo,

    ich habe ein Script geschrieben, das folgendes leisten soll:
    1. Prüfen, ob User eingeloggt ist.
    2. wenn eingeloggt: prüfen ob mind. 1 "Credit" vorhanden ist
    3. wenn mind. 1 Credit vorhanden: prüfen ob Formularfeld "Text" leer ist oder das Datum in der Vergangenheit liegt
    4. wenn Formularfeld "Text" leer ist oder das Datum in der Vergangenheit liegt: Formular anzeigen
    5. Beim Absenden des Formulars soll überprüft werden ob Formularfeld "Text" leer ist oder das Datum in der Vergangenheit liegt.
    Wenn Text leer: Formular erneut aufrufen und Fehlerhinweis "Bitte Feld Text ausfüllen" anzeigen!
    Wenn Datum in der Vergangenheit: Formular erneut aufrufen und Fehlerhinweis "Datum zu klein" anzeigen!
    Wenn Text ausgefüllt und Datum in der Zukunft liegt: Daten in die Datenbank speichern!

    Jetzt passiert folgendes. Gebe ich einen Text ein und wähle ich beim Datum den 01.September 2011 aus, dann macht das Script genau das was ich will: Formular erneut anzeigen, mein bereits eingegebener Text bleibt erhalten, ein Fehlerhinweis beim Datum wird angezeigt.
    Gebe ich einen Text ein und wähle ich beim Datum den 01.Oktober 2011 aus, dann passiert nichts. Die Daten werden nicht in die Datenbank gespeichert, obwohl das Datum in der Zukunft liegt. Es wird einfach das Formular mit meinem bereits eingegebenen Text wieder angezeigt und in den Auswahlfeldern des Datums steht der 01. Januar 2011.

    Das liegt irgendwie an dieser Zeile:
    PHP-Code:
    if( $sendedatum date(Ymd) OR 
    Denn ohne diese Zeile werden die Daten in die DB gespeichert.
    Leider komme ich alleine nicht auf den Fehler. Vielleicht kann mir jemand von euch weiterhelfen.

    Komplettes Script:
    PHP-Code:
    <?php
        error_reporting
    (E_ALL);
        require(
    "datenbankverbindung.php");

        
    session_start();
        
    $sql "SELECT
                                   credits
                            FROM
                                   tabkunde
                            WHERE
                                   idkunde = '"
    .mysql_real_escape_string($_SESSION['userid'])."'
                           "
    ;
                    
    $result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                    
    $row mysql_fetch_assoc($result);
                    echo 
    $row['credits'];

        if(!isset(
    $_SESSION['userid']))
        {
             echo 
    "Du bist nicht eingeloggt.<br>\n".
                  
    "Bitte <a href=\"login.php\">logge</a> dich zuerst ein.\n";
        }
        elseif (
    $row['credits'] < '1')
        {
            echo 
    "Du hast nicht gen&uuml;gend Credits.<br>\n";
        }
        elseif   (
    $row['credits'] > '0')
        {
            
    // Abfrage, ob Formular vollständig ausgefüllt?
            
    if( $sendedatum date(Ymd) OR
                
    $_POST['text'] == "")
            {
               
    // Aufruf Formular
               
    echo '<form action="forum.php" method="POST">';

               
    // Formularfeld für Text zeichnen
               
    echo '<p>Text: ';
               echo 
    '<input type="text" name="text" value="';
               
    // Inhalt, falls das Formular bereits unvollständig ausgefüllt wurde
               
    echo $_POST['text'];
               echo 
    '" size="20" maxlength="60" />';
                
    // Feld Text leer?
               
    if ( $_POST['text'] == "" )
               {
                   
    // Formular bereits schon mal aufgerufen?
                   
    if ( $_POST['schon_mal_abgesendet'] == "ja" )
                   {
                        
    // Fehlermeldung - Feld Text ausfüllen
                        
    echo "Hinweis: Bitte Feld Text ausfüllen";
                   }
                }
               echo 
    '</p>';

               
    // Formularfeld für Tag zeichnen
                
    echo '<p>Datum: ';
                echo 
    'Tag: ';
                echo 
    "\n<select name=\"d\">\n";
                for(
    $i=1;$i<=31;$i++) {
                echo 
    "\t<option value=\""$i ."\">"$i ."</option>\n"; }
                echo 
    "</select>\n";

               
    // Formularfeld für Monat zeichnen
               
    $Monate = array(1  => "Januar",
                    
    2  => "Februar",
                    
    3  => "März",
                    
    4  => "April",
                    
    5  => "Mai",
                    
    6  => "Juni",
                    
    7  => "Juli",
                    
    8  => "August",
                    
    9  => "September",
                    
    10 => "Oktober",
                    
    11 => "November",
                    
    12 => "Dezember");

                echo 
    'Monat: ';
                echo 
    "\n<select name=\"m\">\n";
                for(
    $i=1;$i<=12;$i++) {
                echo 
    "\t<option value=\""$i ."\">"$Monate[$i] ."</option>\n"; }
                echo 
    "</select>\n";

               
    // Formularfeld für Jahr zeichnen
               
    echo 'Jahr: ';
               echo 
    "\n<select name=\"y\">\n";
                for(
    $i=2011;$i<=2020;$i++) {
                echo 
    "\t<option value=\""$i ."\">"$i ."</option>\n"; }
                echo 
    "</select>\n";
                echo 
    '</p>';

               
    // Datum formatieren
                
    $sendedatum sprintf("%d%02d%02d"$_POST['y'], $_POST['m'], $_POST['d']);

                
    // Datum in der Vergangenheit?
               
    if ( $sendedatum date(Ymd) )
               {
                   
    // Formular bereits schon mal aufgerufen?
                   
    if ( $_POST['schon_mal_abgesendet'] == "ja" )
                   {
                        
    // Fehlermeldung - Feld Datum ausfüllen
                        
    echo "Hinweis: Datum zu klein";
                   }
                }

               
    // Feld zur Kontrolle für Zweitaufruf
               
    echo '<input type="hidden" name="schon_mal_abgesendet" value="ja" />';

               
    // Submit-Button zum absenden der Eingaben
               
    echo '<p>';
               echo 
    '<input type="Submit" name="absenden" value="absenden" />';
               echo 
    '</p>';
               
    // Ende vom Formular
               
    echo '</form>';
               exit;

            }
            else
            {
            
    // alle Angaben liegen vor, nun gehts weiter
            // Datum formatieren
            
    $sendedatum sprintf("%d%02d%02d"$_POST['y'], $_POST['m'], $_POST['d']);

            
    // Daten in DB speichern
            
    $sql_insert "INSERT INTO tabtext
                (idkunde,
                text,
                sendedatum)
                Values
                    ('"
    .mysql_real_escape_string($_SESSION['userid'])."',
                    '"
    .mysql_real_escape_string (trim($_POST['text']))."',
                    
    $sendedatum
                    )
                "
    ;

               if (
    mysql_query($sql_insert$dbverbindung) != false)
                {
                    echo 
    'Vielen Dank! Dein Eintrag wurde gespeichert.';
                   }
                else
                {
                    echo 
    'Der Eintrag wurde nicht gespeichert!';

                }
            
    mysql_close($dbverbindung);

            }
        }

    ?>

  • #2
    date() erzeugt einen String, wenn du Datum(sgewichtungen) vergleichen willst solltest du entsprechend numerische (integer) timestamps vergleichen oder ( besser ) DateTime-Objekte ( simpler )

    PHP-Code:
    if( date_create($sendedatum) < date_create() OR $_POST['text'] == ""
    außerdem: "date(ymd)" versucht einen Wert aus der globalen Konstante ymd auszulesen, die höchstwahrscheinlich nicht definiert wurde. PHP reagiert dann insofern es aus dem namen der angegebenen Konstante einen String-Replika erzeugt ( den Namen also als String übernimmt ).

    Würde dein Error-Reporting entsprechend hochgedreht sein, würdest du dies auch durch eine Notice vom PHP-Parser mitgeteilt bekommen.

    Kommentar

    Lädt...
    X