Reloadsperre

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

  • Reloadsperre

    Tag,

    Habe schon die Foren durchsucht, habe aber keine passende Antwort zur Frage "Reloadsperre" gefunden.

    Was ich benötige ist eine Reloadsperre die den User verhindert wie er Lust und Laune hat, seine Startseite aufzurufen. Diese Startseite wird in einer Mysql-Datenbank protokolliert. Das heißt beim Aufruf werden 5 Punkte in sein Feld eingefügt. Wenn er wieder die Startseite aufruft, dann werden aber 5 Punkte nur dann eingetragen, wenn er auch die Reloadsperre nicht unterschritten hat.

    Kann mit jemand helfen ?

    Hier mein jetziges Script, daß ich irgendwie zusammengeflickt habe, funktioniert aber nicht so richtig. Entweder er trägt die Punkte immmer ein, oder wenn ein neuer Tag ist, trägt er keine Punkte mehr ein.

    Was ist falsch oder wie kann ich den Code einfacher schreiben?

    <?php
    $day = date("Y-m-d"); // format the date like it is written in the database
    if ($QUERY_STRING)
    $dbhost = "localhost";
    $dbuser = "root";
    $dbpasswd = "";
    $db=mysql_connect("$dbhost","$dbuser","$dbpasswd");
    mysql_select_db("cash",$db);
    $username = urldecode($QUERY_STRING);
    $result = mysql_query("SELECT username FROM logfiles WHERE username='$username' AND day='$day'",$db);
    if(mysql_num_rows($result) > 0) {
    mysql_free_result($result);
    $result = mysql_query("SELECT UNIX_TIMESTAMP(time) FROM logfiles WHERE (username='$username' AND ip='$REMOTE_ADDR' AND day='$day')",$db);
    if($row = mysql_fetch_row($result)) {
    if(($row[0]+3600) < time()) {
    mysql_query("UPDATE logfiles SET paidstart=paidstart+5 WHERE username='$username'",$db);
    mysql_query("UPDATE logfiles SET time=NOW() WHERE username='$username'",$db);
    } else { // the click is raw
    mysql_query("UPDATE logfiles SET paidstart=paidstart+5 WHERE username='$username'",$db);
    }
    mysql_free_result($result);
    } else { // it's a new ip (BRAUCHE ICH EIGENTLICH NICHT)
    //mysql_query("UPDATE logfiles SET paidstart=paidstart+5 WHERE username='$username' AND day='$day'",$db);
    mysql_query("INSERT INTO logfiles (username,ip,day,time) VALUES ('$username','$REMOTE_ADDR','$day','$time')",$db);
    }
    } else { // it's a new url or day
    //mysql_query("UPDATE logfiles SET paidstart=paidstart+5 WHERE username='$username'",$db);
    mysql_query("INSERT INTO logfiles (username,day,time,ip,paidstart) VALUES ('$username','$day','$time','$REMOTE_ADDR',5)",$db);
    //mysql_query("INSERT INTO logfiles (username,day,paidstart) VALUES ('$username','$day',5)",$db);
    }

    exit;

    ?>

    Die Startseite heißt http://www....de/portal.php?XXXXX
    XXXXX heißt der jeweilige Username.

    Vielen Dank im Voraus.
    XAROC
    ************************
    Das Portal zum Geld verdienen
    ************************

  • #2
    Daß kein update mehr durchgeführt wird liegt vermutlich an der Bedingung AND day='$day' in der ersten Query.
    Außerdem fragst du bei keiner update-Query den Tag ab, zählst also den paystart für alle Tageslogins des users hoch.

    Tipp: hol dir in der ersten Query statt des usernames den primarykey der Tabelle. Falls du keinen hast, richte einen ein.
    Dazu erstellst du eine zweite Tabelle tmp_logfiles, die genau die gleiche Struktur hat wie deine alte, nur fügst du der Definition ein id BIGINT UNSIGNED not null AUTO_INCREMENT hinzu.
    Um die Daten aus der alten Tabelle zu übernehmen:
    insert into tmp_logfiles (alle Felder aus der alten Tabelle auflisten) select (nochmal alle Felder auflisten) from logfiles;
    DROP TABLE logfiles;
    ALTER tmp_logfiles RENAME logfiles;


    In Zukunft läuft dann nur noch das erste Select auf die eigentlichen Suchparameter, danach referenzierst du deine Datensätze ausschließlich über die ID.


    ständiges update

    Code:
    if(($row[0]+3600) < time())
      { 
      mysql_query("UPDATE logfiles SET paidstart=paidstart+5 WHERE username='$username'",$db);
      mysql_query("UPDATE logfiles SET time=NOW() WHERE username='$username'",$db);
      }
    else
      { // the click is raw 
      mysql_query("UPDATE logfiles SET paidstart=paidstart+5 WHERE username='$username'",$db); 
      }
    Du zählst hier in jedem Fall hoch, aktualisierst aber die Zeit nur, wenn eine Stunde um ist. Laß den else-Zweig weg, dann wird auch nicht mehr ständig hochgezählt.
    Außerdem kannst du die zwei Queries in eine packen:
    UPDATE logfiles SET paidstart=paidstart+5,time=NOW() WHERE username='$username'.


    Ein Tipp für bessere Übersicht: Benutze Einrückungen und den vB code [ code ]
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Hallo,

      Danke für Dein Tipp.
      Mein Primary-Key ist der Username.
      Eine ID wollte ich nicht einfügen, weil ich in meiner Datenbank mehrere Tabellen mit ID habe. Bei der Tabelle logfiles soll es ja nur die Punkte zählen, deshalb dachte ich keine ID anzulegen, weil die ID und User nicht in allen Tabellen gleich sein wird.
      Aber wenn es besser ist werde ich dann eine ID hinzufügen, soll es dann so funktionieren ?:

      <?php
      $day = date("Y-m-d"); // format the date like it is written in the database
      if ($QUERY_STRING)
      $dbhost = "localhost";
      $dbuser = "root";
      $dbpasswd = "";
      $db=mysql_connect("$dbhost","$dbuser","$dbpasswd");
      mysql_select_db("cash",$db);
      $ID = urldecode($QUERY_STRING);
      $result = mysql_query("SELECT ID FROM logfiles WHERE ID='$ID' AND day='$day'",$db);
      if(mysql_num_rows($result) > 0) {
      mysql_free_result($result);

      usw.

      Oder besser gefragt brauch ich eigentlich den ganzen Code.

      Was ich will ist ganz einfach, daß bei Aufruf der jeweiligen Startseite
      1. wenn der User schon angelegt ist, dann nur Datum und Zeit ändern und 5 Punkte hinzufügen
      2. wenn der User noch nicht in der Tabelle existiert, einfach Username, Datum, Zeit, und 5 Punkte insert.

      Das natürlich mit einer Reloadsperre.

      Wäre daaaankbar für einen guten Tipp.

      Danke


      ************************
      Das Portal zum Geld verdienen
      ************************

      Kommentar

      Lädt...
      X