Re: PHP / MySQL Problem - Zählen von Aufrufen einer bestimmten Seite

Re: PHP / MySQL Problem - Zählen von Aufrufen einer bestimmten Seite

am 17.09.2004 12:15:23 von jpm-account-forwards-to-dev-null-use-reply-adress

Irgendwer oder -was schrieb:

Bitte zur Kenntnis nehmen.

> für eine kleine Statistik, die mir die Aufgriffe bestimmter Seiten in
> eine DB eintragen soll, hab ich folgendes Script:
>
> > $url= $QUERY_STRING;

Daß der Querystring keineswegs eine URL ist, sondern nur das was _evt._
hinter dem Scriptnamen und dem Fragezeichen steht. Ferner ist die
verwendung von $QUERY_STRING böse[tm]. Siehe dazu auch:

11.20. Warum funktionieren meine Formulare nicht?
http://php-faq.de/q/q-formular-register-globals.html

> $query = "UPDATE $table SET count = count + 1 WHERE url = '$url'";
> $result = @mysql_query($query);
> if (mysql_affected_rows() == 0)
> {
> $sql_insert = "INSERT INTO $table (url, count) VALUES ('$url', '1')";
> @mysql_query($sql_insert);
> }

Der gesammte Teil ließe sich viel eleganter mit REPLACE INTO lösen.
Siehe MySQL-Manual:

http://dev.mysql.com/doc/mysql/de/REPLACE.html

> In den jeweiligen Seiten, die ich zählen möchte, habe ich die Datei
> mittels include eingefügt.
>
> Beim ersten Aufruf klappt das auch, doch dann werden die Seiten nicht
> mehr aufgerufen.

*Das* kann ich mir nicht erklären. Mache aber mal ein
error_reporting(E_ALL) an den Anfang, um zu sehen, ob da irgendwelche
Fehler auftreten.
Eine MySQL-Fehlerbehandlung bzw. Ausgabe wäre sicher auch nicht
schlecht. Siehe:

http://de.php.net/mysql_error

> PHPMyAdmin zeigt mir beim Zugriff auf die MySQL - Prozesse an, dass die
> Abfrage die DB auf den Status LOCKED gesetzt hat.

Jetzt wird's geheimnisvoll.

> Als Server läuft IIS 4.0.

*AUTSCH* Warum das ...?

> Für einen kleinen Tipp wäre ich dankbar

Die Frage hätte mind. nach news:de.comp.lang.php.datenbanken gehört; ich
leite mal dahin um.


Gruß, JPM

--
SPAMSCHUTZ: Meine E-Mail Adresse ist verschlüsselt.
Wenn Du mir per Mail antworten möchtest, führe bitte
zweimal ROT-13 auf meiner E-Mail Adresse aus.

Re: PHP / MySQL Problem - Zählen von Aufrufen einer bestimmten Seite

am 17.09.2004 12:42:05 von jpm-account-forwards-to-dev-null-use-reply-adress

Jens Peter Möller schrieb:

> *Das* kann ich mir nicht erklären. Mache aber mal ein
> error_reporting(E_ALL) an den Anfang, um zu sehen, ob da irgendwelche
> Fehler auftreten.

Und selbstverständlich alle @ vor den Funktionen löschen.
Fehlermeldungen von Fehlern zu unterdrücken, die möglicherweise
auftreten und die Ausführung behindern, ist sicher keine gute Idee.


Gruß, JPM

--
SPAMSCHUTZ: Meine E-Mail Adresse ist verschlüsselt.
Wenn Du mir per Mail antworten möchtest, führe bitte
zweimal ROT-13 auf meiner E-Mail Adresse aus.

Re: PHP / MySQL Problem - Zählen von Aufrufen einer bestimmten Seite

am 17.09.2004 14:22:15 von Niels Braczek

Jens Peter Möller schrieb:
> Irgendwer oder -was schrieb:

>> $query = "UPDATE $table SET count = count + 1 WHERE url = '$url'";
>> $result = @mysql_query($query);

Hier fehlt jegliche Fehlerbehandlung; evtl. Meldungen werden zusätzlich
unterdrückt.

>> if (mysql_affected_rows() == 0)
>> {
>> $sql_insert = "INSERT INTO $table (url, count) VALUES ('$url', '1')";
>> @mysql_query($sql_insert);
>> }
>
> Der gesammte Teil ließe sich viel eleganter mit REPLACE INTO lösen.
> Siehe MySQL-Manual:
> http://dev.mysql.com/doc/mysql/de/REPLACE.html

REPLACE ist mit Vorsicht zu genießen; es wird *immer* ein INSERT
ausgeführt, der alte Datensatz ggf. vorher gelöscht. Auf jeden Fall gibt
es eine neue Autoinkrement-ID. Das kann uU Referenzen unbrauchbar
machen.

MfG
Niels

--
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es
eine Interpunktionsnorm. Wenn du deine Programme genauso schlampig
schreibst, solltest du es lieber bleiben lassen.

Re: PHP / MySQL Problem - Zählen von Aufrufen einer bestimmten Seite

am 17.09.2004 14:31:14 von jpm-account-forwards-to-dev-null-use-reply-adress

Niels Braczek schrieb:

> Jens Peter Möller schrieb:
>> Der gesammte Teil ließe sich viel eleganter mit REPLACE INTO lösen.
>> Siehe MySQL-Manual:
>> http://dev.mysql.com/doc/mysql/de/REPLACE.html
>
> REPLACE ist mit Vorsicht zu genießen; es wird *immer* ein INSERT
> ausgeführt, der alte Datensatz ggf. vorher gelöscht. Auf jeden Fall gibt
> es eine neue Autoinkrement-ID. Das kann uU Referenzen unbrauchbar
> machen.

OK, ich bin in diesem einfachen Fall davon ausgegangen, daß es keine ID
und keine Referenzen gibt. Wozu auch?
Einfach nur "url" mit einem Unique Index und "count" würde hier
ausreichen und REPLACE sollte dann klappen.


Gruß, JPM

--
SPAMSCHUTZ: Meine E-Mail Adresse ist verschlüsselt.
Wenn Du mir per Mail antworten möchtest, führe bitte
zweimal ROT-13 auf meiner E-Mail Adresse aus.

Re: PHP / MySQL Problem - Zählen von Aufrufen einer bestimmten Seite

am 17.09.2004 14:56:05 von Niels Braczek

Jens Peter Möller schrieb:
> Niels Braczek schrieb:

>> REPLACE ist mit Vorsicht zu genießen; es wird *immer* ein INSERT
>> ausgeführt, der alte Datensatz ggf. vorher gelöscht. Auf jeden Fall
>> gibt es eine neue Autoinkrement-ID. Das kann uU Referenzen
>> unbrauchbar machen.
>
> OK, ich bin in diesem einfachen Fall davon ausgegangen, daß es keine
> ID und keine Referenzen gibt. Wozu auch?
> Einfach nur "url" mit einem Unique Index und "count" würde hier
> ausreichen und REPLACE sollte dann klappen.

Nach den vorliegenden Informationen hast du absolut Recht; ich wollte
nur auf diese beliebte[tm] Falle hinweisen.

MfG
Niels

--
"Klar weiß ich, dass ich den Lack mit einem Tuch polieren kann, wie alle
Anderen das machen, ich möchte aber den Hammer benutzen. Wie geht das?"