[MSSQL] bilder als blob in db speichern => bildfehler

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

  • [MSSQL] bilder als blob in db speichern => bildfehler

    hallo zusammen,

    ich habe ein großes problem mit abspeichern von jpg´s als blob in einer mysql db über ein php script.



    zum speichern in der datenbank wird folgender code genutzt:

    PHP-Code:
    <form method="post" enctype="multipart/form-data">
    <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr> 
    <td width="246">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <input name="userfile" type="file" id="userfile"> 
    </td>
    <td width="80"><input name="upload" type="submit" class="box" id="upload" value=" Upload "></td>
    </tr>
    </table>
    </form>

    <?php
    if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
    {
    $fileName $_FILES['userfile']['name'];
    $tmpName  $_FILES['userfile']['tmp_name'];
    $fileSize $_FILES['userfile']['size'];
    $fileType $_FILES['userfile']['type'];

    $fp      fopen($tmpName'r');
    $content fread($fpfilesize($tmpName));
    $content addslashes($content);
    fclose($fp);

    if(!
    get_magic_quotes_gpc())
    {
        
    $fileName addslashes($fileName);
    }

    include 
    '../..//include/constant.php';    
    $dblink mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS);
    $dbup mysql_select_db(MYSQL_DB);

    $query "INSERT INTO upload (name, size, type, content ) ".
    "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

    mysql_query($query$dblink) or die('Error, query failed'); 

    echo 
    "<br>File $fileName uploaded<br>";

    ?>
    -----------------------------------------------------------------------------------------

    für die anzeige des entsprechenden bildes, dieses script:

    PHP-Code:
    <?php
    include '..//include/constant.php';

    mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS);
    mysql_select_db(MYSQL_DB);
    //$sql_select = "select bild from artikel where artikelnummer = '" . $_GET['id'] ."'";
    $sql_select "select content from upload where id = '" $_GET['id'] ."'";
    $result mysql_query($sql_select);
    $bild mysql_fetch_array($result);
    header('Content-Type: image/jpeg');
    echo 
    stripslashes($bild[0]);
    //echo $bild[0];
    //echo "test";
    mysql_close();
    ?>
    die bilder (jpg) werden auch wunderbar in der db agbelgt. will man sich nun jedoch das bild anschauen, so ist das bild fehlerhaft.

    im dateianhang sieht man ein bsp. wie das bild aussieht, und wie, wenn man es sich aus der db anschauen möchte.

    bmps können dagegen ohne probleme angezeigt werden. liegt es vielleicht daran, da jpgs im gegensatz zu bmp komprimiert sind?

    kennt jemand von euch das problem, bzw. kann mit hier bei der lösung helfen?

    gruß und danke...

    mad-max
    Angehängte Dateien
    Zuletzt geändert von mad-max79; 04.09.2007, 14:33.

  • #2
    generelle frage: warum willst du die bilder als blob in der db speichern. warum nicht einfach ein verweise auf das bild? ist doch mit sicherheit wesentlich performanter.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Original geschrieben von Kropff
      generelle frage: warum willst du die bilder als blob in der db speichern. warum nicht einfach ein verweise auf das bild? ist doch mit sicherheit wesentlich performanter.

      gruß
      peter
      wahrscheinlich wegen zugriffsrechten
      Tempim.de - Dein kostenloser Bildhoster
      Tipps und Tricks für Webmaster

      Kommentar


      • #4
        hallo...

        ja, unter anderem wegen der berechtigung.

        ist schon klar, dass mit dem ablegen in die db ist nicht gerade die schönste lösung.

        mit dieser muss ich jetzt jedoch leben, geht leider nicht anders.

        habt ihr eine idee, warum es zu den bildfehlern kommt?
        ich denke die scripte sollten soweit ok sein, oder???

        mad-max

        Kommentar


        • #5
          Original geschrieben von Seggl-hoch-drei
          wahrscheinlich wegen zugriffsrechten
          das kann man auch eleganter lösen als über eine monster-db

          gruß
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            1. error_reporting(E_ALL) als erste Zeile des PHP Codes und allfällige Fehler beseitigen.
            2. Haste den Code genau so im Einsatz ? Weil
            PHP-Code:
            include '../..//include/constant.php'
            include 
            '..//include/constant.php'
            schauen als Pfade irgendwie strange aus
            3. Benutze bitte die PHP Tags hier im Forum, dann kann man den Code viel besser lesen --> berarbeite also bitte deinen Beitrag
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Original geschrieben von jahlives
              1. error_reporting(E_ALL) als erste Zeile des PHP Codes und allfällige Fehler beseitigen.
              2. Haste den Code genau so im Einsatz ? Weil
              PHP-Code:
              include '../..//include/constant.php'
              include 
              '..//include/constant.php'
              schauen als Pfade irgendwie strange aus
              3. Benutze bitte die PHP Tags hier im Forum, dann kann man den Code viel besser lesen --> berarbeite also bitte deinen Beitrag
              wegen der sachen die included werden, dass ist soweit ok. zumindest wird die constant.php auch berücksichtigt.

              der entspechende inhalt sieht wie folgt aus:

              PHP-Code:
              <?php
              define 
              ("MYSQL_HOST","localhost");
              define ("MYSQL_DB","---");
              define ("MYSQL_USER","---");
              define ("MYSQL_PASS","---");
              define ("MAXROW","15");
              ?>

              Kommentar


              • #8
                wegen der sachen die included werden, dass ist soweit ok.
                entferne trotzdem mal ein / das ist sicher kompatibler...

                Kommentar


                • #9
                  ok, geändert. aber jedoch ohne erfolg.

                  bild wird zwar abgelgt, jedoch beim betrachten sind wieder bildfehler da.

                  error_reporting(E_ALL) brachte leider auch keine lösung. in beiden scripten kommt es zur keiner meldung.

                  Kommentar


                  • #10
                    mal ohne
                    PHP-Code:
                    $content addslashes($content); 
                    ausprobiert?

                    gruß
                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      im anzeigescript ändere

                      PHP-Code:
                      stripslashes($bild[0]); 
                      in

                      PHP-Code:
                      echo $bild[0]; 
                      das verursacht bei mir den fehler
                      Mehr als die Vergangenheit interessiert mich die Zukunft, denn in ihr gedenke ich zu leben.


                      Albert Einstein

                      Kommentar


                      • #12
                        @Kropff
                        ja, hatte ich. kommt jedoch weiter zu bildfehlern.


                        @Ascharan
                        wenn ich aus
                        PHP-Code:
                        echo stripslashes($bild[0]); 
                        ein
                        PHP-Code:
                        echo $bild[0]; 
                        dann bekomme ich im browser nur ein [X]
                        also, dass das bild nicht anzeigt werden kann, als ob es nicht da wäre.

                        Kommentar


                        • #13
                          mal ausprobiert, die bilder erst per move_uploaded_flie in ein verzeichnis zu schieben, zu überprüfen, und dann auszulesen?

                          gruß
                          peter
                          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                          Meine Seite

                          Kommentar


                          • #14
                            Du machst ja in jedem Falle einen addslashes(), was aber imho nur bei abgeschalteter magic_quote Einstellung Sinn macht. Unten prüfst du dann korrekt erst ob die magic quotes auf on sind und machst erst dann den addslashes(). Würde ich jetzt mal beim $content genau so machen.
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar

                            Lädt...
                            X