Hallo Leute, ich würde gerne in meinen Seiten anzeigen können wie oft eine Seite angeklickt oder gelesen wurde, irgendwas in der Richtung, ich habe aber keine Ahnung wie ich es machen soll, bitte gibt mir Hinweise.
meist gelesene oder geklickte Artikel
Einklappen
X
-
Original geschrieben von stf]Daywalker
in der artikel db ein neues feld anlegen, zB: counter
dann in der aufruf-php-seite
mysql_query("UPDATE artikel SET counter=counter+1 WHERE id='...");
das wars schon
Eine sehr einfache und leichte Lösung, gefällt mir :-), kann man da aber noch eine Reloadsperre rein machen, also für den Fall das der Besucher die Seite öfter lädt, wäre doch sicher Sinvoll sowas ne?
Kommentar
-
Kleiner Zusatz: Vielleicht ist dir das gegen Kiddie-Push-Missbrauch nützlich:
PHP-Code:function anti_push($ses,$id,$array=FALSE) {
IF ( !is_array($_SESSION[$ses]) ) {
$_SESSION[$ses] = array();
}
IF ( !in_array($id, $_SESSION[$ses]) ) {
array_push($_SESSION[$ses], $id);
return true;
} else {
return false;
}
}
Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
sondern mit den Augen das Manual zu lesen.
Kommentar
-
Also recht herzlichen Dank erst mal für deine Hilfe !!
Ich fasse mal zusammen wie ich das Script verstanden habe:
1. function prüft ob variable $_SESSION[$ses] kein Array ist, ist dies der Fall wird ein Array $_SESSION[$ses] gebildet.
2. function prüft ob in array $_SESSION[$ses] Variable $id ist, ist dies der Fall wird true andernfalls False zurückgegeben.
Also ich kann das Script mir zwar mit Hilfe des PHP Manuels erklären, aber ich verstehe nicht wie ich es in mein Script oben einbauen kann als Reloadsperre. Ich will dir also nicht deine kostbare zeit rauben, aber es wäre sehr nett von dir wenn du versuchen würdest mir es zu erklären.
Kommentar
-
Original geschrieben von TobiaZ
na,
if(anti_push(...))
die(du hast schon gevoted);
Kommentar
-
Original geschrieben von lamoe
Oh, mist ich versteh schon einen Anfänger wie mich der zu wenig Ahnung hat von PHP will man hier nicht haben, ich kanns ja immerhin verstehen, mich würds auch nerven wenn jeden tag die gleichen Fragen kommen, sorry.
Allerdings, wer lernen will: learning by doing
Einfach ein bisschen herumspielen.
Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
sondern mit den Augen das Manual zu lesen.
Kommentar
-
Ich hab jetzt was gebaut das glaub ich den Vorschlag ganz nahe kommt.
1. prüfe ich mit einer mysql query ob die aktuelle datei schon in der tabelle liegt, ist dies nicht der fall wird erst mal der Dateiname, session id und counter Wert 1 in die tabelle geschrieben.
2. wenn die aktuelle seite schon in der tabelle ist, prüfe ich ob die session id in der tabelle die gleiche ist wie die aktuelle im browser, wenn sie nicht gleich sind, wird der counter um eins erhöt und die aktuelle session gespeichert, wenn sie gleich sind passiert nichts.
Aber irgendwie kann das ja nicht klappen so, da die session id immer gleich ist für eine Sitzung, wird jede folgende Seite die man lädt nicht mehr gezählt auch wenn es eine andere Seite ist, weil die prüfung der session id immer gleich ergibt.
Wie kann man es besser machen?
Kommentar
-
Hier der Code, ich habe in jetzt allerdings etwas geändert, ich habe jetzt nämlich jeder session id noch den aktuellen Dateinamen angehängt und denke das ich so es jetzt doch noch hinbekomme das nun jede Seite gezählt wird, aber es ist im ganzen keine so gute Lösung denke ich mal
PHP-Code:$dit = mysql_query("SELECT `dateiname` FROM `counter` WHERE `dateiname`='".$_SERVER['PHP_SELF']."'"); echo mysql_error(); $dit_ = mysql_num_rows($dit); //echo $dit_;
if($dit_ > 0) {
$sit = mysql_query("SELECT `sid` FROM `counter` WHERE `dateiname`='".$_SERVER['PHP_SELF']."'"); $roww = mysql_fetch_array($sit);
$ss = $_SESSION["sid"].$_SERVER['PHP_SELF'];
if($roww['sid'] != $ss) {
mysql_query("UPDATE `counter` SET `count`=count+1, `sid`='".$_SESSION["sid"]."".$_SERVER['PHP_SELF']."' WHERE `dateiname`='".$_SERVER['PHP_SELF']."'"); echo mysql_error();
}
}
else {
$sql = "INSERT INTO `counter`
(count,
dateiname,
sid,
datum)
VALUES (
'1',
'".$_SERVER['PHP_SELF']."',
'".$_SESSION["sid"]."".$_SERVER['PHP_SELF']."',
NOW())";
mysql_query($sql);
}
Kommentar
-
Ungetestet und ohne Gewähr.
PHP-Code:<?php
function anti_push($ses,$id,$array=FALSE) {
IF ( !is_array($_SESSION[$ses]) ) {
$_SESSION[$ses] = array();
}
IF ( !in_array($id, $_SESSION[$ses]) ) {
array_push($_SESSION[$ses], $id);
return true;
} else {
return false;
}
}
// In diesem Zusammenhang wie du die sid speicherst, macht die funktion wenig(er) sinn.
// Solltest in der sid das PHP_SELF weglassen? Nur so als Vorschlag
IF ( anti_push('push',session_id())) {
$sql = "SELECT
`dateiname`
FROM
`counter`
WHERE
`dateiname`='".$_SERVER['PHP_SELF']."'
LIMIT 1";
$dit = mysql_query($sql) or die ( mysql_error() );
$dit_ = (mysql_num_rows($dit) > 0 ? TRUE : FALSE);
if($dit_) {
$sql2 = "
UPDATE
`counter`
SET
`count`=count+1
WHERE
`sid`='".$_SESSION["sid"]."".$_SERVER['PHP_SELF']."' AND
`dateiname`='".$_SERVER['PHP_SELF']."'
LIMIT 1
";
} else {
$sql2 = "
INSERT
INTO `counter`
SET
count = '1',
dateiname = '".$_SERVER['PHP_SELF']."',
sid = '".$_SESSION["sid"].$_SERVER['PHP_SELF']."',
datum = NOW()
";
}
mysql_query($sql) or die ( mysql_error());
}
?>
Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
sondern mit den Augen das Manual zu lesen.
Kommentar
Kommentar