Download Counter mit PHP und Mysql

Ich hab folgendes Problem:
Wollte einen Downloadcounter machen, und bin dann auf dieses script gestoßen. Leider funktioniert es nicht so wie es soll…
In der Datenbank hab ich die Tabelle d_counter angelegt, darin eine spalte mit DATEI, HITS, URL
die seiten sehen so aus:

index.php:

$mTabelle=„d_counter“; $conn = mysql_connect(„host“, „username“, „passwort“);
mysql_select_db(„datenbank“, $conn);

if($link == „download“ ) {
$ausgabe=mysql_query(„update $mTabelle set hits=hits+1 where datei=’$id’“);
$ausgabe=mysql_fetch_array(mysql_query(„select url as url from $mTabelle where datei=’$id’“));
mysql_close($conn);
header("Location: ".$ausgabe[url]);
} else {
$ausgabe=mysql_fetch_array(mysql_query(„select hits as hits from $mTabelle where datei=’$id’“));
echo $ausgabe[hits];
}
?>

download.htm:

Download-Counterjeep2

wieso geht das nicht? beim aufrufen des links erscheint eine leere seite, aber sonst passiert nichts…
wäre für eure Hilfe Dankbar
Michael

hi michael,

$ausgabe=mysql_query(„update $mTabelle set hits=hits+1
where datei=’$id’“);

das geht so nicht. der ausdruck hits=hits+1 ist nicht erlaubt. das erste ‚hits‘ ist dein feld, das zweite ‚hits‘ soll den wert des feldes beschreiben.
du muesstest eine unterabfrage machen, die den wert bestimmt. das ist aber bei mysql auch nicht erlaubt.

am einfachsten machst du vorher ein select auf das feld und laesst dir den wert incrementiert ausgeben. und den setzt du dann statt diesem ausdruck ein.

mfg, stefan

hi michael,

$ausgabe=mysql_query(„update $mTabelle set hits=hits+1
where datei=’$id’“);

das geht so nicht. der ausdruck hits=hits+1 ist nicht erlaubt.
das erste ‚hits‘ ist dein feld, das zweite ‚hits‘ soll den
wert des feldes beschreiben.
du muesstest eine unterabfrage machen, die den wert bestimmt.
das ist aber bei mysql auch nicht erlaubt.

Natuerlich geht dieser Ausdruck, das ist nicht sein Problem :wink:

In der Datenbank hab ich die Tabelle d_counter angelegt,
darin eine spalte mit DATEI, HITS, URL
die seiten sehen so aus:

Wenn deine Datei in diesem Falle wirklich nur test heisst, ist das kein Problem. Du solltest die URL aber auch richtig machen, in dem Falle also ala http://www.deinedomain.de/test und, ich persoenlich wuerde in die Datenbank auch noch ein Feld id als Primary Key einfuegen.

if($link == „download“ ) {
$ausgabe=mysql_query(„update $mTabelle set hits=hits+1
where datei=’$id’“);
$ausgabe=mysql_fetch_array(mysql_query(„select url as
url from $mTabelle where datei=’$id’“));
mysql_close($conn);
header("Location: ".$ausgabe[url]);

Ausserdem ist hier noch ein kleiner Fehler:

Es muss heissen:

header("Location: „.$ausgabe[url].“);

ignorier mein oberes posting…
ooops…
da hast du recht. das ist doch zulaessig.

neuer versuch:
im html-teil im aufruf der funktion index.php verwendet michael ein fragezeichen zur trennung von zwei parametern. da sollte doch wohl eher ein ‚&‘ stehen.
ob das aber sein problem behebt hab ich jetzt nicht ausprobiert.

gruss, stefan
(der in zukunft besser nachschaut, bevor er einfach sowas schreibt)

Natuerlich geht dieser Ausdruck, das ist nicht sein Problem :wink:

jeep2

Wie stefan weiter unten bereits geschrieben hat, sollte dieser Link wohl besser index.php?link=download&id=test heissen.

Ausserdem ist hier noch ein kleiner Fehler:
Es muss heissen:
header("Location: „.$ausgabe[url].“);

da muss ich dir aber widersprechen. da ist eindeutig der letzte punkt und anfuehrungszeichen zuviel.

gruss, stefan

Ausserdem ist hier noch ein kleiner Fehler:
Es muss heissen:
header("Location: „.$ausgabe[url].“);

da muss ich dir aber widersprechen. da ist eindeutig der
letzte punkt und anfuehrungszeichen zuviel.

Naja, ganz falsch ist es nicht, allerdings sollte man dann es

header(„Location: „.$ausgabe[url].““);

schreiben, dann funktioniert es, aber so wie ich es geschrieben habe, war es falsch.

Danke erstmal für die vielen Lösungen, ich muss mir das jetzt mal gaaanz in ruhe durchlesen, werd’s so bald wie möglich ausprobieren.
DANKE!
Michael

jeep2

Wie stefan weiter unten bereits geschrieben hat, sollte dieser
Link wohl besser index.php?link=download&id=test heissen.

hmm…also irgendwie kapier ich das jetzt nicht, trotz aller eurer vielen fehlern klappt es schon, wenn ich nur das ? durch das & ersetze. Danke nochmal an alle!

Michael

also, wie gesagt, der Download funktioniert jetzt mit dem script, und das feld „hits“ wird auch korrekt hochgezählt.
Leider hab ich jetzt noch n Problem :wink:
Wie kann ich denn am besten die klicks einbinden?
mit ssi hab ich’s probiert, geht auch soweit einwandfrei, nur ist es so, dass auf meiner page alle seite per php include() in eine Tabelle geladen werden, und deswegen erkennt der Server die ssi-befehle nicht mehr. Kann man das auch mit php machen? mit include macht er’s irgendwie nicht. Als link muss man bloß angeben: index.php?id=ID
Weiss noch jemand was?
Danke nochmal
Michael