"Wurde Link xy angeklickt" - Abfrage

  • Themenstarter Themenstarter ByeBye 177919
  • Beginndatum Beginndatum
B

ByeBye 177919

Hey,

ich möchte gerne mein Download Script um eine Statistik erweitern. Dazu möchte ich gerne erfassen ob, bzw wie oft ein Link geklickt wurde.

Ich hab schon einiges ergoogelt, und auch in Sufu erfahren. Z.b per Java oder Php mit hilfe eines "Zwischen Scripts". So das z.b der link dann so ist >
Code:
http://url/download.php?p=/pfad/zur/dateixy.gzip

Doch das möchte ich nicht :)

Ich hab auch was von "onmouseclick event" o.ä gelesen. Doch das ist ja leider java :(

Hier ist mein DL script >
Code:
<?php
include ("cfg/functions.php");
loginuser();
echo('<b><font size="+1"><tc>Download-Zone</tc></font></b><br>');
connect(); 
$menu = mysql_query("SELECT ID, name, path, file FROM downloads ORDER BY ID");
$rows = mysql_num_rows($menu);
if(mysql_num_rows($menu)>0)
{
	for($i=0; $i<mysql_num_rows($menu); $i++)
	{
		$result = mysql_fetch_object($menu); 
	echo("<table width='100%'><tr><td width='20%' valign='top'><tc><li>$result->name:</li></tc></td><td width='80%' align='left'><a href='$result->path/$result->file'>Download</a></td></tr></table>");
 }
}
?>
Kann mir da einer helfen ?
 
Ich würde die Tabelle downloads einfach um ein Feld namens countdown erweitern.
Und sobald du die Datei download.php mit dem Parameter p öffnest, machst du ein
UPDATE auf die Tabelle und erhöst den countdown um eins.
 
Code:
http://url/download.php?p=/pfad/zur/dateixy.gzip

Doch das möchte ich nicht

So wäre das ganze aber relativ einfach zu handeln. Musst ja nicht den gesamten Pfad zur Datei dazuhängen, sondern zum Beispiel einfach eine ID oder nur den Namen, und dann bei dem Downloadscript (welches die Datei dann zur Verfügung stellt) mit SWITCH - CASE die Datei auswählen. An der Stelle kannst dann das ganze entweder über Dateien oder per MySQL hochzählen lassen.
 
Ich würde die Tabelle downloads einfach um ein Feld namens countdown erweitern.
Und sobald du die Datei download.php mit dem Parameter p öffnest, machst du ein
UPDATE auf die Tabelle und erhöst den countdown um eins.

Ja, aber wenn ich es richtig verstehe wird alles um 1 erweitert. Und das sobald wenn die Links angezeigt wird.

Bratkartoffel hat gesagt.:
So wäre das ganze aber relativ einfach zu handeln. Musst ja nicht den gesamten Pfad zur Datei dazuhängen, sondern zum Beispiel einfach eine ID oder nur den Namen, und dann bei dem Downloadscript (welches die Datei dann zur Verfügung stellt) mit SWITCH - CASE die Datei auswählen. An der Stelle kannst dann das ganze entweder über Dateien oder per MySQL hochzählen lassen.

Hm. So hab ich es noch nicht gedacht :)

Doch statt ID's oder anderes, würde ich dann lieber den Namen haben :) Z.b so >
[1]
Code:
http://url/download.php?p=antivir

Datenkbank "downloads" sieht so aus >
Code:
ID     name    path    file

Zusammen gesetzt wird es so (am beispiel "mycms") >
Code:
http://192.168.2.4(1)/mycms(2)/downloads(3)/mycms.7z(4)
(1): n/a
(2): n/a
(3): path
(4): file



Wie könnte ich also "name" weitergeben?

Also das dann es wie bei [1] aussieht?.
 
Zuletzt bearbeitet von einem Moderator:
Hmm,

als wenn du das zum Beispiel so machst:

Code:
download.php?file=abc

oder

download.php?fileid=1

und in der mysql tabelle steht:
Code:
ID  Name  Pfad         Downloads
1   abc   dl/abc.exe   13

Die download.php würde dann so aussehen:
PHP:
<?php
  $file=$_GET['file'];
  $fileid=$_GET['fileid'];

  // Verbindung aufbauern
  
  $query="SELECT Pfad, ID FROM files WHERE ID='" . $fileid . "' OR Name='" . $file . "';";
  $result=mysql_query($query);

  $datei=mysql_fetch_object($result);
  
  $query="UPDATE files SET Downloads=Downloads+1 WHERE ID='" . $datei->ID. "';";
  $result=mysql_query($query);
  
  header("location: ./" . $datei->Pfad);
?>

Der Aufruf von "download.php?file=abc" (genauso wie der Aufruf von "download.php?fileid=1") würde also zur Datei "http://server/dl/abc.exe" weiterleiten.

So in der Art würde ich es lösen. (Ungetestet)
 
Zuletzt bearbeitet:
Hmm,

als wenn du das zum Beispiel so machst:

Code:
download.php?file=abc

oder

download.php?fileid=1

und in der mysql tabelle steht:
Code:
ID  Name  Pfad         Downloads
1   abc   dl/abc.exe   13

Die download.php würde dann so aussehen:
PHP:
<?php
  $file=$_GET['file'];
  $fileid=$_GET['fileid'];

  // Verbindung aufbauern
  
  $query="SELECT Pfad, ID FROM files WHERE ID='" . $fileid . "' OR Name='" . $file . "';";
  $result=mysql_query($query);

  $datei=mysql_fetch_object($result);
  
  $query="UPDATE files SET Downloads=Downloads+1 WHERE ID='" . $datei->ID. "';";
  $result=mysql_query($query);
  
  header("location: ./" . $datei->Pfad);
?>

Der Aufruf von "download.php?file=abc" (genauso wie der Aufruf von "download.php?fileid=1") würde also zur Datei "http://server/dl/abc.exe" weiterleiten.

So in der Art würde ich es lösen. (Ungetestet)

Das würde dann 2 Dateien benötigen :)

1, das script und das 2te wo die Links stehen. Ich mache es wie bei meinem Status script >
PHP:
<?php
include ("cfg/functions.php");
loginuser();
echo('<b><font size="+1"><tc>Online Status</tc></font></b><br>');
connect(); 
$menu = mysql_query("SELECT ID, url, name, port FROM status ORDER BY ID");
$rows = mysql_num_rows($menu);
if(mysql_num_rows($menu)>0)
{
	for($i=0; $i<mysql_num_rows($menu); $i++)
	{
		$result = mysql_fetch_object($menu); 
          $fp = @fsockopen("$result->url", $result->port, $errno, $errstr, 20);
					if (!$fp) {

	echo("<table width='100%'><tr><td width='20%' valign='top'><tc><li>$result->name:</li></tc></td><td width='80%' align='left'><img src='$dead'></td></tr></table>");

                }

             else {

	echo("<table width='100%'><tr><td width='20%' valign='top'><tc><li>$result->name:</li></tc></td><td width='80%' align='left'><img src='$live'></td></tr></table>");

		  }
			   }
	}
?>

Nur wenn ich richtig verstehe, ist es dann das selbe wie am anfang auch oder? Also das bei allen ein + gemacht wird sobald die angezeigt werden. Weswegen ich dann 2 Files brauche?

Edit: Leider funktioniert die Methode für mich nicht (das mit dem extra file). Da müsste ich mein ganzes CMS system umschreiben :) (wegen includes, link aufbau usw).

Daher denke ich mach es per Buttons bzw Formular :)
 
Zuletzt bearbeitet von einem Moderator:
So, ich habe es geschafft.

Danke an alle die mir geholfen haben und die Inspiration gegeben haben :)

Wer sehen will wie es geworden ist, kann hier gucken >

http://tomekk228.dyndns.org

login: public
pw: public

Und hier der Source >
PHP:
<?php
include ("cfg/functions.php");
loginuser();
echo('<b><font size="+1"><tc>Download-Zone</tc></font></b><br>');
connect(); 
$menu = mysql_query("SELECT ID, name, path, file, counter FROM downloads ORDER BY ID");
$rows = mysql_num_rows($menu);
if(mysql_num_rows($menu)>0)
{
	for($i=0; $i<mysql_num_rows($menu); $i++)
	{
		$result = mysql_fetch_object($menu); 
echo("<form id=$result->ID name=$result->ID' method='post' action='index.php?p=download'>");
echo("<table>");     
echo("<tr>");     
echo("<td><div align='left'><tc>$result->name | $result->counter x Gedownloadet</tc></div></td>");
echo("</tr>");     
echo("<tr>");     
echo("<td><input name=$result->ID type='submit' class='liteoption' id=$result->ID value='Download' size='15' maxlength='15' /></td>");
echo('<td></td>'); 
echo("</tr>");   
echo("</table>");
echo("</form>");
if(isset($_POST[$result->ID])) {     
$icounter = mysql_query("UPDATE downloads SET counter=counter+1 WHERE ID='" .$result->ID. "';");
echo("<meta http-equiv='refresh' content='1; url=$result->path/$result->file'>");
}
			   }
	}
?>

Gruß, Tomekk.
 
Zurück