onClick Wert in Datenbank übergeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
dank
datei
datenbank
datum
denken
download
header
info
lang code
quelle
schwierigkeit
senden
speichern
sprache
url
webseite
weiterleitung
zeigen
ziel
-
Hallo!
Einige kennen sicher den Thread in dem ich nach einem Script für Downloads über Promotion-Codes frage. So ein Script hab ich jetzt geschrieben. Jetzt will ich es aber noch ein Bisschen erweitern, und peer Klick auf einen der Download-Links eine Variable bzw. einen Wert in eine Datenbank speichern. Gibt es da eine Möglichkeit?
Eine Schwierigkeit daran ist, dass die Seite auf der die Links sind selbst mit der HEREDOC-Methode in einer Variablen gespeichert ist. Während diese Variable ausgegeben wird, werden Daten (Browser-Sprache und benutzter Code) gesammelt und in die Datenbank eingetragen.
Die Links an sich sind selbst in der Datenbank gespeichert und werden je nach Download-Code ausgegeben. Und wie gesagt soll wenn der Besucher auf einen Download-Link klickt, noch der Name des Downloads in die Datenbank gespeichert werden. Funkioniert das? Und wenn ja wie?
Vielen Dank im Voraus!
Beitrag zuletzt geändert: 30.5.2012 13:20:05 von yorecords -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du kannst mit JavaScript bei onClick einen AJAX-Request mit den Daten an ein Script senden das die Daten in die Datenbank einträgt.
Oder zeigen die Links auf Scripts von dir? Dann könntest du sogar direkt im Link die Daten mitgeben und das Script das damit aufgerufen wird trägt das in die Datenbank ein... -
hackyourlife schrieb:
genau ;) und ich habe mich zig mal schon darüber aufgeregt, dass ich ohne js keine downloads bekommen habe (bzw. mann kann die meisten nach einsicht in die html-quelle 'zu-fuß' machen. warum dann eine aufwändige website??¿¿)
Du kannst mit JavaScript bei onClick einen AJAX-Request mit den Daten an ein Script senden das die Daten in die Datenbank einträgt.
Oder zeigen die Links auf Scripts von dir? Dann könntest du sogar direkt im Link die Daten mitgeben und das Script das damit aufgerufen wird trägt das in die Datenbank ein...
zu heredoc: heredoc stellt keine schwierigkeit dar. zeige uns hier ein bisschen kode o. programmlogik und dann kann man es sagen wie es (nur mit webstandards [js ist kein]) funktionieren könnte.
Beitrag zuletzt geändert: 30.5.2012 15:26:09 von hemiolos -
Nen kleiner Umweg über selbstgebastetle Gateway-Seiten
- mit Weiterleitung zum Download, oder
- readfile("downloads/irgendwas.zip");
wären auch möglich.
Möglichkeit mit readfile:
//hier z.B. Code für Referer-Check oder Downloadcounter header("Content-type: application/zip"); header("Content-disposition: attachment; filename=irgendwas.zip"); readfile("downloads/irgendwas.zip");
^^ Verhindert ja auch gleichzeitig Deep-Links.
Allerdings:
Falls die Zieldatei auf einem anderen Server liegt, wird der dreifache Traffic verursacht (einmal auf dem Server mit der Datei und zweimal auf dem mit dem PHP-Script).
Quelle:
https://www.phpbb.de/kb/downloads_php -
hemiolos schrieb:
Falls es dir entgangen ist: ein onClick eines Links ist völlig irrelevant für dessen Funktion, also funktioniert das auch ohne JavaScript, nur bekommt die Webseite dann die Info nicht für die Datenbank
hackyourlife schrieb:
genau ;) und ich habe mich zig mal schon darüber aufgeregt, dass ich ohne js keine downloads bekommen habe (bzw. mann kann die meisten nach einsicht in die html-quelle 'zu-fuß' machen. warum dann eine aufwändige website??¿¿)
Du kannst mit JavaScript bei onClick einen AJAX-Request mit den Daten an ein Script senden das die Daten in die Datenbank einträgt.
Oder zeigen die Links auf Scripts von dir? Dann könntest du sogar direkt im Link die Daten mitgeben und das Script das damit aufgerufen wird trägt das in die Datenbank ein... -
hackyourlife schrieb:
woran liegt das wohl ... ? man hat für gewöhnlich keine schwierigkeiten mit klick auf links informationon(en) mitzugeben (auch für datenbanken ;).
..., nur bekommt die Webseite dann die Info nicht für die Datenbank -
hemiolos schrieb:
Meine Aussage basiert auf der Annahme, dass der TE weder auf seine eigenen Scripts verlinkt noch ein "Proxy-Script" nutzen möchte...
hackyourlife schrieb:
woran liegt das wohl ... ? man hat für gewöhnlich keine schwierigkeiten mit klick auf links informationon(en) mitzugeben (auch für datenbanken ;).
..., nur bekommt die Webseite dann die Info nicht für die Datenbank
Wenn er hingegen seine eigenen Scripts verlinkt oder ein Proxy-Script verwendet kann er die Daten natürlich als GET-Parameter mitgeben. -
hackyourlife schrieb:
... Meine Aussage basiert auf der Annahme, dass der TE weder auf seine eigenen Scripts verlinkt noch ein "Proxy-Script" nutzen möchte...
Wenn er hingegen seine eigenen Scripts verlinkt oder ein Proxy-Script verwendet kann er die Daten natürlich als GET-Parameter mitgeben.
bravo. wie auch immer, wen unser te sich besinnt manchmal auf gewisse sachen zu verzichten, kann er nur gewinnen dabei (nach dem motto: einfacher ist besser). -
Danke für die Antworten!
Ok, dass man das nicht mit PHP alleine machen kann hätt ich mir eigentlich denken können..
Also folgendes ist der relevante Teil des Codes:
$findlinks = "SELECT * FROM $dbtable WHERE code = '$code'"; $getlinks = mysql_query($findlinks); $link = mysql_fetch_array($getlinks); if ($link['link1'] != NULL) { $baptlink = "<a href='". $link['link1'] ."' class='bapt1'><img src='/img/sdbapt1_2.gif' class='sl2p' alt=''></a>"; } if ($link['link2'] != NULL) { $tlink = "<a href='". $link['link2'] ."' class='t'><img src='/img/sdt_2.gif' class='sl2p' alt=''></a>"; } $timestamp = time(); $datetime = date("d.m.Y - H.i", $timestamp); $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; $acc_log = mysql_query("INSERT INTO $LOG(TIME, SPRACHE, CODE) VALUES ( '$datetime', '$lang', '$code') "); if ($acc_log == false) { $errmsg = mysql_error(); $to = "email@example.com"; $subject = "MySQL ERROR"; $message = "{$errmsg}"; mail($to, $subject, $message); } echo $acc = <<< heredoc <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta name="robots" content="noindex,noimageindex"> <title>Special Downloads</title> <link rel="stylesheet" type="text/css" href="/css/divs.css"> <link rel="stylesheet" type="text/css" href="/css/font.css"> <link rel="stylesheet" type="text/css" href="/css/sdli.css"> <script type="text/javascript" src="/js/ga.js"></script> </head> <body> <div id="layer"> <div id="top"></div> <div id="sdlayer"> <img src="/img/sdtext.gif"> <div id="sdlinks"> <p align="center"> $baptlink <br><br> $tlink </p> </div> </div> </div> </body> </html> heredoc; }
Und wenn der Besucher dann auf einen der 2 Links klickt sollte der Name des Links auch in der Datenbank gespeichert werden. -
yorecords schrieb:
... dass man das nicht mit PHP alleine machen kann hätt ich mir eigentlich denken können..
doch, klar geht das mit nur PHP, wie oben schon geschrieben,
über ein eigenes Gateway (header Location Weiterleitung oder mit readfile)
Beipiel header Weiterleitung
Der Link zum anklicken führt nicht direkt zur Ziel-Datei
sondern zu einer kleinen PHP-Datei,
die - bevor sie zur eigentlichen Ziel-Datei weiterleitet - den Klick loggt
also anstatt Link mithref="zeildatei.zip"
vorher auf eine PHP-Datei z.B:href="download.php?name=zeildatei.zip"
in dieser PHP-Datei kannst Du dann in MySQL speichern ...was, wer, von wo, wann ... etc.
$acc_log = mysql_query("INSERT INTO $log_table ( TIME, SPRACHE, CODE ) VALUES ( '$datetime', '$lang', '$code' ) ");
und nach dem (erfolgreichen) Speichern (und ggf. reload-Sperre, Prüfung der Berechtigung, etc...)
dann weiterleiten zur Ziel-Datei
header('Location: zieldatei.zip');
oder per readfile() ... siehe oben
-
lukepress schrieb:
danke für die bestätigung!
... doch, klar geht das mit nur PHP, wie oben schon geschrieben, ...
nach so viel inkompetentem mist wie oben angebracht, eine erfrischende alternative an postings.
dass man alten hasen das alles so in den mund legen muss, ist eine schande :o(
ein hoch - @lukepress!
Beitrag zuletzt geändert: 1.6.2012 19:04:07 von hemiolos -
lukepress schrieb:
yorecords schrieb:
... dass man das nicht mit PHP alleine machen kann hätt ich mir eigentlich denken können..
doch, klar geht das mit nur PHP, wie oben schon geschrieben,
über ein eigenes Gateway (header Location Weiterleitung oder mit readfile)
Beipiel header Weiterleitung
Der Link zum anklicken führt nicht direkt zur Ziel-Datei
sondern zu einer kleinen PHP-Datei,
die - bevor sie zur eigentlichen Ziel-Datei weiterleitet - den Klick loggt
also anstatt Link mithref="zeildatei.zip"
vorher auf eine PHP-Datei z.B:href="download.php?name=zeildatei.zip"
in dieser PHP-Datei kannst Du dann in MySQL speichern ...was, wer, von wo, wann ... etc.
$acc_log = mysql_query("INSERT INTO $log_table ( TIME, SPRACHE, CODE ) VALUES ( '$datetime', '$lang', '$code' ) ");
und nach dem (erfolgreichen) Speichern (und ggf. reload-Sperre, Prüfung der Berechtigung, etc...)
dann weiterleiten zur Ziel-Datei
header('Location: zieldatei.zip');
oder per readfile() ... siehe oben
Ok stimmt.. Daran hab ich noch nicht gedach. Ist aber auch ein Bisschen umständlich, da die Links ja aus der Datenbank kommen und schlussendlich als Bilder dargestellt werden. Aber funktionieren sollte es auf jeden Fall. Ich werd es demnächst versuchen.
Danke für die Hilfe! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage