Ankündigung

Einklappen
Keine Ankündigung bisher.

checkdate Fehler

Einklappen

Neue Werbung 2019

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

  • checkdate Fehler

    Hi,

    checkdate gibt
    Code:
    Warning:  checkdate() expects parameter 2 to be long, string given in /home/.../create_account.php on line 80
    aus, wenn man sich vertippt und z.B. 2e.12.2008 eingibt.

    Kann mir das mal jemand erklären?


    Viele Grüße

    Andreas

  • #2
    Ich glaube, dass ist, weil die Funktion keine Strings akzeptiert.

    siehe Definition: http://php.benscom.com/manual/en/function.checkdate.php

    PHP-Code:
    bool checkdate int monthint dayint year 
    Das heisst, du kannst als Parameter nur int-Werte geben. Da "2e" aber ein String ist, wird das nicht klappen.

    Lösung:
    Überprüfe zuerst, ob es sich bei den Werten um Zahlen handelt und führe dann erst checkdate aus.

    Gruss

    Stefan

    Kommentar


    • #3
      Zitat von stimhof
      Lösung:
      Überprüfe zuerst, ob es sich bei den Werten um Zahlen handelt und führe dann erst checkdate aus.
      Hi,

      daran hab ich auch schon gedacht...
      kannst Du mir sagen wie bzw. mit welcher Funktion ich das mache?
      so?
      PHP-Code:
      <?php
      if (is_numeric($var)){
            if (
      checkdate($var)){ ...

      ?>
      Viele Grüße

      Andreas

      Kommentar


      • #4
        Ich denke, dass könnte klappen. Probiers mal aus!
        Mir fällt da zwar noch ein:

        PHP-Code:
        is_int() 
        Diese Funktion wäre eigentlich noch besser als is_numeric. Nehmen wir an, der Benutzer gibt eine Kommazahl ein. Dann gibt is_nummeric true aus und is_int false. Und wir wollen ja nicht, dass der Benutzer z.B. beim Monat 8.5 eingibt.

        Gruss

        Stefan

        Kommentar


        • #5
          Die Eingaben aus einem HTML Formular oder überhaupt alles, was per POST/GET/COOKIE ankommt, sind Zeichenketten. Da liefert is_int immer false
          PHP-Code:
          <?php
          echo is_int('2') ? 'is_int' '!is_int';
          ?>
          Nutzt also nicht viel an dieser Stelle.

          Kommentar


          • #6
            Zitat von stimhof
            Ich denke, dass könnte klappen. Probiers mal aus!
            Mir fällt da zwar noch ein:

            PHP-Code:
            is_int() 
            Diese Funktion wäre eigentlich noch besser als is_numeric. Nehmen wir an, der Benutzer gibt eine Kommazahl ein. Dann gibt is_nummeric true aus und is_int false. Und wir wollen ja nicht, dass der Benutzer z.B. beim Monat 8.5 eingibt.

            Gruss

            Stefan
            Vielen Dank!

            Ich wünsch Dir noch nen schönen Abend...

            Viele Grüße

            Andreas

            Kommentar


            • #7
              Zitat von Bruchpilot
              Die Eingaben aus einem HTML Formular oder überhaupt alles, was per POST/GET/COOKIE ankommt, sind Zeichenketten. Da liefert is_int immer false
              PHP-Code:
              <?php
              echo is_int('2') ? 'is_int' '!is_int';
              ?>
              Nutzt also nicht viel an dieser Stelle.
              Hi,

              also doch is_numeric? oder gibts da noch was anderes?


              Viele Grüße

              Andreas

              Kommentar


              • #8
                Nein, das geht ja wohl auch nicht, wegen den Kommazahlen.

                Es gibt da schon noch eine Möglichkeit, das ganze rauszufinden. Das sind die Regex (Reguläre Ausdrücke).
                Ich bin aber nicht so der Profi in denen. (Besser gesagt, ich hasse das Thema. )
                Wenn du Zeit hast, kannst du ja das mal durchlesen:
                http://tut.php-q.net/regex.html

                Dann könnte man das Ganze mit der preg_match() - Funktion machen. Das sähe dann etwa so aus:
                (Dort wo jetzt REGEX steht, würde dann der richtige Regex kommen.)

                PHP-Code:
                <?php

                    
                if(preg_match('REGEX'$var)) {
                        echo 
                "Geklappt!";
                    } else {
                        echo
                "Nicht geklapt!";
                    }

                ?>
                Aber wie gesagt, in diesem Thema bin ich nicht so der Hirsch. Tut mir leid.

                Gruss

                Stefan

                Kommentar


                • #9
                  ohje, Zeit, ... eigentlich nie und immer viel zu Wenig :wink:
                  Ich dank Dir auf jeden Fall vielmals.
                  ... werd mich dann morgen mal an´s lesen machen...

                  Viele Grüße

                  Andreas

                  Kommentar


                  • #10
                    wo läge das problem einfach eine typkonvertierung durchzuführen also einfach (int) $m zu schreiben, dann wird aus 2e eben bestenfalls 2
                    da checkdate() nachkommastellen ignoriert wäre auch is_numeric() in ordnung
                    falls doch stimhofs vorschlag nehmen, dann vielleicht preg_match('#\d{1,2}\.\d{1,2}\.\d{4}#', $date)

                    Kommentar


                    • #11
                      checkdate gibt bei '2e' als Parameter eh false zurück. Einfach Warnung unterdrücken.
                      PHP-Code:
                      <?php
                      $eingabe 
                      '2e.12.2008';

                      $tmp explode('.'$eingabe);
                      if (
                      count($tmp)!=|| !@checkdate($tmp[0], $tmp[1], $tmp[2]))
                          echo 
                      $eingabe' ist kein gültiges Datum';
                      ?>

                      Kommentar


                      • #12
                        Zitat von karl-150
                        wo läge das problem einfach eine typkonvertierung durchzuführen also einfach (int) $m zu schreiben, dann wird aus 2e eben bestenfalls 2
                        da checkdate() nachkommastellen ignoriert wäre auch is_numeric() in ordnung
                        falls doch stimhofs vorschlag nehmen, dann vielleicht preg_match('#\d{1,2}\.\d{1,2}\.\d{4}#', $date)
                        Zitat von Bruchpilot
                        checkdate gibt bei '2e' als Parameter eh false zurück. Einfach Warnung unterdrücken.
                        PHP-Code:
                        <?php
                        $eingabe 
                        '2e.12.2008';

                        $tmp explode('.'$eingabe);
                        if (
                        count($tmp)!=|| !@checkdate($tmp[0], $tmp[1], $tmp[2]))
                            echo 
                        $eingabe' ist kein gültiges Datum';
                        ?>
                        Was ich jetzt einsetze weis ich noch nicht.
                        Ich hab aber auf jeden Fall wieder einiges gelernt ...
                        Vielen Dank an alle!

                        Kommentar


                        • #13
                          Zitat von Bruchpilot
                          Einfach Warnung unterdrücken.
                          Bruchpilot: Warnungen unterdrücken ist nicht gerade ein sauberer Programmierstil!
                          Wenn auf deiner Seite ein Fehler kommt, unterdrückst du dann auch einfach die Fehler?
                          Durch das Unterdrücken ist das Problem nicht behoben!

                          Kommentar


                          • #14
                            Natürlich ist durch das Unterdrücken in diesem speziellen Fall das Problem behoben. Welches andere, ungelöste Problem siehst Du bei genau diesem Vorgehen? Welcher Fall ist nicht abgedeckt? Welche Seiteneffekte können entstehen?
                            So verallgemeinert kann man auch sagen "Leben ist tödlich"

                            Kommentar


                            • #15
                              Übrigens: Wenn du im Leben ein Schild siehst "Klippe! Todesgefahr!" unterdrückst du dann auch alle Warnungen und spazierst geradeaus über die Klippe?

                              So genug diskutiert. Gute Nacht.

                              Kommentar

                              Lädt...
                              X