dennis m: Upload / Datensatz einfügen

liebe selfhtml-leser/user
ich moechte meinen usern einen upload bereitstellen!
das wollte ich so haben:
Ein Dateifeld, indem nur der name angezeigt wird (hab gelesen, dass das nicht geht)! Ist die Datei ausgewaehlt, klickt man auf Senden (Formular abschicken) was zu folge hat, das die Datei hochgeladen wird, und der Dateiname in die Datenbank geschrieben wird! Das geht aber nicht, oder besser gesagt ich weiß noch nicht wie!

Koennte mit einer erklaeren wie ich es hinbekommen koennte, dass user eine datei hochladen und NUR dateiname.endung in die Datenbank geshrieben wird?
vg, dennis

  1. Moin

    Beschäftige dich bitte mit dem vordefinierten $_FILES-Array welches beim Dateiupload zur Verfügung steht.

    $_FILES['userfile']['name'] enthält dabei den Namen der Originaldatei.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. pass auf, ich hab dieses Upload-Script!

      <?php
      require('config.php');
      $mb = $b_max/1048576;
      $mb = round($mb, 2);
      @chmod(''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/.', $up_chmod);

      if($upw=="1"){
      if(isset($_POST['sendfiles'])){
      if($_POST['pwd'] != $pw){
       include("header.php");
       echo "<table width="100%" cellpadding="0" cellspacing="0">
       <tr><td align="center">
       <span class="grossschrift">
       <b>Dateien hochladen</b>
       </span>
       </td></tr>
       <tr><td width="100%" align="center">
       <span class="grossschrift">
       <br>
       Das Passwort fehlt oder ist falsch!<br>
       <br>
       <a href="javascript:history.back(-1)" class="kleinlink">&#171 zur&uuml;ck</a>
       <meta http-equiv="refresh" content="5; URL=http://www.arne-home.de/index.html">
       <br><br>
       </td></tr>
       </table>";
       include("footer.php");
       exit;}
       }
      }

      if($_GET['action'] == 'inhalt') {
       include("header.php");
       echo "<table width="100%" cellpadding="0" cellspacing="0">
       <tr><td align="center">
       <span class="grossschrift"><b>Inhalt des Uploadordners</b></span>
       </td></tr>
       <tr><td width="100%" align="center"><br>";
        $verz=opendir (''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/.');
        while ($File = readdir ($verz)) {
        if($File != '.' && $File != '..' && $File != '.htaccess') {
        echo "<table cellpadding="0" cellspacing="0" width="50%"><tr><td align="left"><span class="grossschrift">";
        if($dl_link==1){
         echo "<img width="11" height="11" src="./img/$li_bild" alt="" name="li"><a href="$pfad/$File" target="_blank" class="grosslink"> $File</a>";
         }
         else{
          echo "<span class="grossschrift"><img width="11" height="11" src="./img/$li_bild" alt="" name="li"> $File</span>";
          }
        echo "</td></tr></table>";}
           }
           if ($dl_gesamt==1) {
            function dir_size($dir, &$size, $recursive=TRUE){
         $handle = @opendir($dir);
         if(!$handle)
          return false;
          while ($file = @readdir ($handle)){
           if (eregi("^.{1,2}$",$file)){
           continue;}
           if(!$recursive && $dir != $dir.$file."/"){
            if(is_dir($dir.$file))
            continue;}
             if(is_dir($dir.$file)){
             dir_size($dir.$file."/", $size, $recursive);}
             else{
              $size += filesize($dir.$file);}
            }
            @closedir($handle);
          }
          function sizeMath($size){
           if($size >= 1024000){
            $size = $size / 1024000;
            $size = sprintf("%01.2f", $size) . ' MB';
           }
           else{
            $size = $size / 1024;
            $size = sprintf("%01.1f", $size) . ' KB';
           }
          return $size;
          }
        $size = 0;
        dir_size(''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/', $size, TRUE);
        $sizeD = sizeMath($size);
        echo "<br><span class="kleinschrift">Gesamtgr&ouml;sse der Dateien: ";
        echo $sizeD;
        echo "</span><br>";
        }
       echo "<br><a href="javascript:history.back(-1)" class="kleinlink">&#171 zur&uuml;ck</a><br><br></td></tr></table>";
       include("footer.php");
       exit;
      }

      ?>
      <style type="text/css">
      <!--
      .Stil1 {font-family: Arial, Helvetica, sans-serif}
      -->
      </style>

      <table width="100%" cellpadding="0" cellspacing="0">
      <tr><td align="center">
      <span class="grossschrift">
      <b>Dateien hochladen</b></span>
      </td></tr>
      <tr><td width="100%" align="center">
      <span class="grossschrift">
      <br>
      <span class="Stil1">Die Datei darf nicht gr&ouml;&szlig;er a<?php echo "$mb"; ?>ls  MB sein.<br>
      Klicken Sie bitte auf OK!</span></span><br>
      <br>
      <?php if($inhalt==1){ echo "<a href="index.php?action=inhalt" class="grosslink"><b>Inhalt des Uploadordners</b></a><br>";} ?>
      <br>
      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <input type="Submit" value="OK" name="up" class="button">
      <br><br>
      </form>
      <form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <?php
      if (isset($_POST['up'])){
       echo '<span class="grossschrift"><b>'.$numfiles.'</b> ';
       echo $_POST['numfiles'] == '1' ? 'Datei kann' : 'Dateien k&ouml;nnen';
       echo ' hochgeladen werden.</span><p>';
       for ($i=1; $i<=$_POST['numfiles']; $i++){
        echo "<input type="File" name="myfile$i" class="input"><br>\n";}
        if($upw==1){echo'<br><span class="grossschrift">Passwort</span> <input type="password" name="pwd" class="input">';}
        echo '<br><input type="Submit" name="sendfiles" value="hochladen" class="button"><br><br>';}
      if (isset($_POST['sendfiles'])){
       $numsendfiles = count($_FILES);
       foreach($_FILES as $strFieldName => $arrPostFiles){
          if ($arrPostFiles['size'] > $b_min && $arrPostFiles['size'] < $b_max){
         $strFileName = $arrPostFiles['name'];
         $strFileTemp = $arrPostFiles['tmp_name'];
         if ($dl_endung==0) {
          @copy ($strFileTemp, "$_SERVER[DOCUMENT_ROOT]/$pfad/$strFileName");
          echo "<span class="grossschrift"><font color=green><b>Datei $strFileName erfolgreich  hochgeladen.</b></font></span><br><br>";
          if ($upmail==1 && $numsendfiles != 0) {
           $ip = $_SERVER["REMOTE_ADDR"];
           $subject = "Upload auf Homepage";
           $body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
           $body .= "IP: $ip\n";
           $body .= "$numsendfiles Datei(en) wurden hochgeladen\n";
           $body .= "Domain: http://$_SERVER[HTTP_HOST]";
           @mail($email, $subject, $body, "From: $email");
           }
         }
         elseif($dl_endung==1) {
          $pfad_info = pathinfo($strFileName);
          $extension = strtolower($pfad_info["extension"]);
          if (in_array($extension,$filetypes)) {
              if ($dateien_w  == 0) {
                       $unixtime = time();
              $strFileNameComponents = explode(".",$arrPostFiles['name']);
                          $strFileName = "$strFileNameComponents[0]-$unixtime.".$strFileNameComponents[1];}
           @copy ($strFileTemp, "$_SERVER[DOCUMENT_ROOT]/$pfad/$strFileName");
           echo "<span class="grossschrift"><font color=green><b>Datei $strFileName erfolgreich  hochgeladen.</b></font></span><br><br>";
           if ($upmail==1 && $numsendfiles != 0) {
            $ip = $_SERVER["REMOTE_ADDR"];
            $subject = "Upload auf Homepage";
            $body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
            $body .= "IP: $ip\n";
            $body .= "$numsendfiles Datei(en) wurden hochgeladen\n";
            $body .= "Domain: http://$_SERVER[HTTP_HOST]";
            @mail($email, $subject, $body, "From: $email");
            }
         }
         else {
          echo "<span class="grossschrift"><font color=red><b>Unerlaubtes Dateiformat!</span><br><br>";}
         }
        }
           else {
            echo "<span class="grossschrift"><font color=red><b>Die Datei mu&szlig; gr&ouml;&szlig;er als $b_min Bytes und kleiner als $mb MB sein!</b></font></span><br><br>";}
       }
      }
      ?>
      </form>
      </td></tr>
      </table>

      Wie kann ich es hinbekommen, das der Name der Hochgeladenen Datei auch in eine Datenbankspalte eingetragen wird (Spalte=URL)!
      Ich weiß, das ich mich mehr mit PHP und MSQL beschäftigen müsste, aber bitte hilf mir!
      VG,Dennis

      PS.: Ein einfaches Codebeispiel vllcht :(

      1. Moin

        PS.: Ein einfaches Codebeispiel vllcht :(

        Denkst du ich geb dir jetzt ein komplettes Programm das du einfach nur noch einfügen brauchst?

        Ich sehe bei deinem Code keine Verbindung zu einer Datenbank. Dort fängt es schonmal an. Nicht mal der Ansatz einer Lösung.

        Das wichtigste zu Verbindung zur Datenbank erfährst du hier

        wenn du erfolgreich eine Verbindung zur Datenbank aufgebaut hast, speicherst du den Inhalt von $_FILES['userfile']['name'] in deiner MySQL-Tabelle.

        Sorry, aber (anscheinend nicht mal von dir stammende) Scripte zu erstellen oder zu ändern, ist von den meisten hier das täglich Brot, und wird normalerweise teuer bezahlt.

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
        1. Moin

          wie kann ich den Inhalt von $_FILES['userfile']['name'] in eine MySQL-Tabelle schreiben?

          zum Beispiel für einfaches Hineinschrieben (hinzufügen):

          $query = "INSERT INTO Tabellenname SET spaltename='".mysql_real_escape_string($_FILES['userfile']['name'])."'";
          mysql_query($query);

          Das ist aber MySQL-Urschleim!!!!!!!!! Befasse dich bitte mit der Materie!

          Gruß Bobby

          --
          -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
          -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
          1. Hello Bobby,

            $query = "INSERT INTO Tabellenname
                      SET spaltename='".mysql_real_escape_string(basename($_FILES['userfile']['name']),$con)."'";

            $insert = mysql_query($query,$con);

            vermutlich wird es besser sein, nur den Basename zu verwenden. Gut allerdings, dass Du an das Escaping gedacht hast. Man sollte aber den Connection-Identifier angeben.

            Außerdem ist es zweckmäßig, auch den Erfolg des Inserts zu kontrollieren.
            I.d.R. sollte man einen Contraint auf die Spalte mit dem Filenamen haben oder auf eine entsprechend sinnvoll ausgewählte Gruppe von Spalten (Verzeichnis + Name), damit Das File auch unter diesem Namen abspeicherbar ist und keine Doubletten entstehen.

            Da sind wir aber schon beim nächsten Problem!
            Nicht jeder Dateiname ist auf dem Server zulässig oder zumindest sinnvoll.
            Damit es keinen Schmutz gibt (böse User sind überall), sollte man also noch eine transformationsschicht einfügen. Man speichert das File unter einem ausgewüfelten Unique-Name, merkt sich den in der Tabelle, dann kann auch wieder _jeder__irre__Name für das File (Richtung Client) zugelassen werden.

            Liebe Grüße

            Tom

            --
            Coming Back soon

            1. Moin

              Danke für die weitergehenden Inhalte. Mir ist dies klar. Ich wollte dem Fragenden nur einen Ansatzpunkt liefern, da er sich damit überhaupt nicht auskennt.!

              Übrigens ein Beitrag des Fragenden ist gelöscht, deshalb erscheint mein Beitrag jetzt nicht richtig passend zu sein.

              Gruß Bobby

              --
              -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
              -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
              ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
              1. Hello,

                Übrigens ein Beitrag des Fragenden ist gelöscht, deshalb erscheint mein Beitrag jetzt nicht richtig passend zu sein.

                Bei mir verschwindet hier heute im Mittel auch jedes zweite Posting im Nirwana.
                Der Fehler, den Christian Seiler behoben hat, scheint also noch Brüder zu haben.

                Liebe Grüße

                Tom

                --
                Coming Back soon