Avatar billede morten_linder Praktikant
05. maj 2004 - 19:44 Der er 10 kommentarer

indsætte billede i MSSQL

hej alle

jeg har forsøgt at lave noget kode, som hælder et billede ind i en mssql base. Det er ligner noget jeg har i brug mod mysql, men jeg kan ikke lige gennemskue hvad dælen der går galt her.

<?
    ini_set('magic_quotes_sybase','1');
//    $auktion_connection = odbc_connect("auktion","sa","") OR DIE("Unable to connect to database");

    $msconnect=mssql_connect("172.16.16.4:1433","auktion","auktion");
    $msdb=mssql_select_db("auktion",$msconnect);


    if (isset($billede)) {

        $filename=$_FILES['billede']['tmp_name'];

        print "$filename<br>";

        if (is_uploaded_file($filename)) {
        $data = addslashes(fread(fopen($filename,"r"),filesize($filename)));
        $data = fread(fopen($filename,"r"),filesize($filename));
        $a=getimagesize($filename);
        $width=$a[0]; $height=$a[1];
        $type=addslashes($_FILES['billede']['type']);

    $sql= "INSERT INTO billeder (billede,width,height,filetype) values ('$data','$width','$height','$type')";
//    $sql= "INSERT INTO billeder (width,height,filetype) values ('$width','$height','$type')";
    $result = mssql_query($sql);

        } else {
        echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['billede']['name'];
        }
        echo "Billedet er lagt op :)";

    }

?>


<form enctype="multipart/form-data" action="test.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="hidden" name="varenr" value="<? echo "$varenr"; ?>">
<input type="hidden" name="butik_id" value="<? echo "$butik_id"; ?>">
Send this file: <input name="billede" type="file">
<input type="submit" value="Send fil">
</form>

Nogen kloge? :)
Avatar billede thomaskleist Nybegynder
05. maj 2004 - 19:51 #1
prøv at kigge på der hvor du skal indsætte billede alstå hvor den får en query

$sql = "insert into billeder(billede,width,height,filetype)values('$data','$width','$height','$type)";
mysql_query($sql)

så burde det virke
Avatar billede morten_linder Praktikant
05. maj 2004 - 20:03 #2
det ændrer ikke på noget.
Avatar billede sukos Juniormester
05. maj 2004 - 20:06 #3
Hvad er det som går galt?
Avatar billede detox Nybegynder
05. maj 2004 - 20:08 #4
Den første af de to linier bliver overskrevet af den anden:

        $data = addslashes(fread(fopen($filename,"r"),filesize($filename)));
        $data = fread(fopen($filename,"r"),filesize($filename));
Avatar billede morten_linder Praktikant
05. maj 2004 - 21:57 #5
hov... min fejl.. det var bare et par forsøg. Det ændrer ikke på noget.

Der kommer ikke nogen fejlmeddelelse af nogen art. Der kommer bare ikke noget ind i basen.
Avatar billede thomaskleist Nybegynder
05. maj 2004 - 22:14 #6
Er du sikker på at det er det rigtige table navn og at du har angivet billede
feltet som en blob??
Avatar billede detox Nybegynder
06. maj 2004 - 03:44 #7
Prøv:

<?
    set_magic_quotes_runtime(1);
    $auktion_connection = odbc_connect("auktion","sa","") or die("Unable to connect to database");

    $msconnect=mssql_connect("172.16.16.4:1433","auktion","auktion");
    $msdb=mssql_select_db("auktion",$msconnect);

    if (isset($_FILES['billede'])) {
        $filename = $_FILES['billede']['tmp_name'];
        if (is_uploaded_file($filename)) {
        print "$filename<br />";
        $data = fread(fopen($filename,"r"),filesize($filename));
        $a=getimagesize($filename);
        $width=$a[0]; $height=$a[1];
        $type=$_FILES['billede']['type'];
    $sql= "INSERT INTO billeder (billede,width,height,filetype) values ('$data','$width','$height','$type')";
    $result = mssql_query($sql);
        echo "Billedet er lagt op :)";
    } else {
        echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['billede']['name'];
    }
}
?>

<form enctype="multipart/form-data" action="test3.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="hidden" name="varenr" value="<? echo "$varenr"; ?>">
<input type="hidden" name="butik_id" value="<? echo "$butik_id"; ?>">
Send this file: <input name="billede" type="file">
<input type="submit" value="Send fil">
</form>
Avatar billede morten_linder Praktikant
06. maj 2004 - 08:41 #8
der sker præcis det samme.

nemlig at scriptet bliver eksekveret uden fejl eller noget, men der kommer ikke noget ind i basen. Den forbliver altså tom.

det er lidt spooky.

min base er som følger:

id - int - autoincrement
billede - binary
filetype - varchar
width - numeric
height - numeric

er der noget her, jeg skal lave anderledes?

/Morten
Avatar billede morten_linder Praktikant
06. maj 2004 - 09:45 #9
Nu har jeg fået lavet noget, som ikke fejler, og fandt så en fejl i det tidligere script.

<?
    set_magic_quotes_runtime(1);
    ini_set('magic_quotes_sybase','1');
    $myServer = "SQLSRV01";
    $myUser = "auktion";
    $myPass = "auktion";
    $myDB = "auktion";

    $s = @mssql_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer");
    $d = @mssql_select_db($myDB, $s) or die("Couldn't open database $myDB");
   

    if (isset($_FILES['billede'])) {
            $filename = $_FILES['billede']['tmp_name'];
                if (is_uploaded_file($filename)) {
                print "$filename<br />";
                $data = addslashes(fread(fopen($filename,"r"),filesize($filename)));
                $a=getimagesize($filename);
                $width=$a[0]; $height=$a[1];
                $type=$_FILES['billede']['type'];

            $sql= "INSERT INTO billeder (billede,width,height,filetype) values ('$data','$width','$height','$type')";
            echo "$sql";

            mssql_query($sql) OR DIE (mssql_error());
            echo "Billedet er lagt op :)";
        } else {
            echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['billede']['name'];
        }
    }
?>

<form enctype="multipart/form-data" action="test3.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="hidden" name="varenr" value="<? echo "$varenr"; ?>">
<input type="hidden" name="butik_id" value="<? echo "$butik_id"; ?>">
Send this file: <input name="billede" type="file">
<input type="submit" value="Send fil">
</form>

Ved at undlade at indsætte billedet i binary feltet, så kommer resten af data ind i basen, så nu fungerer min connection (min fejl).

Nu er det bare hvordan skal billedet "forarbejdes" og hvordan skal feltet være sat i MSSQL serveren? lige nu står det til Binary med en størrelse på 1000. Altså 1mb.

der skulle være plads nok til mit lille testbillede på 60kb.
Avatar billede olebole Juniormester
06. maj 2004 - 18:47 #10
<ole>

Det er stort set aldrig en fordel at indsætte binære filer i en database. Det gør din database håbløst tung og langsom at søge i.
Nøjes med at lægge info om billedet i DB - og læg så billederne i en eller flere mapper på serveren. Det er en langt bedre approach  ;o)

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester