Downloadzähler PHP & MySQL

Zero2000

Erfahrenes Mitglied
Hallo

Als erstes, Ja, ich habe die Suche benutzt :) und auch Treads gefunden die mir aber nicht wirklich weiterhelfen.

Ich habe mir, oder vielmehr bin ich gerade dabei, einen Downloadzähler gebastelt.
Großes Vorbild hier ist das Script "Downi".
Vorweg, das Script funktioniert in seiner Originalfassung.

Da mir aber das Script so zu umständlich und auch zu aufwändig zu administrieren ist, habe ich einige "Verbesserungen" vorgenommen.
Und wie soll es anderst sein funktioniert es nun nicht mehr richtig.
Entweder es zählt nicht und ich kann mir die Datei downloaden, oder es zählt aber er findet nichts.
Ich bin am verzweifeln, denn ich sitze seit letzter Woche Mittwoch dran.
Ich poste einfach mal meine Dateien wie sie im Moment aussehen.
Da ist im Moment noch ein Submitbutton mit drin wegen dem zählen, naja.

Datei 1
PHP:
<?php
session_start();
if(!session_is_registered('iuser') || $_SESSION['iuser'] == "") {
	header("location:../../ilogin.php");
	die;
}
echo '<table border="0" class="rand" width="750" cellpadding="2" cellspacing="0" bgcolor="'.$table_bg.'">';
echo '<tr>';
echo '<td><font color="'.$txt_color.'">Sie befinden sich hier: <b>Wichtige Downloads</b></font></td>';
echo '</tr>';
echo '</table><br>';
echo "<img src='dwnld/img/up_down.gif' width='48' height='48' border='0'> <font size='+1'><b>Wichtige Downloads...</b></font><br><br>";
// Aufbau der Verbindung zur Datenbank
include("db.inc.php");
include("dwnld/funktion.php");
// Abfrage der DB und Schleife
$result = mysql_query("SELECT * FROM i_tracker ORDER BY id ASC");
while($row=mysql_fetch_array($result,MYSQL_ASSOC)) {
	$idnr=$row["idnr"];
	$id=$row["id"];
	$hits=$row["hits"];
	$link=$row["link"];
	$info=$row["info"];
	$titel=$row["titel"];
echo '<form method="post" action="dwnld/dwnld2.php?id='.$id.'" target="_blank">';	
echo '<input name="submit" type="submit" value="'.$titel.'">';
echo '<table border="0" cellspacing="1" cellpadding="4" bgcolor="'.$table_bg_rand.'" width="650">';
echo '<tr bgcolor='.$tr_bg.'>';
echo '<td><a href="'.$link.'" target="_blank"><b>'.$titel.'</b></a></td>';
echo '<td align="right" width="150"><font color="'.$txt_color.'">Downloads: '.$hits.'</font></td>';
echo '</tr><tr bgcolor='.$hg_color1.'>';
echo '<td colspan="2">'.nl2br($info).'</td>';
echo '</tr></table><br>';
echo '</form>';
}
?>
Datei 2
PHP:
<?php
if(isset($submit))
{
// Aufbau der Verbindung zur Datenbank
require("../db.inc.php");
// Aufruf der Zählfunktion
include("funktion.php");
$id = $_GET["id"];
echo "ID: $id";
  $result = mysql_query("select hits,link from i_tracker where id = '$id'");
  $hits = mysql_result($result,0,"hits");
  $link = mysql_result($result,0,"link");
mysql_query("update i_tracker set hits=hits+1 where id='$id'");
if ($link=='') {
echo "Fehler beim Verbindungsaufbau zur Datenbank.";
exit;
}
header("Location: $link");
}else{
echo "Sie können auf diese Seite nicht zugreifen.";
}
?>
funktion.php
PHP:
<?php
function zahl($id)
{
$result = mysql_query("select hits from i_tracker where id = '$id'");
$hits = mysql_result($result,0,"hits");
echo $hits;
}
?>
Die Adminseite muss ich nicht unbedingt posten denke ich mal.

Ich hoffe das mir da irgendjemand weiterhelfen kann von euch profis. ;)

MfG Maik
 
Ich hab nur mal kurz überflogen,

aber du sendest die ID mit dem Formular an die Donaload Datei und übergibst die mit POST, abfangen tust sie aber mit GET wie ich gesehen habe.
PHP:
echo '<form method="post" action="dwnld/dwnld2.php?id='.$id.'" target="_blank">';

Ich habe mir das jetzt nicht genauer angeschaut aber so dürfte das eigentlich nicht en!

PHP:
$_POST['id'];

müsste das heissen in der Downloaddatei!

EDIT:
Sorry hab jetzt erst gesehen das du das in der Action als querystring angehängt hast.

Wie schaut denn der gespeicherte Link in der Datenbank aus?

Was sind die Unterschiede zwischen Zählen funktioniert aber downloaden nicht und umgekehrt, da wirst du doch was geändert haben in der Datei?
 
Zuletzt bearbeitet:
Ja, sorry wegen dem unsauberen Code, aber ich hatte inzwischen schon soviel probiert...
Das mit der Fehlerbehandlung werde ich mal in betracht ziehen.

Bei der zweiten Datei habe ich nur vergessen für diesen Thread das GET in ein POST zu schreiben das ist alles was das betrifft.

Der gespeicherte Link in der DB sieht so aus:
Code:
dwnld/files/blabla.pdf

Wenn ich die Sache per Formular übergebe, also mit dem Submitbutton, dann zählt er, findet aber komischerweise die Seite nicht.

Die andere Sache ist die, wenn ich es normal per "a href" übergebe zählt er nicht aber ich kanns downloaden, aber das liegt ja nur daran das ich den Link direkt übergebe und nicht auf der Seite2

MfG Maik
 
Mach mal ein Hidden Feld und Fang alle Variablen mit Post ab, und dann mach auf der Seite einfach mal ein echo $id mal sehen ob die ankommt, dann mach ein echo vom Link.

Schau doch mal ob der Link überhaupt simmt, die Datei liegt ja in nem Unterordner und der Pfad kommt aber über dem unterordner.

Ich denke da stimmt was mit den Pfaden oder mit den Vars nicht.

Ich hab leider kein Zeit den Code hier zu testen.
 
Das hatte ich schon versucht, aber ohne Erfolg.
Mit den Pfaden könntest Du eventuell recht haben, wobei ich da auch schon sicher fast alles durchprobiert hatte.
Ich probiere morgen erstmal eventuelle Fehler abzufangen und melde mich nochmal.

Danke erstmal bis hierhin und noch einen schönen Abend.

MfG Maik
 
Hallo

Hab rausgefunden das meine 1. Seite nicht die ID an die 2. Seite übergibt.
Das ist sehr komisch, denn ich übergebe die ID direkt mit dem Submitbutton als Wert.
Code:
<input name="submit" type="submit" value="'.$id.'">
Ich habs auch mit nem "versteckten Feld" versucht und auch hier keinen Erfolg erzielen können.

Irgendwie ist mir die ganze Sache zu komisch.
Ich hab das ganze auch mal an eine testseite geschickt die so aussieht.
PHP:
<?php
$id = $_POST["id"];
echo $id;
?>
...aber auch hier kam keine ID an.
Also liegt der Fehler ja eindeutig an Datei1
Diese sieht im Moment so aus:
PHP:
<?php
session_start();
if(!session_is_registered('iuser') || $_SESSION['iuser'] == "") {
	header("location:../../ilogin.php");
	die;
}
echo '<table border="0" class="rand" width="750" cellpadding="2" cellspacing="0" bgcolor="'.$table_bg.'">';
echo '<tr>';
echo '<td><font color="'.$txt_color.'">Sie befinden sich hier: <b>Wichtige Downloads</b></font></td>';
echo '</tr>';
echo '</table><br>';
echo "<img src='dwnld/img/up_down.gif' width='48' height='48' border='0'> <font size='+1'><b>Wichtige Downloads...</b></font><br><br>";
// Aufbau der Verbindung zur Datenbank
include("db.inc.php");
include("dwnld/funktion.php");
// Abfrage der DB und Schleife
$result = mysql_query("SELECT * FROM i_tracker ORDER BY id ASC");
while($row=mysql_fetch_array($result,MYSQL_ASSOC)) {
	$idnr=$row["idnr"];
	$id=$row["id"];
	$hits=$row["hits"];
	$link=$row["link"];
	$info=$row["info"];
	$titel=$row["titel"];
echo '<form method="post" action="dwnld/test.php" target="_blank">';	
echo '<input name="submit" type="submit" value="'.$titel.'">';
echo '<table border="0" cellspacing="1" cellpadding="4" bgcolor="'.$table_bg_rand.'" width="650">';
echo '<tr bgcolor='.$tr_bg.'>';
echo '<td><a href="'.$link.'" target="_blank"><b>'.$titel.'</b></a></td>';
echo '<td align="right" width="150"><font color="'.$txt_color.'">Downloads: '.$hits.'</font></td>';
echo '</tr><tr bgcolor='.$hg_color1.'>';
echo '<td colspan="2">'.nl2br($info).'</td>';
echo '</tr></table><br>';
echo '</form>';
echo '<input name="id" type="hidden" value="'.$id.'">';
}
?>
Vielleicht findet ja hier jemand einen Fehler

[EDIT]
Das mit der ID hab ich. Ich hab einfach das hiddenfield nicht im FORMTAG gehabt.
Aber nun da die ID übermittelt wird findet er die Seite nicht obwohl die Pfadangaben stimmen.
[/EDIT]

MfG Maik
 
Zuletzt bearbeitet:
Fehler gefunden -> Dein verstecktes Feld ist ausserhalb des form-Tags
PHP:
echo '</form>'; 
echo '<input name="id" type="hidden" value="'.$id.'">';

Probiers mal so :
PHP:
echo '<input name="id" type="hidden" value="'.$id.'">'; 
echo '</form>';

Und dann noch keinen Wert mit dem Submit übergeben. Ist unsauber!
 
Hallo

Habs gelöst.
Mit den Pfaden in der DB hat was nicht gestimmt.
Nun geht es.

Ich danke allen die mir bisher geholfen haben.

MfG Maik
 
Zurück