ilch Forum » Allgemein » HTML, PHP, SQL,... » Script pro IP nur ein mal alle 24h?

Geschlossen
  1. #1
    User Pic
    xxlynusxx Mitglied
    Registriert seit
    28.01.2013
    Beiträge
    272
    Beitragswertungen
    4 Beitragspunkte
    Hallo alle zusammen.

    Ich habe Werbung per BinLayer eingefügt. Nun habe ich das Problem das bei "gefühlt" jedem Seitenaufruf irgendwie der Layer angezeigt wird. Ich habe nichts in der BinLayer Hilfe gefunden zu diesem Thema um das nur alle 24 Std oder so anzeigen zu lassen.

    Mein Gedanke: Ich habe den IP Logger eingefügt. Dieser speichert die IPs ja in der Datenbank. Kann man sich das zu Nutzen machen um die Werbung nut 1x alle 24 Std anzeigen zu lassen pro IP?

    Wäre super wenn ihr mir da helfen könntet.


    verwendete ilch Version: 1.1 P

    betroffene Homepage: externer Link
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Könnte man, wie hast du es denn eingebunden?

    Hier noch etwas Code, damit mein Beitrag nicht ganz so sinnlos ist.

    list($year, $month, $day) = explode('-', date('Y-n-j'));
    $ip = escape(getip(), 'string');
    
    //heute
    $sql = 'SELECT COUNT(*) FROM prefix_stats WHERE yar = %d AND mon = %d AND day = %d AND ip ="%s"';
    $sql = sprintf($sql, $year, $month, $day, $ip);
    
    //oder -> ín den letzten 24 Stunden
    list($year24, $month24, $day24, $hour24) = explode('-', date('Y-n-j-G', strtotime('-1 day')));
    $sql = 'SELECT COUNT(*) FROM prefix_stats WHERE
        ((yar = %d AND mon = %d AND day = %d) OR (yar = %d AND mon = %d AND day = %d AND stunde >= %d))
         AND ip ="%s"';
    $sql = sprintf($sql, $year, $month, $day, $year24, $month24, $day24, $hour24, $ip);
    //ende oder
    
    $ipUsed = db_count_query($sql) > 0;



    Zuletzt modifiziert von Mairu am 08.05.2014 - 06:33:24
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    xxlynusxx Mitglied
    Registriert seit
    28.01.2013
    Beiträge
    272
    Beitragswertungen
    4 Beitragspunkte
    <script type="text/javascript" src="http://view.binlayer.com/view-XXXX.js"></script>


    werd mich später damit befassen. muss nun arbeiten.^^
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    xxlynusxx Mitglied
    Registriert seit
    28.01.2013
    Beiträge
    272
    Beitragswertungen
    4 Beitragspunkte
    so nun hab ich zeit.

    kannst mir nochmal nen anstoß geben wie ich nun mit deinem code weiter verfahren muss?

    ich wollte das script in der index.php einfügen mit der 24h ip sperre da ich mehrere designs zur verfügung stellen möchte. ist glaub ich praktischer so oder?
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Es ist auch möglich, das ohne eine Änderung den Designs zu machen.

    Dazu erstelle am besten eine Datei in includes/class/ z.b. binlayer.php und füge in der loader.php ein, dass diese geladen wird (so wie die anderen (Klassen) Dateien, am besten ganz unten in der loader.php).

    In der index.php dann vor
    require_once ('include/contents/'.$menu->get_url());


    folgendes einfügen
    new BinLayer();


    <?php
    /**
     * Class BinLayer
     * @author Mairu
     */
    class BinLayer
    {
        const TODAY = 'today';
        const LAST_24_HOURS = 'last-24-hours';
    
        /**
         * Prüft, ob die IP im Zeitraum schon angemeldet war, wenn nicht wird der BinLayer angezeigt
         * @param string $period Zeitraum, siehe Klassenkonstanten
         */
        public function __construct($period = self::TODAY)
        {
            if (!isset($_SESSION['binlayer']) || $_SESSION['binlayer'] < time()) {
    
                switch ($period) {
                    default:
                        $period = self::TODAY;
                    case self::TODAY:
                        $dateTime = new DateTime();
                        $dateTime->setTime(0, 0, 0);
                        $days = 1;
                        break;
                    case self::LAST_24_HOURS:
                        $dateTime = DateTime::createFromFormat('-1 day', time());
                        $days = 2;
                        break;
                }
    
                $ip = getip();
    
                if (false === $this->checkIp($ip, $period)) {
                    $GLOBALS['ILCH_BODYEND_ADDITIONS'] .= <<<HTML
    <script type="text/javascript" src="http://view.binlayer.com/view-XXXX.js"></script>
    HTML;
                }
    
                $_SESSION['binlayer'] = $dateTime->modify('+' . $days . ' days')->getTimestamp();
            }
        }
    
        /**
         * Prüft, ob die IP im angegebenen Zeitraum verwendet wurde
         *
         * @param string $period Zeitraum, siehe Klassenkonstanten
         * @return bool
         */
        protected function checkIp($ip, $period)
        {
            list($year, $month, $day) = explode('-', date('Y-n-j'));
            $ip = escape($ip, 'string');
    
            switch ($period) {
                default:
                case self::TODAY:
                    $sql = 'SELECT COUNT(*) FROM prefix_stats WHERE yar = %d AND mon = %d AND day = %d AND ip ="%s"';
                    $sql = sprintf($sql, $year, $month, $day, $ip);
    
                    break;
                case self::LAST_24_HOURS:
                    list($year24, $month24, $day24, $hour24) = explode('-', date('Y-n-j-G', strtotime('-1 day')));
                    $sql = <<<SQL
    SELECT COUNT(*) FROM prefix_stats WHERE
    ((yar = %d AND mon = %d AND day = %d) OR (yar = %d AND mon = %d AND day = %d AND stunde >= %d))
    AND ip ="%s"
    SQL;
                    $sql = sprintf($sql, $year, $month, $day, $year24, $month24, $day24, $hour24, $ip);
                    break;
            }
    
            return db_count_query($sql) > 0;
        }
    }


    PS: Ich hoffe es geht, hatte keine Zeit es zu testen.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    xxlynusxx Mitglied
    Registriert seit
    28.01.2013
    Beiträge
    272
    Beitragswertungen
    4 Beitragspunkte
    bisher wird nix mehr angezeigt. also bei mir auf jeden fall nicht.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten