Bild in DB uploaden -> Fehler

Begonnen von MastaET, 16 April 2003, 16:20:43

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

MastaET

Hi,

ich will n Bild (und auch andere Dateien) in ne DB laden (kommt mir jetzt nicht mit "nicht in ne DB laden, sondern auf den Server..". Vorgabe ist es, das Zeuch in ne DB zu laden).
Bei manchen GIF´s klappt es, bei anderen nicht.
Dann erscheint eine SQL Fehlermeldung "... Falsche Syntax in der Nähe von... serverity(15)...", gefolgt von einer " message: Bezeichner: ..... it zu lang, 128 Zeichen erlaubt...".

Meine Infos:
IIS Webserver, PHP 4.3.1, SQL 5.0 DB-Server

danke schomma

jubilee

Hmmmm.
Und Du glaubst jetzt wirklich, diese dürftigen Angaben reichen aus
um eine definitive Fehleraussage treffen zu können ?
Kannst du mir wenigstens sagen, wie groß BLOB-Felder im
(Microsoft ????) SQL 5 sein dürfen.
Mit fragenden Grüssen
jubilee

MastaET

Moin jubilee,
also zu den BLOB Feldern:

Ich weiss nicht ob das weiterhilft, aber da steht "Grösse: 16"
Achso, ja, ist n MS SQL Server

hier mal mein Quellcode:

Dateiupload:
in der Variable  test steht der Dateipfad aus nem INPUT TYPE="FILE", das ganze wird per METHOD="POST" weitergegeben:

  ........
  $datei=$_POST['test'];
  $datei=str_replace("\\\\","\\",$datei);
  $groesse=$_FILES['datneu']['size'];
  $groesse2=round($groesse/1024,2);
  $name=$_FILES['datneu']['name'];
  $endung=substr(strrchr($datei,"."),1);
....
  switch($endung)
  {
    case "jpeg": case "jpg": case "jpe":
      $typ="image/jpeg"; break;
    case "gif":
      $typ="image/gif"; break;
    case "bmp":
      $typ="image/bmp"; break;
    case "png":
      $typ="image/png"; break;
    case "tif": case "tiff":
      $typ="image/tiff"; break;
    case "asc": case "txt":
      $typ="text/plain"; break;
    case "doc":
      $typ="application/msword"; break;
  }
.......
$data=addslashes(fread(fopen($datei, "r"),$groesse));
$sql_ins="INSERT INTO $tabelle (objectid,blobid,blobsize,lastmodified,name,data) values (100001,100001,$groesse,'22.04.2003 08:57:23','$name','$data')";
mssql_query($sql_ins,$verbindung);
.......



Bei manchen Bilder klappt der Upload, bei anderen aber nicht.
Hier einmal ein Auszug der Fehler:


  C:\Inetpub\wwwroot\win2000.gif #<- Pfad zum Bild
4.56 K #<- Grösse
win2000.gif #<- Bild

Warning: mssql_query() [function.mssql-query]: message: Zeile 3: Falsche Syntax in der Nähe von '§'. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: message: Bezeichner (beginnend mit '÷h^oÅ"Å,,ˇž€ ţ× ŇÍeÅ•Â,,Ã"aÅ"[üyvŘZz¤)¨!qôyhbdů°ß[&G L`€A2ÃŽ#J1Ęx\"Â...ŽŚŕ~@Å¡(×L\0\0Å"iăŒ\')YăŽZˆ!n>mÂ'JT$\0Lt\0Â'ŠÅ"—aŠ') ist zu lang. Die Maximallänge beträgt 128. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: message: Bezeichner (beginnend mit '•ŒáÄ'Ã,,DÃ,F1Â"†Ã"ČŇ:Ë›Núƃ\'Ť#w™GzćŤOźţ¤§Â'~ÉOnPe†źÚ@ÂŽIPXBQÂ"Ňě:k†ĘjúÃ"TÅ'¤‡Év2˘¤#^âşÅ›kŠ+qÃ"Ä›H=ĘŃíYÃ,,‡AéíŕäÃ,DÅ¡Ã"Kˇě#=yÅ¡O~öÃ"¤lyŠ') ist zu lang. Die Maximallänge beträgt 128. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: message: Bezeichner (beginnend mit 'Ë›&ddÂ"żY/Å°Â'HbwŽÂ'r3š­)\0Śů:Â'c çŠÃ"\"ŕ§Ä™mč ´Š śŠ™ä™›¸pY\0 œÉџşšŸ Q?Â,ϠYv bŸÃ"ž×Ã,* ZŇššÂ"=Ym>!žŠĚažLÅ¡Ä,,Å,Š™ěiŸî)GÄŽW%') ist zu lang. Die Maximallänge beträgt 128. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: message: Bezeichner (beginnend mit 'Ä...{Ä... ›Ä...㊦žúšÅ°&ßʢť°$kÄ...k˛ڼtůÄ...°BţŻź‹JYř˛Ú ~˲ĐúŞďŠÂ"+ŇŃŞ;+Ë›pŠÅ, ;Ä...4 Å,++Å,gy´5k5=K´Ë›@Å¥D7{†Ń1ľA™I ľ&â˛Mű}1K3űľLÅ¥sČÁľ9Ť¨') ist zu lang. Die Maximallänge beträgt 128. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: message: Öffnendes Anführungszeichen vor der Zeichenfolge 'Ä...{Ä... ›Ä...㊦žúšÅ°&ßʢť°$kÄ...k˛ڼtůÄ...°BţŻź‹JYř˛Ú ~˲ĐúŞďŠÂ"+ŇŃŞ;+Ë›pŠÅ, ;Ä...4 Å,++Å,gy´5k5=K´Ë›@Å¥D7{†Ń1ľA™I ľ&â˛Mű}1K3űľLÅ¥sČÁľ9Ť¨Y'. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: Query failed in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

(Zeile 105 ist der mssql_querry. Ich habe die Vermutung das manche Sonderzeiche nicht durch einen Slash aufgehoben werden, so das die QUERY wegen nem Syntaxfehler fehl schlägt. Nur warum werden die Sonderzeichen nicht aufgehoben. Ich rufe doch "addslashes" auf?! Oder sollte ich den Upload anders amchen?)


Nach einer Auflistung der Daten in der Datenbank kann man dann per Klick auf den Namen, welcher zugleich ein Link ist, sich die Datei anzeigen lassen, wobei dann aber nur ein leeres Fenster erscheint...
Übergeben wird die ID aus der Datenbank, für die Datei.
Hier der Quellcode:

 
...
$sql3="SELECT name,data FROM $tabelle WHERE blobid = '".$_GET['ID']."'";
$result=mssql_query($sql3,$verbindung);

if(mssql_num_rows($result)==1)
{
  $name=mssql_result($result,0,0);
  $dat=mssql_result($result,0,1);

  $endung=substr(strrchr($name,"."),1);

  switch($endung)
  {
    case "msg":
      $typ="message/http"; break;
    case "xls": case "XLS":
      $typ="application/msexcel"; break;
    case "zip":
      $typ="application/zip"; break;
    case "jpeg": case "jpg": case "jpe":
      $typ="image/jpeg"; break;
    case "gif":
      $typ="image/gif"; break;
    case "bmp":
      $typ="image/bmp"; break;
    case "png":
      $typ="image/png"; break;
    case "tif": case "tiff":
      $typ="image/tiff"; break;
    case "asc": case "txt":
      $typ="text/plain"; break;
    case "doc":
      $typ="application/msword"; break;
  }

  $kopf="Content-type: ".$typ;
  header($kopf);
  echo $dat;
}
else
{
  die("Fehler!");
}
...


So, ich hoffe das hilft weiter?
gruss MastaET

[Editiert am 22/4/2003 von MastaET]

jubilee

Hallo !
 
Zitat$data=addslashes(fread(fopen($datei, "r"),$groesse));
Warum das ?
Das Bild ist doch eine Binärdatei. Da kannst Du doch kein
addslashes drauf ausführen.
An addslashes darfst Du nur einen String übergeben.
Das würde ich aber nochmal genau überprüfen.
Mfg
jubilee

MastaET

Hi,

wie lade ich denn sonst die Datei hoch?
Ich lese die ja per fread ein, daraus entsteht dann doch ne Zeichenkette, die dann in die DB geschrieben wird. Oder nicht??
Deshalb habe ich gedacht, das ich besser die "addslashes" Funktion benutze um Sonderzeichen zu "tilgen".
hab das ganze jetzt ohne addslashes gemacht..

erscheinen tut jetzt folgendes:

C:\Inetpub\wwwroot\win2000.gif
4.56 K
win2000.gif

Warning: mssql_query() [function.mssql-query]: message: Öffnendes Anführungszeichen vor der Zeichenfolge 'GIF89aČ|'. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: message: Zeile 1: Falsche Syntax in der Nähe von 'GIF89aČ|'. (severity 15) in c:\inetpub\wwwroot\HL\html\upload2.php on line 105

Warning: mssql_query() [function.mssql-query]: Query failed in c:\inetpub\wwwroot\HL\html\upload2.php on line 105


quasi das, was unter $data steht (wenn man "addslashes()" weglässt).


PS: merci für die schnelle Hilfe, find ich echt klasse (das ist ein LOB  ;)  )

jubilee

Hmmm ...
Dann wohl doch mit addslashes.....
Aber addslashes filtert nur ' << >> \ NUL
Ansonsten musst Du addcslashes nehmen und die
zu maskierenden Zeichen selbst angeben ---->
 
Zitat$data=addcslashes(fread(fopen($datei, "r"),$groesse),"\'§");
Evt klappt das dann besser. Die zu maskierenden Zeichen am Ende zwischen die " setzen.
Rückgängig dann mit stripcslashes ()
MfG
jubilee

MastaET

hi,

uiuiui, wär ne Idee, ich probier das mal  ;)
danke

UPDATE:
Ne, das bringt auch keinen Erfolg.

Ich glaube ich muss die Datei irgendwie anders in die Datenbank rein laden..
hast du evtl. nen Tip wo ich sowas nachlesen könnte?

[Editiert am 22/4/2003 von MastaET]