Irgendwie Sitze ich momentan auf der Leitung!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Irgendwie Sitze ich momentan auf der Leitung!

    Je mehr ich hier nachlese, umso weniger verstehe ich wo mein Fehler liegt!
    Hallo Leute,
    Irgendwas mache ich in meinem Script falsch, eigentlich soll es nur eine
    Datei in die DB copieren, macht es aber nicht!

    Hier mein Quelltext:
    ************************************************
    PHP-Code:
    <html>
     <head>
      <title>Projektupload</title>
       <meta name="author" content="scriptingmike">
     </head>
    <body>
    <?php
    if($sent//überprüfen des gesendeten Formulars
    {
    //Wenn keine Datei für den Upload ausgewählt wurde
    if(!is_uploaded_file($neuedatei))
       
    //dann melde den Fehler
       
    {$fehler='<br>Es wurde keine Datei hochgeladen';}
         else
         
    //wenn ja - uberprüfe die Dateigrösse und den DateiTyp
         
    {
         
    //Ist die Datei grösser als 16MB - MySql-DBTyp=Mediumblob=2^24Byte
          
    if($neuedatei_size>16777210)
             
    //wenn ja - Ausgabe
             
    {$fehler='<br>Die Datei ist zu gross;';}
          
    //Wenn es kein zulässiger Dateityp ist
          
    if(!($neuedatei_type == 'application/vnd.m************cel' OR $neuedatei_type == 'application/msword'))
             
    //dann melde den Fehler
             
    {$fehler='<br>Der Dateityp ist nicht zulässig<br>';}

         }
    //Ende der Else - Anweisung =keine Datei hochgeladen
    //Wenn kein Fehler auftritt
    if (!$fehler)
        
    //dann mache folgendes
        
    {
         require(
    'connect1.php'); //Verbindung zur DB aufbauen
         
    $datei=fopen($neuedatei,'r');//Datei wird geöffnet und ausgelesen
         
    $data=@copy($neuedatei$datei$neuedatei_size));//Datei wird kopiert
         //Schreibe alles in die MySqlDB
         
    $sql="INSERT INTO $tabellenname(bezeichnung, beschreibung, dateityp, datum, datei)values('$bezeichnung', '$beschreibung', '$neuedatei_type', now(), '$data')";
         }
         
    //Kontrollausgabe des Sql-Statements
         
    echo $sql;
    // Hier werden DB-Fehler abgefangen
         
    if(!mysql_query($sql$link))
           {
    $fehler.='<br>Der Upload ist aufgrund eines Datenbankfehlers gescheitert, bitte versuchen Sie es später noch einmal<br>';}
        }

        if(
    $fehler) {echo "<h2><font color=red> <? echo $fehler ?> </font></h2>";}
        else
            {
             echo 
    "<h2><font color=blue> Der Upload war erfolgreich </font></h2>";
             unset(
    $bezeichnung);
             unset(
    $beschreibung);
            }

    }
    //Ende $sent==1
    ?>
    <h2>Bitte das Projekt - Formular ausfüllen</h2>

    <form action='<? echo $PHP_SELF; ?>' method='post' enctype='multipart/form-data'>
    <input type='hidden' name='sent' value='1'>
    <p>Die Bezeichnung des Projektes</p>
    <input type=text name='bezeichnung' size='50' value='<? echo §bezeichnung; ?>'><br>
    <p>Kurze Beschreibung des Projektes</p>
    <input type=text name='beschreibung' size='' value='<? echo §beschreibung; ?>'><br>
    <p>Die Datei auswählen</p>
    <input type='file' name='neuedatei' size=50><br><br>
    <input type='submit'><input type='Reset' value'Zurücksetzen'>
    </form>
    <a href="../main.php">Zurück zur Startseite</a>
    </body></html>
    ********************************************

    Schon mal Danke für Eure Hilfe
    Zuletzt geändert von ; 18.07.2003, 08:34.

  • #2
    recht witzig wie du das 'kopieren' angehst ... mit copy ^^
    Doku zu copy
    copy kopiert eine date von A nach B ... im dateisystem

    so weit ich seh ist alles ok, und der INSERT-query klappt sicher auch nur bekommst du nicht den datei-inhalt sondern TRUE oder FALSE

    kurz:
    du musst den datei-inhalt als string übergeben
    fread schafft da abhilfe

    Kommentar


    • #3
      Schreibt was falsches in die DB

      Ich habe jetzt die Zeile:
      PHP-Code:
      $data=@copy($neuedatei$datei$neuedatei_size)); 
      durch:
      PHP-Code:
      $data=fread$datei$neuedatei_size); 
      ersetzt!
      Nur schreibt das Script jetzt (bei mir eine Worddatei) anstatt der Tatsächlichen 53,5KB nur 6Bytes in die DB???


      Kommentar


      • #4
        Steht bei dir in der php.ini RegisterGlobals auf On?
        Du programmierst noch nach den "alten" Regeln
        Auf nem neueren Webserver wird das Ding nich laufen
        Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil!
        (Albert Einstein)

        Kommentar


        • #5
          <? echo §beschreibung; ?>
          vertippert! --> $

          Kommentar


          • #6
            und was steht in $neuedatei_size drin?
            PHP-Code:
            $datei=fopen($neuedatei,'rb');
            echo 
            'Größe: ':$neuedatei_size.'<br />';
            echo 
            'Größe: '.filesize($neuedatei).'<br />';
            $data=fread($datei,filesize($neuedatei));
            echo 
            'Länge des strings: '.strlen($data); 
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              mach mal ein
              PHP-Code:
              echo($neuedatei_size); 
              rein, da siehst du wie groß die datei (nicht) ist

              wo wird den $neuedatei_size definiert?

              alt-code:
              PHP-Code:
              $data ''// sonst E_NOTICE
              while(!feof($datei))
                  
              $data .= fread($datei4096); 
              anstatt von
              PHP-Code:
              $data=fread$datei$neuedatei_size); 

              Kommentar


              • #8
                Viel gelesen und geht immer noch net

                Habe in den letzten Tagen ziemlich viel nachgelesen aber das fetzt immer noch net richtig

                Kommentar


                • #9
                  hast du mal gemacht, was ich gesagt hab?

                  wenn ja, was kam denn raus?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    *räusper*

                    Wenn schon binary ausgelesen wird, sollte man die Daten auch mysql-konform aufbereiten:

                    $datei=fopen($neuedatei,'rb');
                    $data=mysql_escape_string(fread($datei,filesize($neuedatei)));
                    fclose($datei);
                    mein Sport: mein Frühstück: meine Arbeit:

                    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                    Kommentar


                    • #11
                      Vielen Dank an alle Helfer und Berater

                      Das war der entscheidende Tip der Quelltext sieht jetzt folgendermaßen aus und er funktioniert! Ich habe mir gedacht ich stell ihn rein für alle die irgendwann mal das selbe Problem haben.

                      So gehts:

                      PHP-Code:
                      <html>
                       <head>
                        <title>Projektupload</title>
                         <meta name="author" content="M.R.-Nemetschek">
                       </head>
                      <body>
                      <?php
                      if($sent//überprüfen des gesendeten Formulars
                      {
                      //Wenn keine Datei für den Upload ausgewählt wurde
                      if(!is_uploaded_file($neuedatei))
                         
                      //dann melde den Fehler
                         
                      {$fehler='<br>Es wurde keine Datei hochgeladen';}
                           else
                           
                      //wenn ja - uberprüfe die Dateigrösse und den DateiTyp
                           
                      {
                           
                      //Ist die Datei grösser als 16MB - MySql-DBTyp=Mediumblob=2^24Byte
                            
                      if($neuedatei_size>16777210)
                               
                      //wenn ja - Ausgabe
                               
                      {$fehler='<br>Die Datei ist zu gross;';}
                            
                      //Wenn es kein zulässiger Dateityp ist
                            
                      if(!($neuedatei_type == 'application/vnd.m************cel' OR $neuedatei_type == 'application/msword'))
                               
                      //dann melde den Fehler
                               
                      {$fehler='<br>Der Dateityp ist nicht zulässig<br>';}
                           }
                      //Ende der Else - Anweisung =keine Datei hochgeladen
                      //Wenn kein Fehler auftritt
                      if (!$fehler)
                          
                      //dann mache folgendes
                          
                      {
                           require(
                      'connect1.php'); //Verbindung zur DB aufbauen
                           
                      $datei=fopen($neuedatei,'rb');
                           
                      $data=mysql_escape_string(fread($datei,filesize($neuedatei)));
                           
                      fclose($datei);
                           
                      $sql="INSERT INTO $tabellenname(bezeichnung, beschreibung, dateityp, datum, datei, dateisize)values('$bezeichnung', '$beschreibung', '$neuedatei_type', now(), '$data', '$neuedatei_size')";
                           
                      //Kontrollausgaben
                           //echo $sql; //Sql-statement
                           //echo $data; //was steht in Data
                      // Hier werden DB-Fehler abgefangen
                           
                      if(!mysql_query($sql$link))
                             {
                      $fehler.='<br>Der Upload ist aufgrund eines Datenbankfehlers gescheitert, bitte versuchen Sie es später noch einmal<br>';}
                          }
                          if(
                      $fehler) {echo "<h2><font color=red> <? echo $fehler ?> </font></h2>";}
                          else
                              {
                               echo 
                      "<h2><font color=blue> Der Upload war erfolgreich </font></h2>";
                               unset(
                      $bezeichnung);
                               unset(
                      $beschreibung);
                              }
                      }
                      //Ende $sent==1
                      ?>
                      <h2>Bitte das Projekt - Formular ausfüllen</h2>

                      <form action='<? echo $PHP_SELF; ?>' method='post' enctype='multipart/form-data'>
                      <input type='hidden' name='sent' value='1'>
                      <p>Die Bezeichnung des Projektes</p>
                      <input type=text name='bezeichnung' size='50' value='<? echo $bezeichnung; ?>'><br>
                      <p>Kurze Beschreibung des Projektes</p>
                      <input type=text name='beschreibung' size='' value='<? echo $beschreibung; ?>'><br>
                      <p>Die Datei auswählen</p>
                      <input type='file' name='neuedatei' size=50><br><br>
                      <input type='submit'><input type='Reset' value'Zurücksetzen'>
                      </form>
                      <a href="../main.php">Zurück zur Startseite</a>
                      </body></html>
                      Noch mal Danke an alle die geholfen haben

                      Man lernt nie aus
                      Zuletzt geändert von ; 23.07.2003, 12:23.

                      Kommentar

                      Lädt...
                      X