Avatar billede allanjensen333 Nybegynder
11. januar 2010 - 03:10 Der er 8 kommentarer og
1 løsning

Download af dokument fra MySQL virker ikke

Hejsa

Jeg er ved at lave, så jeg kan upload og gemme et dokument i MySQL. Upload af dokumentet virker fint og det gemmer fint i databasen. Download virker egentlig også, for jeg får et dokument ned, men word og excel kan ikke genkende dokumenterne efter download. Der sker et eller andet med dokumenterne undervejs. Jeg ved ikke om det er i uploaden eller downloaden problemet findes

Jeg har vedlagt upload og download scriptet

Er der nogen der kan se hvor der lige går galt?

if($_FILES['file']['size'] > 0)
{
$fileName = $_FILES["file"]["name"];
$tmpName  = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);


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

mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db); // Der åbnes for databasen defineret i config.php.


$query = "INSERT INTO Dokumenter (FileName, size, type, content) VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

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

}

---------------------

// download script
if(isset($_GET['id']))
{

require("Config.php"); // Variabler til mysql hentes
mysql_connect($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db); // Der åbnes for databasen defineret i config.php.


$query = "SELECT FileName, type, size, content "."FROM Dokumenter WHERE id = '".$_GET['id']."'";

$result = mysql_query($query) or die('Error, query failed');
list($FileName, $type, $size, $content) = mysql_fetch_array($result);

header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$FileName");
echo $content;

}
Avatar billede repox Seniormester
11. januar 2010 - 07:46 #1
Hvad er din tabelstruktur?
Avatar billede Slettet bruger
11. januar 2010 - 07:55 #2
Jeg kan forestille mig at det har noget med måden du escaper på at gøre, selvom jeg ikke lige kan se fejlen. Jeg ville prøve at Base64 indkode det før indsættelse. Det bruger lidt mere plads, men så undgår du til gengæld den slags problemer.
Avatar billede michael_stim Ekspert
11. januar 2010 - 08:04 #3
Er det virkelig nødvendigt at fylde basen med dokumenter? I visse tilfælde er det en god idé at smide dem i databasen, men i langt de fleste tilfælde kan det bedre betale sig at have dokumenterne på serveren og filnavnet og evt. stien i databasen.
Avatar billede michael_stim Ekspert
11. januar 2010 - 08:07 #4
Eller prøv at udskrive dit array og se om det er de rigtige data du får ud til dine headers:

list($FileName, $type, $size, $content) = mysql_fetch_array($result);

header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$FileName");
Avatar billede allanjensen333 Nybegynder
11. januar 2010 - 16:10 #5
Min tael struktur er sådan her

CREATE TABLE IF NOT EXISTS `Dokumenter` (
  `id` int(11) NOT NULL auto_increment,
  `FileName` varchar(200) NOT NULL,
  `type` varchar(30) NOT NULL,
  `size` int(11) NOT NULL,
  `content` mediumblob NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;
Avatar billede repox Seniormester
11. januar 2010 - 16:49 #6
Er du sikker på mediumblob er nok?
Avatar billede allanjensen333 Nybegynder
11. januar 2010 - 22:06 #7
Jeg har fundet ud af at hvis jeg skriver indholdet ud til en temp fil, så er dokumentet ok, så det må være noget i headeren eller måske den måde som internet explorer håndtere det på?

Det jeg lavede som test var nedenstående

f.eks.
$fp = fopen('Dokumenter/test.doc', 'w');
fwrite($fp, $content);
fclose($fp);


P.S. mediumblob er stort nok for mig, for mine filer er under 100kb
Avatar billede allanjensen333 Nybegynder
11. januar 2010 - 22:46 #8
Jeg har fundet fejlen nu. I mit php download script så startede
mit php tag i linie 2, så derfor blev mine dokumenter currupte

efter jeg slettede det, så virkede det.
f.eks.

-------------------- <--dokument start

<?php
...
Avatar billede Slettet bruger
12. januar 2010 - 00:18 #9
Ja, den slags slåfejl kan jo ske.
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