[PHP] Captcha nur an bestimmten Tagen / Zeiten

Dieses Thema im Forum "Webentwicklung" wurde erstellt von freakZ, 5. November 2012 .

  1. 5. November 2012
    Captcha nur an bestimmten Tagen / Zeiten

    hi,

    ich wollte gerne wissen ob es auf einfachstem wege möglich ist ein captcha sagen wir fr ab 22 bis 6 uhr einzublenen und an "festen" wie helloween , da hier vermehrt spam aufkommen bei mir stattfindet.

    Das ganze soll bei einem Gästebuch eingebunden werden, ist es also Freitag 23 uhr kommt einzufalls captcha das eingegeben werden muss ist dieses korrekt ab ins Gästebuch.

    Bin für ALLE tipps daaaaankbar
     
    1 Person gefällt das.
  2. 5. November 2012
    AW: Captcha nur an bestimmten Tagen / Zeiten

    Hey,

    klar ist das ohne Probleme möglich:

    1) Du baust eine Funktion zum Prüfen ob zum aktuellen Zeitpunkt ein Captcha notwendig ist
    2) Du baust das Ergebnis der Prüfung bei der Ausgabe des Captcha's ein
    3) Du baust das Ergebnis der Prüfung bei der Validierung des Captcha's ein

    In PHP könnte diese Funktion zB so aussehen:

    PHP:
    <? php


    function  EnableCaptcha  ()

        
    // Prüfung für Freitag ab 23:00
        
    if ( date ( "w" ) ==  5 ) {
            if (
    date ( "H" ) >=  23 ) {
                return 
    true ;
            }
        } 
        
    // Prüfung für Samstag bis 06:00
        
    if ( date ( "w" ) ==  6 ) {
            if (
    date ( "H" ) <  6 ) {
                return 
    true ;
            }
        }

        return 
    false ;
    }

    ?>

    Gruß Blackb!rd
     
    1 Person gefällt das.
  3. 5. November 2012
    Zuletzt bearbeitet: 6. November 2012
    AW: Captcha nur an bestimmten Tagen / Zeiten

    oder so
    PHP:
    <? php
    // date('w')
    // Numerischer Tag einer Woche 
    // 0 (für Sonntag) bis 6 (für Samstag)
    function  EnableCaptcha  (){
        
    $wochenTage  = array( 1 , 2 , 3 , 4 , 5 );
        return 
    in_array ( date ( 'w' ),  $wochenTage );
    }
    if(
    EnableCaptcha ()){
        echo 
    'zeige Captcha' ;
    }else {
        echo 
    'zeige kein Captcha' ;
    }
    // edit
    nicht persönlich nehmen, aber der sinn und zweck eines forums ist lösungen zu problemen öffentlich zu machen.
    ich bleib sehr oft in div. foren hängen, weil auf einmal alles per PN komuniziert wird.
    find ich blöd.
    daher, wenn du noch fragen hast und lösungen benötigst, dann stell deine fragen öffentlich.
    dann können mehr leute helfen und besucher können die lösung nachlesen.
    prinzpiell gilt: es gibt keine doofen fragen, es gibt nur doofe antworten!

    hier eine erweiterung (geht sicher noch schicker)
    PHP:
    <? php

    // http://php.net/manual/de/function.date.php
    // date('w')
    // Numerischer Tag einer Woche 
    // 0 (für Sonntag) bis 6 (für Samstag)
    // die(date('d.m.Y H:m:s'));
    function  EnableCaptcha  (){
        
    $wochenTage  = array( 1 2 3 4 5 '16.11' '24.12' );
        
    $return  false ;
        
        if(
    in_array ( date ( 'w' ),  $wochenTage ) ||  in_array ( date ( 'd.m' ),  $wochenTage )){
            
    $return  true ;
        }else if(
    date ( 'd.m.Y' ) ==  '06.11.2012'  &&  date ( 'G' ) >=  20 ){
            
    $return  true ;
        }else if(
    date ( 'd.m' ) ==  '31.10'  &&  date ( 'G' ) >=  23 ){
            
    $return  true ;
        }else if(
    date ( 'd' ) ==  '30'  &&  date ( 'G' ) <=  8 ){
            
    $return  true ;
        }else if(
    date ( 'd' ) ==  '01'  &&  date ( 's' ) <=  30 ){
            
    $return  true ;
        }
        
        return 
    $return ;
    }
    if(
    EnableCaptcha ()){
        echo 
    'zeige Captcha' ;
    }else {
        echo 
    'zeige kein Captcha' ;
    }
    mehr zum datum findest du hier

    wie das in deinem guestbook einzubinden und ggf. die routine überbrückt wird,
    kann ich dir so nicht sagen.
    man könnte es mit nem hidden input mal probieren in dem der code steht.
    in etwas so:
    PHP:
    if( EnableCaptcha ()){
        echo 
    $captcha ;
    }else {
        echo 
    '<input type="hidden" name="captcha" value="' . $code . '" />' ;
    }
    viel erfolg und wie gesagt nicht persönlich gemeint
     
  4. 6. November 2012
    Zuletzt bearbeitet: 6. November 2012
    AW: Captcha nur an bestimmten Tagen / Zeiten

    tut mir leid war nicht böse gemeint, so eine kurze frage noch und daaanke viel viel mals werd es anpassen für die fast fertige lösung von dir.

    Das Captcha nicht IMMER anzeigen sondern eben nur zufalls mässig
    also wenn von fr 22 uhr bis sa 6 uhr das captcha läuft nicht immer ausgeben sondern nur zufällig.

    Und was bedeutet
    }else if(date('d.m.Y') == '06.11.2012' && date('G') >= 20){
    $return = true;
    bzw. das 20 oder 30 hier bzw. oben steht 16.11 warum hier nicht unten bei der else if ? :O

    Hab das datum auf 07.11 geändert obwohl heute der 6 ist und er sagt mir zeige Captcha ,.. liegts an mir ??? O_O
     
  5. 6. November 2012
    AW: Captcha nur an bestimmten Tagen / Zeiten

    Erstmal checken, ob das Captcha überhaupt angezeigt werden soll (also die Uhrzeit/das Datum stimmt) und dann [g]PHP Zufall[/g] (du kannst zB mit mt_rand() eine 0 oder 1 erzeugen lassen)

    Was genau irritiert dich? date('G')? -> date() (wie auch schon von onip gepostet)
     
  6. 7. November 2012
    AW: Captcha nur an bestimmten Tagen / Zeiten

    und hier nochmal ne erweiterung mit erklärung.
    guck dir unbedingt date() im php manual an,
    das erklärt so einiges!

    PHP:
    <? php

    // http://php.net/manual/de/function.date.php
    // date('w')
    // Numerischer Tag einer Woche 
    // 0 (für Sonntag) bis 6 (für Samstag)
    // die(date('d.m.Y H:m:s'));
    function  EnableCaptcha  (){
        
    $wochenTage  = array( 1 2 3 4 5 '16.11' '24.12' );
        
    $return  false ;
        
        
    // prüfen ob ...
        // ... wochentag date(w) (0-6)
        // ... datum date('d.m') (tag.monat)
        // -> wochentage in_array $wochenTage, oder datum jedes jahr in_array $wochenTage
        
    if( in_array ( date ( 'w' ),  $wochenTage ) ||  in_array ( date ( 'd.m' ),  $wochenTage )){
            
    $return  true ;
        }
        
    // ... datum date('d.m.Y') (tag.monat.jahr)
        // ... und uhrzeit date('G') (24 std. ohne null)
        // -> einmalig am 06.11.2012 ab 20 h
        
    else if( date ( 'd.m.Y' ) ==  '06.11.2012'  &&  date ( 'G' ) >=  20 ){
            
    $return  true ;
        }
        
    // ... datum date('d.m') (tag.monat)
        // ... und uhrzeit date('G') (24 std. ohne null)
        // -> jedes jahr am 31.10 ab 23 h
        
    else if( date ( 'd.m' ) ==  '31.10'  &&  date ( 'G' ) >=  23 ){
            
    $return  true ;
        }
        
    // ... tag des monats date('d') (tag)
        // ... und uhrzeit date('G') (24 std. ohne null)
        // -> jeden 30. im monat bis 9 h
        
    else if( date ( 'd' ) ==  '30'  &&  date ( 'G' ) <=  8 ){
            
    $return  true ;
        }
        
    // ... tag des monats date('d') (tag)
        // ... und sekunden date('s') (sekunde mit null)
        // -> jeden 1. im monat alle 30 sek.
        
    else if( date ( 'd' ) ==  '01'  &&  date ( 's' ) <=  30 ){
            
    $return  true ;
        }
        
    // ... uhrzeit date('G') (24 std. ohne null)
        // -> jeden tag zwischen 22 und 6 h
        
    else if( date ( 'G' ) >=  22  &&  date ( 'G' ) <=  6 ){
            
    $return  true ;
        }
        
    // -> zufall
        
    else{
            
    $return  rand ( 0 1 );
        }
        
        return 
    $return ;
    }
    if(
    EnableCaptcha ()){
        echo 
    'zeige Captcha' ;
    }else {
        echo 
    'zeige kein Captcha' ;
    }
     
    1 Person gefällt das.
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.