Datei-Upload; wo landen die Dateien ?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Benny1452 schrieb:

    hi,

    Quellcode

    1. $dateiname= $_FILES['inputfeldname']['name'] // und $_FILES soll ein Array sein ?

    Quellcode

    1. <a href="downloaddatei.php?dname=<? echo $dateiname;?>">Downloadlink</a> // Wenn das hier: "?dname=" der Datename ist.warum ist denn danach nochmal die Variable von dem Dateinamen ?



    Das kommt in deine Datei wo du den Upload der datei vollziehst. Wie diese datei bei dir heißt weiß ich nicht.
    Und ja $_FILES ist ein array.

    Quellcode

    1. The $_FILES array is where PHP stores all the information about files.

    Lass ihn dir einfach Printen: print_r($_FILES)
    und $_FILES['inputfeldname']['name'] kannst du nicht einfach so übernehmen. wo inputfeldname steht sollte auch der name von deinem inputfeld rein.


    Aber wenn ich auf den Downloadlink klicke müsste ich ja zu ungefähr so einer seite kommen: domain.org/upload/Dateiname.jpg


    Jein. Du klickst auf deine downloaddatei, die dir den header so abändert, dass der Link im hintergrund auch so aussieht. Für dich ist aber nur domain.org/download.php?dname=dateiname.jpg sichtbar.

    // Wenn das hier: "?dname=" der Datename ist.warum ist denn danach nochmal die Variable von dem Dateinamen ?


    Der Dateiname ist $dateiname. "dname" ist nur die Definition für php damit man via GET wieder auf den Wert der hinter dname steht zurückgreifen kann
  • hi,

    erstmal vielen Dank für eure Geduld und eure Tipps..
    nachdem ich jetzt wirklich mehrere Tage probiert gelesen und getestet habe habe ich vorhin gemerkt, das ich unter anderem die POST und GET Befehle miteinander vertauscht habe.... und in deinem Beispiel musste ich die ersten beiden Headerzeilen auskommentieren, da er sonst die php Datei ansich speichern und öffnen möchte....

    Quellcode

    1. $name=$_GET['dname'];
    2. $file = '/pfad/".$name."'';
    3. header( 'Content-type: application/octet-stream' );
    4. header( 'Content-Length: ' . filesize( $file ) );
    5. $dateiname = basename( $file );
    6. header( 'Content-Disposition: attachment; filename="' . $dateiname . '"' );
    7. readfile( $file );


    Den "echten" Downloadmink habe ich einfach auf der Index.php anzeigen lassen, zuvor musste ich sie natürlich mit "aktion" wieder neu laden.

    Puhh...nun habe ich das alles zwar auf einer Seite und noch keinen Löschlink aber es funktioniert wenigstens endlich....
    Ich werd mich aber trotzdem bestimmt wieder melden :P
  • hi,

    also der Lösch und Downloadlink klappt nun endlich :)
    Nun habe ich ein paar kleine Fragen zum Thema SQL.
    Ich würde gerne eine Übersicht darüber haben wer wann was hochgeladen hat.

    Es geht also um den: Dateinamen, die IP von dem der die Datei hochgeladen hat und das Datum.

    Die Infos habe ich schon....ich bekomme ja jedesmal eine Mail mit den Daten wenn eine Datei hochgeladen wurde.
    Hier der Codeausschnitt:

    Quellcode

    1. if ($upmail==1 && $numsendfiles != 0)
    2. {
    3. $ip = $_SERVER["REMOTE_ADDR"];
    4. $subject = "Upload auf Homepage";
    5. $body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
    6. $body .= "IP: $ip\n";
    7. $body .= "$numsendfiles Datei(en) wurden hochgeladen\n";
    8. $body .= "Domain: http://$_SERVER[HTTP_HOST]$_SERVER[SCRIPT_NAME]\n\n";
    9. @mail($email, $subject, $body, "From: $email");


    Wie sage ich der Datenbank, dass genau diese Infos bei jedem Upload automatisch in die Datenbank geschrieben werden sollen ?
    Dann brauch auf genau dieses Skript die Verbindung zur Datenbank ?

    Das Datum soll mir auch später helfen ein Löschskript zu bauen das alle Daten die seit z.B 20 Tagen nicht mehr runtergeladen wurden, gelöscht werden, aber das ist denn das nächste Thema :D
  • Also erstmal benötigst du eine Datenbank mit den Entsprechenden Spalten. Hast du die?

    Also
    id|dateiname|datum|ip
    Für das Beispiel heißt sie jetzt mal "upload".

    Bei der id nimmst du den Typ INT undauto_increment. Das heißt, bei einem neuen Eintrag wird die Spalte automatisch um 1 erhöht.
    Für Dateiname und IP reicht wohl varchar
    Und für das Datum kannst du den Typ timestamp nehmen


    Dann musst du logischerweise in deiner PHP Datei verbindung zu deiner Datenbank aufnehmen
    EDIT:// Sorry hatte mysqli genommen. hab es verbessert

    Quellcode

    1. <?php
    2. $connection=mysql_connect('localhost', 'user', 'passwort') or die("Verbindungsversuch fehlgeschlagen"); // die angaben musst du auf deine datenbank anpassen
    3. mysql_select_db('db', $connection) or die("Konntedie Datenbank nicht waehlen.");
    4. ?>


    Das hätten wir. Jetzt willst du dein neuen Datensatz hinzufügen:

    Quellcode

    1. /*
    2. hier stehen dann deine Definierten Variablen wie $dateiname, $ip
    3. */
    4. $sql=mysql_query("INSERT INTO upload (dateiname, datum, ip) VALUES ("$dateiname", NOW(), "$ip");


    So zuerst definieren wir die Datenbankspalten in die, die Werte eingetragen werden sollen. Nach dem Value definieren wir welche Werte eingetragen werden sollen.
    NOW() ist eine Funktion von MYSQL und gibt den momentanen TIMESTAMP aus. Der in der Datenbank dann automatisch in ein weiter verwertbares datum umgewandelt wird.



    Solltest du dich noch weiter für SQL interessieren. Findest du hier wie ich finde recht gute Hilfe ab Punkt 27.
    tut.php-quake.net/de





    Dein nächster Schritt hingegen wird wieder einfacher das ist grob gesagt nur ein wenig rechnerei, und dann wird in einer Schleife der befehl unlink für Dateiname X (der bestimmt wird) ausgeführt.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Snowflake ()

  • Daten in die Datenbank schrieben

    hi,

    danke für deine echt gute Antwort.

    Die Datenbank war nicht das Problem....geht ja mit dem phpmyadmin kinderleicht.

    Die Verbindung aus der PHP-Datei zur Datenbank habe ich nach ein bisschen testen und probieren hinbekommen.
    Allso ich denke mal, dass das geklappt hat, weil ich ja einen weißen Bildschirm bekomme und eben KEINE von den beiden Fehlermeldungen:
    -Keine Verbindung moeglich
    -Die Datenbank existiert nicht

    Mein Problem ist jetzt das überhaupt keine Daten in die Datenbank geschrieben werden.
    Hier mal meine dbconnect.php :

    Quellcode

    1. <?
    2. error_reporting(E_ALL);
    3. mysql_connect("localhost","clangsql1","passwort")or die
    4. ("Keine Verbindung moeglich");
    5. mysql_select_db("benutzername")or die
    6. ("Die Datenbank existiert nicht");
    7. ?>


    Und hier die Download.php mit der ich später die Variablen in die Datenbank schrieben lassen möchte, im moment aber zum testen nur Beispielwerte in die Datenbank schrieben lassen will :

    Quellcode

    1. <?
    2. error_reporting(E_ALL);
    3. session_start();
    4. require('config.php');
    5. require('logo.php');
    6. include('dbconnect.php');
    7. $strFileName=$_GET['dname'];
    8. $sql=mysql_query("INSERT INTO Upload (Datum, Dateiname, IP)
    9. VALUES (1990-10-10, name, 12112212)
    10. ");
    11. ?>
    12. Wenn du die Datei <? echo $_GET['dname'];?> herunterladen möchtest, klicke bitte auf Download!<br><br>
    13. <a href="downloadlink.php?dname=<? echo $strFileName;?>">Download</a>
    Alles anzeigen


    Eine Fehlermeldung bekomme ich erst nachdem ich die download.php das dazugeschrieben habe :

    Quellcode

    1. ...
    2. $conn = mysql_connect("localhost", "clangsql1", "passwort");
    3. if (!$conn) {
    4. echo "Keine Verbindung zur DB: " . mysql_error();
    5. exit;
    6. }
    7. if (!mysql_select_db("Upload")) {
    8. echo "Kann die DB Upload nicht auswählen: " . mysql_error();
    9. exit;
    10. }
    11. ...
    Alles anzeigen


    Jetzt bekomme ich nämlich dies hier: Kann die DB Upload nicht auswählen: Access denied for user 'clangsql1'@'localhost' to database 'Upload'
    Aber der User hat die Datenbank erstellt ! wie und wo kann ich den denn jetzt die nötigen Rechte geben, hat der nicht automatisch Schreibrecht?
    Google spuckt auch nichts tolles aus :(
  • das kann aber nicht funktionieren

    Quellcode

    1. $sql=mysql_query("INSERT INTO Upload (Datum, Dateiname, IP)
    2. VALUES (1990-10-10, name, 12112212)
    3. ");


    sieh dir die Fehlermeldung mal an:

    Quellcode

    1. $sql=mysql_query("INSERT INTO Upload (Datum, Dateiname, IP)
    2. VALUES (1990-10-10, name, 12112212)
    3. ")or die(mysql_error());


    es fehlen anführungszeichen
  • Variablen übergeben ohne die Get-Funktion

    hi,

    vielen Dank erstmal für eure Gedult und die guten Antworten !
    Ich mache das ganze auf einem richtigen Webserver, allerdings ist das der von einem Kumpel...

    Es hat wirklich nur an den ->''<- gelegen hat...ich kann endlich in die DB schreiben :)

    nachdem ich wieder den halben Tag überlegt habe wie ich die Variable für die IP Addresse an die andere PHP Datei übergeben kann, ist mir eben eingefallen das ich doch einfach diese Servervariable aufrufen brauche: "$_SERVER["REMOTE_ADDR"]
    Das klappt jetzt zwar so aber:

    Das Thema Variablen übergeben verstehe ich noch nicht so ganz....Mit der GET Funktion kann ich das zwar aber dann muss ich den Index von dem Array ja immer in den Link mit einbauen...und so ein langer Link sieht ja nicht so toll aus...
    Also gibt es noch einmal die Variante mit POST und einem Formular, und zwar muss das ja in mein Fall ein verstecktes Feld sein weil ich ja Variablen übergeben möchte, sehe ich das so richtig ?
    und
    Das mit den Session...ich habe das bis jetzt so verstanden das GET und SESSION ohne dem jeweils anderen aber auch nicht funktionieren oder wie ?
    Bei den Beispielen auf php.net und co verstehe ich nie so richtig wie in meinem Fall das POST Formular aussehen müsste....

    Angenommen ich möchte die Variable: $ip ins nächste PHP Skript, ohne das man was zusätzliches im Link stehen hat, übergeben.
    Was müsste auf der 1. und was auf der 2. Seite stehen damit das funktioniert ?

    Wäre cool wenn mir das mal einer an diesem Beispiel erklären könnte....

    EDIT:
    Nochmal ein Nachtrag:

    wenn ich das so mache wie in diesem Beispiel:
    SEITE A;

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. $benutzername = $_POST["benutzername"];
    4. $passwort = $_POST["passwort"];
    5. $_SESSION['benutzer'] = $benutzername;
    6. $_SESSION['pass'] = $passwort;
    7. ?>


    SEITE B:

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. $benutzername = $_SESSION['benutzer'];
    4. $passwort_db = $_SESSION['pass'];
    5. ?>



    bekomme ich diese Notiz und meine Variable wird nicht ausgegeben :

    Notice: Undefined index: addr in /**/**/**/**/index.php on line 121

    Zumal die Zeile 121 nix mit dem zu tun hat......

    MFG, Benny

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Benny1452 ()

  • Also das Funktioniert bei mir einwandfrei. Ist soweit auch kein Fehler drin.
    Der Fehler muss also woanders liegen. Zeig doch mal Zeile 120-122.

    Aber die IP übergibst du wenn auch einfach via Session.

    Quellcode

    1. <?php
    2. session_start();
    3. $ip=$_SERVER["REMOTE_ADDR"];
    4. $benutzername = $_POST["benutzername"];
    5. $passwort = $_POST["passwort"];
    6. $_SESSION['benutzer'] = $benutzername;
    7. $_SESSION['pass'] = $passwort;
    8. $_SESSION['ip']= $ip;
    9. ?>


    Quellcode

    1. <?php
    2. session_start();
    3. $benutzername = $_SESSION['benutzer'];
    4. $passwort_db = $_SESSION['pass'];
    5. $ip = $_SESSION['ip'];
    6. print_r($_SESSION); // gibt die ganzen werte der Session in einem Array aus. Nur zum testen.
    7. ?>