-
28-12-2011, 21:22 #1Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
'Bestand uit mysql halen' probleem
Hallo beste mede webprogrammeurs
Ik zit me probleem dat nu toch al een tijdje aansleept en TOCH niet opgelost geraakt...
Ik heb een kleine website met een uploadscript waar documenten kunnen geüpload worden. Deze worden in een MySQL database geplaatst.
Via een andere webpagina kan je dan die documenten die geüpload zijn terug downloaden (stel er u niet teveel van voor, het is HEEL simplistisch).
Nu, als je iets download zoals een .doc file of een .pdf file, springt direct het correcte programma open of wordt het juiste programma aangesproken.
Wat heb ik gemerkt: Office 2010 bestanden (.docx of .xlsx) bestanden worden NIET op de correcte manier geopend. Deze worden uitgelezen als een .xml bestand (wat ze in feit wel zijn maar soit).
Het 'type' bestand wordt automatisch bij het uploaden gedefinieerd.
Bvb:
Een '.doc' document krijgt als type 'application/msword' mee.
Een '.docx' document krijgt als type 'application/vnd.openxmlformats' mee.
Volgens andere fora moet ik prutsen met mijn .htaccess om dit in orde te brengen maar ik zou begot niet weten wat daar allemaal in te noteren.
Heefd iemand een idee hoe ik ervoor kan zorgen dat deze documenten uitgelezen worden als een Word bestand of ik het nodige kan toevoegen aan mijn .htaccess bestand?
Dank bij voorbaat
“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
-
28-12-2011, 21:37 #2Approved 9-lifer
- Registered
- 20/06/10
- Location
- Balegem (Oost-Vlaanderen)
- Posts
- 910
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/4
Heb je het al laten testen voor andere mensen? Ik zou zeggen geef een link...
Lijkt erop dat die instellingen meer bij de gebruiker liggen dan bij de site. Als je zegt dat ze als Xml worden uitgelezen. Eens de echte extensie checken van die gedownloade bestanden. En zo terug gaan kijken in jouw code. Waarschijnlijk converteer je het dan ergens naar een xml.
Je zegt dat de bestanden in je SQL zitten maar daar bedoel je dan toch het path naar de bestanden mee? Bestanden rechstreeks in een sql database gaan droppen lijkt me nogal raar.AMD X6 1090T | Sapphire HD 5850 | 8 gb DRR3 1333Mhz OCZ | 1 TB Seagate HDD | HAF922 | G35 | G110 | Sidewinder X8 | K350 Waveno votes
-
28-12-2011, 21:47 #3Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
Al zeker een 50 tal mensen hebben dit getest

(geen link omdat het in zekere zin onbeveiligd is)
En ja, dat was ik vergeten te vermelden, hij maakt er een .xml bestand van (je kan het bestand openen van zodra je 'openen' via Word selecteert)
Het probleem bevind zich in de MIME-types maar hoe of wat ik moet toevoegen om het in orde te krijgen weet ik echt niet...“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
28-12-2011, 23:19 #4
Stuur je de mimetype wel mee in de headers?
IIRC, is dat in php zoiets:
Dit kan waarschijnlijk ook wel in de .htaccess gedaan worden.Code:// De content type header header('Content-Type: ' . $mimetype); // Als je wil dat het gedownload moet worden header('Content-disposition: attachment; filename=' . $my_filename);no votes
-
29-12-2011, 01:36 #5Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
29-12-2011, 10:28 #6Member
- Registered
- 25/08/05
- Posts
- 68
- iTrader
- 0
- Mentioned
- 0 Post(s)
Aangezien je het terugstuurt via PHP, zal je zelf moeten instaan voor het doorgeven van de juiste headers met mime-types. Via .htaccess gaat dit enkel voor bestanden die door de webserver doorgestuurd worden (een .docx of zo in een map op de webserver).
Idealiter ga je het mime-type detecteren wanneer de upload gebeurt, en sla je dit mee op in een veldje in je database; daarna ga je bij het terug doorsturen van het bestand het correcte mimetype doorsturen.
Trouwens, files in een db is eigenlijk minder slim... sla de files op op disk, en hou een referentie bij in de DB.Nietskeno votes
-
29-12-2011, 13:19 #7
yes sir!
Mimetypes detecteren is trouwens niet zo simpel met PHP als ge lager dan 5.3 draait.
Met PHP > 5.2 kunt ge fileinfo gebruiken, oftewel de PECL extensie zelf mee installeren / compilen op PHP < 5.3
http://www.php.net/manual/en/function.finfo-file.php
Functieke voor PHP < 5.3:
Code:$file_shell = escapeshellarg( $filename ); $mime_type = shell_exec("file -bi " . $file_shell);no votes
-
29-12-2011, 13:47 #8Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
De Mimetypes worden automatisch gedetecteerd van zodra het bestand upgeload wordt, die mimetypes worden dan apart in die database geplaatst

Aan dat laatste had ik ook al gedacht maar aangezien de bestanden niet groot zijn (hoewel ik laatste problemen had met een te groot bestand...) en mijn kennis van PHP niet zo uitgebreid is, heb ik het maar in een database gepropt
(het bestaat al een jaar dusja)
tot nogtoe eigelijk geen problemen gehad om mimetypes te selecteren, effe de code plakken:
Bovenstaande is een deel van het 'uploadscript' waarbij het type bepaald wordtCode:$fileType = $_FILES['userfile']['type'];
Dit is het 'downloadscript' waarbij het type terug wordt toegewezen aan het gedownloadeCode:header("Content-type: $type");
Alles gaat perfect tot ik .docx bestanden en companie er op plaats
“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
29-12-2011, 14:09 #9$_FILES['userfile']['type'] is niet te vertrouwen ...Code:
$fileType = $_FILES['userfile']['type'];
http://stackoverflow.com/questions/6...in-uploads-php
en dan is finfo zelfs nog niet 100% te vertrouwen.. PHP code kunde ook in images steken en dan zal da nog steeds image/jpeg teruggeven. Een al ouder documentje maar nog steeds toepasbaar meen ik:
http://www.scanit.be/uploads/php-file-upload.pdf
maar zolang ge geen code toont zal niemand u kunnen helpen denk ik
Het is zeker en vast zonder .htaccess te doen want ik heb het gisteren zelfs nog gemaakt ..
edit : hebt ge ook verschillende browsers gechecked? Zit ge op IIS? of Apache?Last edited by adrianhates; 29-12-2011 at 14:32.
no votes
-
29-12-2011, 17:17 #10Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
Kudos voor het document, daar kan ik proberen info uit te halen

(again, mijn kennis van php is zeer beperkt...)
Downloadscript
UploadscriptCode:<?php if(isset($_GET['id'])) { include 'hostgegevens'; $id = $_GET['id']; $query = "SELECT name, type, size, content " . "FROM upload WHERE id = '$id'"; $result = mysql_query($query) or die('Error, query failed'); list($name, $type, $size, $content) = mysql_fetch_array($result); header("Content-length: $size"); header("Content-type: $type"); header("Content-Disposition: attachment; filename=$name"); echo $content; exit; } ?>
Code:<?php include "hostgegevens"; if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) { $naam = $_POST['naam']; $bestandsnaam = $_POST['bestandsnaam']; $Vak = $_POST['Vak']; $fileName = $_FILES['userfile']['name']; $tmpName = $_FILES['userfile']['tmp_name']; $fileSize = $_FILES['userfile']['size']; $fileType = $_FILES['userfile']['type']; $fp = fopen($tmpName, 'r'); $content = fread($fp, filesize($tmpName)); $content = addslashes($content); fclose($fp); if(!get_magic_quotes_gpc()) { $fileName = addslashes($fileName); } $query = "INSERT INTO upload (name, size, type, content, naam_ll, bestandsnaam, Vak ) ". "VALUES ('$fileName', '$fileSize', '$fileType', '$content', '$naam', '$bestandsnaam', '$Vak')"; mysql_query($query) or die('Error, query failed'); echo "<br>Bestand '$fileName' opgeladen<br>"; } ?>“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
29-12-2011, 17:59 #11Member
- Registered
- 19/12/03
- Location
- Lebbeke
- Posts
- 1,909
- iTrader
- 48 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/5
Beetje offtopic, maar uw script is wel héél sql injectable.
no votes
-
29-12-2011, 18:11 #12Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
Welk deel van 'ik ben niet zo goed in php' wordt er niet gesnapt?

Kheb een bestaand script gevonden, zo goed mogelijk aangespast en het werkte
Ik ben gwn content DA het werkt
(trouwes, de mensen die het gebruiken, weten niks van programmeren en code
)
“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
29-12-2011, 18:21 #13no votes
-
29-12-2011, 18:44 #14Approved 9-lifer
- Registered
- 30/10/08
- Location
- Outer
- Posts
- 2,703
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/50
“What could I possibly be suggesting?
I mean, a young woman gets saved by a dashing commander who lets her join his crew and then goes off to save the galaxy?
How could she possibly develop any kind of interest in him? ”
Tali'Zorah vas Normandyno votes
-
29-12-2011, 18:59 #15
ge kunt met 1 SQL injection heel uw tabel verwijderen.. Die opmerkingen hebben dus zeker wel iets bij te dragen! Die van Lame ook , want uw opmerking was echt wel lame. Der kan altijd iemand bij zitten dat er wel kennis van heeft .. En dan bende gefucked als da ne klootzak is!
En het werkt niet!
Omdat op te lossen zulde toch een live voorbeeld moeten geven..
Of beter ook niet want dan riskeerde dat uw tabel verdwijnt ..no votes


