[PHP / SQL] Suche hilfe für: Counter + Session (für jede Unterseite)

zyfex

Grünschnabel
Hallo zusammen,

ich habe schon ein wenig im Forum rumgesucht und jedoch ncihts gefunden, was 100% zu dem passt was ich bräuchte.

Ich habe in meiner SQLdb eine Tabelle "Images" und einer der Spalten heisst "Hits".
Nun möchte ich bei jedem Besuch der Seite bzw. bei jedem Anschauen der einzelnen Bilder die Hits nach oben zählen (+1).
Jedoch sollte dabei eine Reloadsperre aktiviert werden von ca. 3 Stunden, am besten mit einer Session..

Ich habe mir das ganze so gedacht:
Ich lege eine "counter.php" an und diese wird auf den einzelnen Unterseiten eingebunden.
Nun soll diese eine Session setzten. Danach wird, wenn die Session nicht vorhanden ist, der Counter um 1 nach oben gesetzt und am Ende soll "Hits" von der jeweiligen ID ausgegeben werden.


Erstmal, ist das so sinnvoll, oder sollte das anderst geregelt werden?
Und könnte mir dabei vllt. jemand helfen?
Ich habe ca.. 0 Ahnung von PHP und hab keine Idee, wie ich das sicher und vorallem Ressourcensparend (?) bewerkstelligen soll..



Vielen Dank schonmal! - zyfex
 
Schreib doch ne Funktion die beim klicken auf das Bild ausgeführt wird, Beispiel:
beimklick(bildID, sid);

In der Funktion wird dann beispielsweise ein update der db gemacht wenn dann die sid noch nicht eingetragen ist. zudem musst aber dann noch ne zeit angeben mit time(); die beim 1. mal aufrufen mit in die db zur sid eingefügt wird damit auch die zeit abfrage gemacht werden kann.

Würde dazu aber eine 2. DB schreiben die allein die sid´s verwaltet.
 
Hi

wenn du das ganze ohne Loginsystem machst (was ich gerade mal annehme) würde ich eine weitere Tabelle anlegen, in der du die IPs sowie den jeweiligen timestamp einspeicherst. Sessions können zu leicht umgangen werden. Du kannst vorher noch einen Cookie setzten, hast dann aber immer noch die DB falls jemand den Cookie weg umgeht.

Das Script sähe dann etwa so aus:
PHP:
/* alle überfälligen Datensätze löschen */
Define("MIN_WAITING_TIME", 3); //3 Stunden
if( !isset($_COOKIE["visited"]) ){
  $result = mysql_query("SELECT * FROM `visited` WHERE `ip` = '".$_SERVER["REMOTE_ADDR"]."' LIMIT 0,1");
  if( mysql_num_rows($result) == 0){ //kein Eintrag in der Datenbank
    $time = time()+3600 * MIN_WAITING_TIME;
    mysql_query("UPDATE `hits` SET `hits`= `hits`+1 WHERE `ID` = '".$_GET["id"]."'");
    mysql_query("INSERT INTO `visited` (`ip`, `timestamp`) VALUES ('".$_SERVER["REMOTE_ADDR"]."', ".$time.")");
    setcookie("visited","1", $time);
  }
  else{
    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    echo "Du musst leider noch bis ".date("H:i", $row["timestamp"])." warten.";
  }
}
else
  echo "Du kannst leider nur alle ".MIN_WAITING_TIME." Stunden die Hits eines Bilds erhöhen.";
 
Zurück