Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-11-2011, 10:37   #1 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
Link zerlegen und in Datenbank abspeichern

Hallo zusammen,

ich habe mal eine Frage.

Ich habe in Flash eine Anwendung. Wenn dort auf Links geklickt wird wir eine Zip Datei zum Download zur Verfügung gestellt.

Nun will ich wissen wie oft auf den Link geklickt wurde.

FLASH:

on (release) {
getURL("files/sofa/neu_sofa1.pdf","_blank");
}
on (release) {
getURL("files/stuhl/alt_test2.pdf","_blank");
}

es gibt sehr viele links. die befinden sich alle in dem order files aber dann je nachdem was angezeigt wird in verschiedene unterodner.

ich will jetzt nun den link so zerteilen dass dass nur "neu_sofa1.pdf", "alt_test2.pdf" übrig bleibt und dieses dann auch in der Datenbank abspeichern.

Ich weiss leider nur nicht wie. Ich hoffe ihr könnt helfen.
stella21 ist offline   Mit Zitat antworten
Alt 28-11-2011, 07:27   #2 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
keiner eine idee? hmmm. dann muss ich weiter suchen. aber irgendwie find ich nix
stella21 ist offline   Mit Zitat antworten
Alt 28-11-2011, 09:22   #3 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
zerlegen:
PHP-Code:
var url:String "files/stuhl/alt_test2.pdf";

var 
fileName:String url.split("/").pop();
//oder
var fileName:String url.substr(url.lastIndexOf("/")+1); 
abspeichern:
PHP-Code:
var my_lv:LoadVars = new LoadVars();
my_lv.load("tellPhpThatFileWasLoaded.php?file="+fileName); 
oder du machst das komplett über PHP:
PHP-Code:
//in Flash hast du dann einen Aufruf ala:
on (release) {
    
getURL("file.php?id=irgendwasEindeutiges","_blank");

und php gibt dann entweder direkt die Datei zurück:
PHP-Code:
<?php
$file 
$files$_GET['id'] ];    //dateipfad anhand der ID raussuchen

//in die DB schreiben

//header('Content-type: application/pdf');   //es ist eine pdf
header('Content-type: application/octet-stream');   //er ist irgendwas das abgespeichert werden muss || der Browser entscheidet

echo file_get_contents($file);
?>
was bei großen Dateien und vielen Benutzern aber nicht so schön ist.

oder du machst in php eine weiterleitung auf die eigentliche Datei:
PHP-Code:
<?php
$url 
$urls$_GET['id'] ];    //url anhand der ID raussuchen

//in die DB schreiben

header("Location: $file");   //weiterleiten zur eigentlichen Datei
exit;
?>
dadurch wird zwar deine Ordnerstruktur nach aussen hin sichtbar, und jemand könnte auch direkt auf die Dateien zugreifen (was jetzt ja genauso ist), aber der Standardnutzer wird immer über das php-script kommen.
das ist imo die sauberste Lösung, und nicht das ganze in Flash zu bauen, und dann zusehen, wie ich dem Server mitteile was ich da eigentlich mache.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 28-11-2011, 14:13   #4 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
Zitat:
Zitat von thomas_E Beitrag anzeigen
zerlegen:
PHP-Code:
var url:String "files/stuhl/alt_test2.pdf";

var 
fileName:String url.split("/").pop();
//oder
var fileName:String url.substr(url.lastIndexOf("/")+1); 
abspeichern:
PHP-Code:
var my_lv:LoadVars = new LoadVars();
my_lv.load("tellPhpThatFileWasLoaded.php?file="+fileName); 
oder du machst das komplett über PHP:
PHP-Code:
//in Flash hast du dann einen Aufruf ala:
on (release) {
    
getURL("file.php?id=irgendwasEindeutiges","_blank");

und php gibt dann entweder direkt die Datei zurück:
PHP-Code:
<?php
$file 
$files$_GET['id'] ];    //dateipfad anhand der ID raussuchen

//in die DB schreiben

//header('Content-type: application/pdf');   //es ist eine pdf
header('Content-type: application/octet-stream');   //er ist irgendwas das abgespeichert werden muss || der Browser entscheidet

echo file_get_contents($file);
?>
was bei großen Dateien und vielen Benutzern aber nicht so schön ist.

oder du machst in php eine weiterleitung auf die eigentliche Datei:
PHP-Code:
<?php
$url 
$urls$_GET['id'] ];    //url anhand der ID raussuchen

//in die DB schreiben

header("Location: $file");   //weiterleiten zur eigentlichen Datei
exit;
?>
dadurch wird zwar deine Ordnerstruktur nach aussen hin sichtbar, und jemand könnte auch direkt auf die Dateien zugreifen (was jetzt ja genauso ist), aber der Standardnutzer wird immer über das php-script kommen.
das ist imo die sauberste Lösung, und nicht das ganze in Flash zu bauen, und dann zusehen, wie ich dem Server mitteile was ich da eigentlich mache.
habe jetzt die varianten ausprobiert. aber irgendwie funktioniert des net ... also vielleicht bzw bestimmt mache ich irgendwie ein fehler ...
ich will die url die in flash ist ja mittels php dann in die datenbank abspeichern.
ich würde aber gerne in php ausgeben lassen was der für ein inhalt aus der flash datei genommen hat. aber irgendwie wird nix ausgegeben ...
stella21 ist offline   Mit Zitat antworten
Alt 28-11-2011, 21:02   #5 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
es ist wirklich nicht nötig komplette Beiträge zu zitieren, erst recht nicht wenn du direkt darauf antwortest, und nicht 1-2 Seiten anderer Beiträge dazwischen sind.

PHP-Code:
aber irgendwie funktioniert des net 
eindeutige Fehlerbeschreibung, damit lässt sich doch arbeiten

Zitat:
ich würde aber gerne in php ausgeben lassen was der für ein inhalt aus der flash datei genommen hat. aber irgendwie wird nix ausgegeben ...
Wie willst du das ausgeben lassen? wie soll das denn angezeigt werden? wie hast du versucht das zu implementieren? und was genau ist nicht passiert?
Bei der ersten Variante (die mit LoadVars) hast du die Möglichkeit aus php Informationen an Flash zurückzuschicken (urlencoded)
bei den anderen beiden Scripten hat php keine Möglichkeit eine Antwort an flash zu schicken.

Hast du das Konzept hinter den beiden php-Scripten verstanden? Weil flash dort garnicht mehr weiss, wie die Datei heisst, die angezeigt wird, oder wo genau sie liegt. Muss es dabei auch nicht. Flash bekommt nichtmal mit, wenn du die Dateien bspw umbenennst, oder verschiebst; es kennt nur noch seine IDs.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 28-11-2011, 23:03   #6 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
Zitat:
Zitat von thomas_E Beitrag anzeigen
es ist wirklich nicht nötig komplette Beiträge zu zitieren, erst recht nicht wenn du direkt darauf antwortest, und nicht 1-2 Seiten anderer Beiträge dazwischen sind.
hast recht, war in dem moment etwas in Eile und hab daher irgendwie alles zitiert und keine eindeutige Fehlerbeschreibung gegeben.

Also was will ich denn genau ausgeben lassen?

In Flash ist es ja so, dass wenn auf etwas bestimmtes geklickt wird eine Zip Datei zur Verfüng gestellt wird, die man runter laden kann.

Ich will nun den Pfad zu dieser Zip Datei in PHP ausgeben lassen damit ich diesen gesplittet in die Datenbank abspeichern kann. Dient für eine Statisik, bei der gesehen wird wie oft welche Zip Datei heruntergeladen wurde. Das Zählen wie oft darauf geklickt wurde ist eine andere Sache die jetzt unwichtig ist. Wichtig ist, dass ich den Inhalt dieser getURL in PHP auslesen kann und diese wie gesagt gesplittet in die Datenbank abspeichern kann.

Momentan wird mir nichts ausgegeben. Hatte auch im Internet nach Übergabe von Flash Variablen an PHP geschaut, aber irgendwie wird mir nichts ausgegeben. also mir wird der Inhalt nicht ausgegeben. Vielleicht mache ich es auch falsch. Das kann auch sein. Bin da noch nicht so erfahren darin.

Die beiden php Skripte sind mir nicht vollständig klar. Die Frage die ich mir stelle ist, woher weiss das PHP Skript dass ich jetzt den Inhalt einer Flash Variable ausgegeben lassen werden möchte?

Bestimmt ein blöder Denkfehler. Aber wie gesagt leider weiss ich es nicht ...

Hoffe ich konnte mein Problem nun etwas näher erläutern
stella21 ist offline   Mit Zitat antworten
Alt 29-11-2011, 00:25   #7 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Momentan wird mir nichts ausgegeben. Hatte auch im Internet nach Übergabe von Flash Variablen an PHP geschaut, aber irgendwie wird mir nichts ausgegeben. also mir wird der Inhalt nicht ausgegeben. Vielleicht mache ich es auch falsch. Das kann auch sein. Bin da noch nicht so erfahren darin.
php läuft komplett im hintergrund, die Antwort irgendeines DB-scriptes landet höchstens bei Flash, also, was genau erwartest du ausgegeben zu bekommen, und wo? wie sieht der code dafür aus, etc pp.

Zitat:
Die beiden php Skripte sind mir nicht vollständig klar. Die Frage die ich mir stelle ist, woher weiss das PHP Skript dass ich jetzt den Inhalt einer Flash Variable ausgegeben lassen werden möchte?
garnicht, du rufst eine url wie folgt auf:
PHP-Code:
getURL("file.php?id=irgendwasEindeutiges","_blank"); 
nun kann php den übergebenen Parameter id auslesen:
PHP-Code:
echo $_GET['id']; 
woher der stammt; und woher das stammt was da drin steht, ob es ein Lesezeichen, dein Flash-Code ist, oder sonstwoher kommt, das alles weiss php nicht. muss es aber auch nicht.
nun musst du in php irgendeine Zuordnung von id und echter Datei machen. ob du das aus einer DB ausliest, ind php hardcodest, oder irgendwie aus der id "berechnen" kannst, egal.
nun kannst du in die DB schreiben.

zuletzt muss der Benutzer noch irgendwie zu seiner Datei kommen.
entweder du liest sie mit php ein, und gibst sie dann per echo aus, oder du leitest die Anfrage zur jeweiligen Datei um. das bleibt dir überlassen, hat beides vor- und Nachteile. (siehe meinen vorherigen Post)
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 29-11-2011, 05:48   #8 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
Zitat:
Zitat von thomas_E Beitrag anzeigen
php läuft komplett im hintergrund, die Antwort irgendeines DB-scriptes landet höchstens bei Flash, also, was genau erwartest du ausgegeben zu bekommen, und wo? wie sieht der code dafür aus, etc pp.
des ausgeben der einen Zeile dient jetzt nur einfach als Test. ich will nur sehen ob dass was er aus flash nimmt auch php richtig mitteilt und php dies richtig splittet damit ich dies dann in die datenbank speichern kann.

es geht ja um diese zeile: files/sofa/neu_sofa1.pdf"
und ich will einfach dass er mir nach der übergabe an php und dem splitten "neu_sofa1.pdf" ausgibt.

eine frage hätte ich auch noch.

Zitat:
PHP-Code:
getURL("file.php?id=irgendwasEindeutiges","_blank"); 
was ist eigentlich das "file.php"?? wie gesagt bei mir steht ja in der getURL ja nur der Pfad zu der einen Datei.

Geändert von stella21 (29-11-2011 um 08:42 Uhr)
stella21 ist offline   Mit Zitat antworten
Alt 29-11-2011, 10:43   #9 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
es geht ja um diese zeile: files/sofa/neu_sofa1.pdf"
und ich will einfach dass er mir nach der übergabe an php und dem splitten "neu_sofa1.pdf" ausgibt.
PHP-Code:
//as2
var url:String "files/sofa/neu_sofa1.pdf";
var 
lv:LoadVars = new LoadVars();
    
lv.onLoad = function(success) {
        if (
success) {
            
trace(this.response);
        }else {
            
trace("Error");
        }
    }
    
lv.load("index.php?file=" url.substr(url.lastIndexOf("/")+1)); 
PHP-Code:
//index.php
<?php
//prüfen ob irgendein "Dateiname" übergeben wurde
if(empty($_GET['file'])){
    
//wenn nicht
    
$response "Error";
}else{
    
//wenn doch
    
$response "File {$_GET['file']} was saved";
}
//Antwort an LoadVars zurückschicken
echo 'response='rawurlencode($response);

/*
//ein Log aufm Server für mich, um zu schauen, 
//was angekommen ist, und welche Antwort erstellt wurde
file_put_contents(
    "log.txt", 
    sprintf("%s\nquery: '%s'\nresponse: '%s'\n\n", date("r"), $_GET['file'], $response),
    FILE_APPEND
);
*/
?>
getestet und funktioniert

Zitat:
was ist eigentlich das "file.php"?? wie gesagt bei mir steht ja in der getURL ja nur der Pfad zu der einen Datei.
ein php-script um die Dateien anhand einer id zu verwalten, wo flash den genauen Pfad zur Datei garnicht mehr wissen muss. es lädt nur das php script, und dieses kümmert sich darum den Pfad zur Datei rauszusuchen, die Datei rauszugeben, und kann so ganz nebenbei auch direkt in die Datenbank schreiben welche Dateien abgerufen wurden.
Das ist dann alles nicht mehr die Aufgabe von Flash, sondern die file.php kümmert sich drum.
Hintergrund:
  • du musst die Flashseite nicht neu kompilieren und online stellen, nur weil sich ein Dateiname oder der Ordner/Server geändert hat, wo die Dateien gespeichert sind
  • bei der jetzigen Version musst du überall wo du auf eine Datei verlinkst, erst den Aufruf der Datei, dann den Aufruf an php schicken, um den Download nachzuhalten.
    und wenn du das irgendwo vergisst ist die ganze Statistik nichts mehr wert
    wenn php das alles verwaltet ist der Aufruf der Datei, und der Aufruf zum nachhalten in der DB ein und der selbe => du kannst nichts vergessen
  • momentan sind das laden einer Datei, und das logging ja zwei verschiedene und voneinander unabhängige Vorgänge, die nur zufällig durch dein flash-script nacheinander ausgeführt werden (sollen).
    => ich kann von Hand die Datei laden, ohne das script für die DB aufzurufen, und andersherum, ich kann x-mal das script zum loggen aufrufen, ohne dass ich irgendeine Datei lade.
  • das ist dann wesentlich leichter zu warten, besonders wenn noch eine zweite Stelle entsteht, die auf eure Dateien verlinken (bspw eine Partnerseite, eine andere swf in euerer Seite, eine App, oder bspw auch ein JS-Fallbackbzw eine reine HTML-Version eurer Seite (ohne JS, ohne Flash, ...))
    diese Links sind voll browserkompatibel, du kannst sie per email versenden, als Lesezeichen abspeichern, ...
    und es wird trotzdem jeder Download einer Datei nachgehalten! egal von wo er kommt, egal mit welcher Technologie, ...

nun hab ich (schon wieder) sehr viel dazu geschrieben. Vermutlich hast du den Eindruck, dass ich dir etwas aufschwatzen will; naja ich halte es für die beste (zumindest bessere) Möglichkeit das zu implementieren.
letztlich ist es dir überlassen wie du das baust. Am Anfang dieses Beitrags findest du ein funktionierendes Script, für dein ursprüngliches Konzept (Datei per getUrl abrufen, und dann ein zweiter Aufruf an php, damit das in der DB geloggt wird) nun musst du das ganze um den Code für die DB erweitern, und entsprechend in Flash einbinden
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 05-12-2011, 08:04   #10 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
hallo, sorry dass ich mich erst jetzt melde, war leider krank und lag im bett. aber jetzt gehts mir wieder besser ...

Zitat:
Zitat von thomas_E Beitrag anzeigen
PHP-Code:
//as2
var url:String "files/sofa/neu_sofa1.pdf";
var 
lv:LoadVars = new LoadVars();
    
lv.onLoad = function(success) {
        if (
success) {
            
trace(this.response);
        }else {
            
trace("Error");
        }
    }
    
lv.load("index.php?file=" url.substr(url.lastIndexOf("/")+1)); 
muss ich diesen stück code an jede stelle einfügen wo ich nen link habe. ich habe ca. 100 links wenn nicht noch mehr ...

Zitat:
PHP-Code:
//index.php
<?php
//prüfen ob irgendein "Dateiname" übergeben wurde
if(empty($_GET['file'])){
    
//wenn nicht
    
$response "Error";
}else{
    
//wenn doch
    
$response "File {$_GET['file']} was saved";
}
//Antwort an LoadVars zurückschicken
echo 'response='rawurlencode($response);
?>
was meinst du mit dem Dateinamen? Also inwiefern ob einer übergeben wurde?
stella21 ist offline   Mit Zitat antworten
Alt 05-12-2011, 10:09   #11 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
sorry dass ich mich erst jetzt melde, war leider krank und lag im bett
kein Thema

Zitat:
muss ich diesen stück code an jede stelle einfügen wo ich nen link habe. ich habe ca. 100 links wenn nicht noch mehr ...
tja, zumindest muss dieser Code für jeden Link ausgeführt werden.
ich würde dir raten, ihn in eine Funktion zu packen, und nur diese aufzurufen.

Zitat:
was meinst du mit dem Dateinamen? Also inwiefern ob einer übergeben wurde?
der Code oben geht hin, ruft über getUrl(...) eine Datei auf, und ruft dann index.php?file=Datei0815.pdf auf, so dass PHP auch erfährt dass die datei Datei0815.pdf abgerufen wurde.
was ist nun, wenn ich in meinem Browser von hand folgendes eingebe:
index.php?file=
oder nur index.php
dann wird garkein Dateiname dein php-Script übergeben, und was dann?
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 05-12-2011, 10:16   #12 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
Zitat:
Zitat von thomas_E Beitrag anzeigen
was ist nun, wenn ich in meinem Browser von hand folgendes eingebe:
oder nur index.php
dann wird garkein Dateiname dein php-Script übergeben, und was dann?
ja ich hatte vorhin die index.php aufgerufen und ja wie du schon sagst, es wird dann kein name übergeben ... es erscheint dann response=Error.
des ist net gut ...

vorhin habe ich bei den AS Code einfach zum testen ein trace ausgeben lassen wollen, nachdem auf den link geklickt wurde. aber irgendwie erscheint keine ausgabe. hmmmm

irgendwas hab ich des gefühl dass ich irgendwie was falsch mache ... ich vergess glaub auch etwas ...
stella21 ist offline   Mit Zitat antworten
Alt 05-12-2011, 11:34   #13 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
ja ich hatte vorhin die index.php aufgerufen und ja wie du schon sagst, es wird dann kein name übergeben ... es erscheint dann response=Error.
des ist net gut ...
ok, wie sollte sich das script sonst verhalten, wenn fehlerhafte Daten übergeben werden, oder jemand versucht daran rumzupfuschen?

Zitat:
irgendwas hab ich des gefühl dass ich irgendwie was falsch mache ... ich vergess glaub auch etwas ...
da kann ich dir leider kaum weiterhelfen, meine Kristallkugel ist grad beim TÜV
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 05-12-2011, 12:16   #14 (permalink)
Neuer User
 
Benutzerbild von stella21
 
Registriert seit: Oct 2009
Beiträge: 238
ja aber wie bekomme ich es hin, dass wenn ich auf den link klicke ne ausgabe erscheint wo der namen drin steht. also nur zum testen ob des auch funktioniert, bevor ich des dann in die datenbank abspeicher.
stella21 ist offline   Mit Zitat antworten
Alt 05-12-2011, 12:30   #15 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
wenn auf den Link geklickt wurde, muss das Script oben ausgeführt werden.
das hat ja schon einen Trace drin, der dir zurückgibt, was php geantwortet hat.
(und dort steht ja auch der Dateiname drin, der übergeben wurde)
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
FlashMenu und Link aus Datenbank Luni Flash Einsteiger 11 05-05-2006 11:28
datenbank einlesen und in Flash als Link weiterverarbeiten. sammy77 Flash und Datenbanken 3 18-02-2006 17:22
Text aus Datenbank per HTML-Link anzeigen releu0 Flash und Datenbanken 3 31-08-2004 10:52
film in einzelbilder zerlegen& abspeichern sina Am Rande 6 24-06-2003 11:11
Dynamische Zufallsbilder aus Datenbank mit Link für PopUp smeusel PHP und MySQL 4 28-05-2003 19:23


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele