Hallo SelfHTMLer,
Ich habe vor einen kleinen Besucherzaehler zu basteln.
Dazu dachte ich mir, muesste ich einfach die IP-Adressen mit zugehoerigem Datum speichern, die meine Webseite besuchen.
Das habe ich auch schon getestet:
<?php
//Benoetigte Daten sammeln
$date = date("Y-m-d",time());
if (!isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
else {
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
echo $date;
echo $client_ip;
//Feststellen ob diese IP heute schon auf der Webseite war
$todayCountQuery = "
SELECT date, COUNT(client_ip)
FROM counter
WHERE (
(date = '$date') AND
(client_ip = '$client_ip')
)
GROUP BY date;";
$todayCountQueryResult = mysql_query($todayCountQuery);
//Falls heute noch nicht auf der Webseite gewesen wird ein Datensatz gespeichert
if(mysql_num_rows($todayCountQueryResult) == 0){
echo "Heute noch nicht auf der Webseite gewesen!";
//Datensatz mit IP und Datum speichern
$increaseCounterQuery = "INSERT INTO counter (client_ip, date) VALUES ('$client_ip', '$date');";
mysql_query($increaseCounterQuery);
}
Soweit funktioniert das auch alles. Ob es jetzt die beste Loesung ist weiß ich nicht, es ist das erste mal, dass ich etwas mit PHP und SQL in Verbindung mache.
Nun muss ich natuerlich noch alle verschiedenen IP-Adressen eines jeweiligen Datums zaehlen, und diese dann zusammenaddieren. Das wollte ich wie folgt bewerkstelligen:
<?php
$getCounterQuery = "
SELECT SUM(visitor_count_per_day) AS visitorCount
FROM
(SELECT date, COUNT(client_ip) AS visitor_count_per_day
FROM counter
GROUP BY date;)";
?>
Soweit ich weiß muessen nur nicht-aggregierte Attribute per GROUP BY gruppiert werden, sofern denn ueberhaupt eine Aggregation in der Anfrage vorliegt. Daran habe ich mich auch gehalten, allerdings meint mein phpMyAdmin SQL Query Verarbeiter, dass ich einen Syntaxfehler in meiner Anfrage habe:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
Eingabe:
SELECT SUM(visitor_count_per_day) AS visitorCount
FROM
(SELECT date, COUNT(client_ip) AS visitor_count_per_day
FROM counter
GROUP BY date;)
Wenn ich die Anfrage teste. Wenn ich die Anfrage einfach so im PHP-Code stehen lasse, dann erhalte ich den Fehler:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in (PFAD) on line 46
Hier eine Beispieltabelle mit einigen Testwerten, die ich benutze um zu testen:
79.55.0.143 2012-09-01
79.55.0.144 2012-09-02
79.55.0.145 2012-09-03
79.55.0.146 2012-09-04
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2018-09-20
127.0.0.1 2012-09-18
Was kann ich gegen den Fehler tun und was loest ihn aus?
Was mache ich in meiner SQL Anfrage fuer einen Fehler?