Probleempje met bestanden database uitlezen / downloaden

Pagina: 1
Acties:

  • Undertaker2
  • Registratie: Januari 2000
  • Laatst online: 18-05 02:21
Hallo,

Ik ben wat aan het wriemelen met het uploaden (en downloaden) van bestanden in een database)

Het volgende formulier gebruik ik om te uploaden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
    File Description:<br>
    <input type="hidden" name="file_group" value="<?php echo $filegroup; ?>"
    <input type="hidden" name="file_user" value="<?php echo $fileuser; ?>"
    
        
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">
    <input type="text" name="file_description" size="40">
    <br>File to upload/store in database:<br>
    <input type="file" name="file_data" size="40">
    <p><input type="submit" name="submit" value="submit">
    </form>


-file_group en file_user worden ingevuld adhv inloggegevens. (tot die tijd gebruik ik daarvoor tijdelijke gegevens.
-file_data bevat het bestand
-file_description kan gebruikt worden om een noot te zetten bij een geupload bestand.

De bestandstabel 'file' ziet er zo uit:
FILE_GROUP -->tot welke groep behoort de file
FILE_USER --> tot welke gebruiker....
FILE_NAME --> de naam van de file (die moet dus automatisch ingevuld worden)
FILE_DATA --> de blob met binaire gegevens
FILE_DESCRIPTION --> de omschrijving

So far so good, het bestand komt succesvol in de DB te staan, alleen wordt FILE_NAME nog niet ingevuld! Nu kan de gebruiker dat wel handmatig doen, maar da's niet echt logisch natuurlijk. Ik moet dus op een een of andere manier de bestandsnaam van de file in een variabele krijgen....

Het tweede punt is de bestanden weer uit de database halen. Hiervoor gebruik ik de volgende (nog niet werkende) code:

PHP:
1
2
3
4
5
6
7
    @MYSQL_CONNECT("localhost","*******","******");
    @mysql_select_db("md-extranet");
    
    $query = "select file_data, from file, where file_user='bram'"; 
    $result = @MYSQL_QUERY($query);
    $data = @MYSQL_RESULT($result,0,"file_data");
    echo $data;


Ik plaats steeds 1 record in de tabel file, maar dit 'downloadscript' doet niks.
Als ik de sql-querie handmatig in phpmyadmin plaats, dan zie ik netjes 1 regel in de tabel 'file' naar boven komen met daarin het geuploade bestand. Querie lijkt me dus ok?

(tevens vraag ik me af wat er gebeurd indien user bram 10 files op zijn naam heeft, maar da's nog bijzaak)

Bvd!

/edit
Voor het geval het nog niet uit deze post blijkt. Ik heb al diverse searchengines bezocht... maar steeds kom ik of op pagina's waar alleen de syntax van readfile() etc wordt uitgelegd, of ik kom bij fileuploads met behulp van gewone mapjes ipv een database :(

AMD PoloMarco 23500 gigakilometer - 96" Quadcrystal scherm - Detonator 28010.25 afgerond op 2 decimalen - PlakBand @ 768 TB - 512 GB ZIGB - UltraFlex 100 GPU @ 5.5 ghz / 10 ghz - Isootjes @ 1 GB/sec


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

[flame-uitlok-modus]
Bestanden moet je niet opslaan in een database, die horen op een bestandssysteem. In een database hoort (hooguit) een referentie naar het bestand, zoals bijvoorbeeld een bestandsnaam (al dan niet tijdelijk). Hoewel een DB de mogelijkheid biedt om bestanden op te slaan is dit niet verstandig.
[/flame-uitlok-modus]

Bij het uploaden krijg je een bestandsnaam mee, kun je die niet gebruiken?

Localhost, sweet localhost


  • Undertaker2
  • Registratie: Januari 2000
  • Laatst online: 18-05 02:21
Ik weet het. Referenties zijn op het gebied van de performance beter. Het probleem daarbij is dat ik de bestanden dan moet opslaan buiten de .htdocs directory om te voorkomen dat iedereen volledige toegang heeft via www. Hiervoor moet ik lijkt me een pad aangeven dat dus buiten die htdocs folder valt C:\Uploads bijvoorbeeld. Het probleem is dat ik noch weet op welke schijf de boel uiteindelijk zal gaan draaien als in welk pad de uploads dan moeten komen.

Ideaal gezien moet ik dus een relatief pad opgeven. Bijvoorbeeld 1 directory lager om uit de .htdocs map te komen om vervolgens weer een map 'omhoog' te gaan naar Bijv. "uploads".

Vervolgens met 'readfile()' of iets dergelijks zo'n bestand inlezen, in een variabele zetten en dan 'outputten' naar de outputbuffer (de browser?)

AMD PoloMarco 23500 gigakilometer - 96" Quadcrystal scherm - Detonator 28010.25 afgerond op 2 decimalen - PlakBand @ 768 TB - 512 GB ZIGB - UltraFlex 100 GPU @ 5.5 ghz / 10 ghz - Isootjes @ 1 GB/sec


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Kun je het pad dan niet gewoon als variabele ergens in je script definieren? Als je de boel dan verplaatst hoef je alleen deze variabele te veranderen. Of is dat te simpel? :)

Je kan ook kiezen om een object database te gebruiken, deze kunnen wel bestandjes opslaan.

www.fendt.com | Nikon D7100 | PS5


  • Undertaker2
  • Registratie: Januari 2000
  • Laatst online: 18-05 02:21
Ok, ik ben er eindelijk achter waarom het niet werkte.... althans ongeveer:
Het ligt volgens mij aan de volgorde waarin ik de inputs zet... Ik heb het nu zo gedaan en nu werkt het wel:

code:
1
2
3
4
5
6
7
8
9
<form method="post" action="upload2.php" enctype="multipart/form-data">
    File Description:<br>
    <input type="text" name="file_description" size="40">
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000"><br>
    Upload dit bestand:<br>
    <input type="file" name="userfile" size="40">
    
    <p><input type="submit" name="submit" value="submit">
    </form>


Nu alleen nog bestanden downloaden uit de database. Wie helpt?

AMD PoloMarco 23500 gigakilometer - 96" Quadcrystal scherm - Detonator 28010.25 afgerond op 2 decimalen - PlakBand @ 768 TB - 512 GB ZIGB - UltraFlex 100 GPU @ 5.5 ghz / 10 ghz - Isootjes @ 1 GB/sec


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Undertaker2 schreef op 19 November 2002 @ 23:44:
Nu alleen nog bestanden downloaden uit de database. Wie helpt?
Wie er helpt? Ik in iedergeval niet. Afgezien van het feit dat dit riekt naar een scriptrequest (ach, ik ben toch geen mod), Horen bestanden niet in een database.
Bestanden horen op een bestandssysteem.

Uit je posts hierboven heb ik overigens niet bepaald het idee dat je begrijpt waar je mee bezig bent. Je lijkt je er ook niet in verdiept te hebben, je code is ranzig. Lees dit stukje eens door.

Tot dusver de mededeling van de moraalridder.

Localhost, sweet localhost


Verwijderd

kvdveer schreef op 20 November 2002 @ 00:04:
Wie er helpt? Ik in iedergeval niet. Afgezien van het feit dat dit riekt naar een scriptrequest (ach, ik ben toch geen mod), Horen bestanden niet in een database.
Bestanden horen op een bestandssysteem.
Kun jij mij ff uitleggen waarom in er dan een binary filetype in een database kan :? !?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Verwijderd schreef op 20 november 2002 @ 00:09:
[...]


Kun jij mij ff uitleggen waarom in er dan een binary filetype in een database kan :? !?
Ik ze niet kan: ik zeg mag.
Databases zijn geoptimaliseerd in relatief kleine velden, doorgaans van enkele bytes tot maximaal een kilobyte. Daarnaa holt de performance achteruit.
Daarnaast loop mysql over een socket-connectie (vaak lokaal, maar het blijft een socketconnectie). Als je over zo'n connectie een paar bytes pompt heb je daar niet veel last van, als je over zo'n verbinding een groot aantal kilobytes moet verzenden dan vertraagt dat je applicatie enorm.
Het is het beste de diverse systemen datgene te laten doen waar ze goed in zijn: Databases in het opslaan van dataelementen, bestandssystemen in het opslaan van bestanden.

[moraalridder]
En nu weer on topic
[/moraalridder]

Localhost, sweet localhost


  • Undertaker2
  • Registratie: Januari 2000
  • Laatst online: 18-05 02:21
Ik zei in een post eerder toch al dat ik me volledig bewust ben van de performanceloss die men krijgt!

Dus omdat jij pertinent tegen bestanden in een database bent wil je niet helpen? Ik stel de hulp die je geeft echt op prijs, maar dit vind ik een beetje jammer...

En wat is dat nou voor geblaat over scriptrequest!? In m'n openingspost staat toch al een stuk code waar duidelijk uit wordt wat ik heb geprobeerd? Check het hele verhaal MET uitleg en code waarbij ik PRECIES aangeef welke variabele niet werkt.... pfff. Vervolgens kom ik na uren PROBEREN zelf tot een oplossing die ik hier dan ook post. Alleen het downloaden uit de database blijft een issue waarvoor ik zelf al een oplossing heb gevonden die helaas nog niet werkt en waarbij ik vast ben komen te zitten... dus misschien dat iemand een duwtje in de goede RICHTING kan geven.

Vervolgens heb ik me er opeens niet in verdiept en weet ik niet waar ik mee bezig ben!? Waar baseer je dat dan op? Dat ik een keuze maak (met bepaalde redenen) die JIJ toevallig niet zou maken. Beetje kort door de bocht dus.

Altijd maar die mensen die denken precies te weten hoeveel tijd iemand al in z'n probleem gestoken heeft en en vervolgens roepen dat de persoon in kwestie "zich er maar eens in moet verdiepen" of "ga eerst maar eens wat tutorials bekijken" of "koop eens een boek en verdiep je er eerst maar eens in" of in jouw geval alleen maar opmerkingen over vier regels code die (nog) niet ingesprongen zijn en dat de procedure (bestand in database) niet ideaal is en dat het een scriptrequest zou zijn... alleen maar gezever over de procedure waarvan uberhaupt nog maar de vraag is of ze gegrond zijn.

Niet iedereen is een Delphi PHP SQL JAVA VB C++ ASM guru, maar dat betekent niet dat iedereen die buiten die selecte groep programmeerexperts behoort en dus nog niet hetzelfde niveau heeft als alle ouwe rakkers hier, per definitie "niet weet waar ie mee bezig is" of "zich er niet echt in verdiept blijkt te hebben"
Een dergelijke reactie die voornamelijk gebaseert is op vermoedens die overigens niet eens waar zijn kan je beter achterwege laten.

pff. nouja het is laat.. neem het maar met een korreltje zout... ben al veels te lang achter elkaar met PHP bezig ;)

AMD PoloMarco 23500 gigakilometer - 96" Quadcrystal scherm - Detonator 28010.25 afgerond op 2 decimalen - PlakBand @ 768 TB - 512 GB ZIGB - UltraFlex 100 GPU @ 5.5 ghz / 10 ghz - Isootjes @ 1 GB/sec


  • Undertaker2
  • Registratie: Januari 2000
  • Laatst online: 18-05 02:21

AMD PoloMarco 23500 gigakilometer - 96" Quadcrystal scherm - Detonator 28010.25 afgerond op 2 decimalen - PlakBand @ 768 TB - 512 GB ZIGB - UltraFlex 100 GPU @ 5.5 ghz / 10 ghz - Isootjes @ 1 GB/sec

Pagina: 1