Avatar billede flemseras Nybegynder
15. juli 2004 - 18:30 Der er 9 kommentarer og
1 løsning

PHP script der kan udtrække data fra MySql (BLOB)

Hejsa!!

Jeg er rimeligt nybegynder i PHP/MySql/Linux så vær blid ved mig :-)

Selvom jeg kan se at der er mange der ikke anbefaler at gemme filer direkte i databasen, tror jeg alligevel at det er noget der i min situation er det fornuftigeste. (Under alle omstændigheder er det ingen skade til at finde ud af hvordan..)

Mit Problem:
Jeg kunne godt tænke mig et script i PHP der, efter brugervalidering i MySql, kunne gå ind i brugerens række og hente 1 almindelig tekstfil til download. (Det drejer sig om en mailkonfigurationsfil i klar tekst)

Jeg har adgang til klienten, så jeg regner med at kunne lave en "applikationstype" i browseren (firefox) som vil acceptere filen og downloade den ned i klientens homefolder.

Andre muligheder? Løsningsforslag?

(ps, jeg har læst samtlige scripts på www.hotscripts.com og der var ikke rigtigt noget)
Avatar billede Slettet bruger
15. juli 2004 - 21:09 #1
Det er sådan set ret simpelt.

1) Start scriptet med at udføre din brugervalidering. (Det regner jeg med, du har styr på.)
2) Hent dit datafelt ud på samme måde, som du henter alt muligt andet fra MySQL.
3) Send filtype, og send data. Det kan gøres som nedenstående eksempel:

<?php

header("Content-Type: application/octet-stream");
echo $blob;

?>

Bemærk, at der må ikke udskrives noget som helst under punkt 1 og 2, for så vil header-kommandoen ikke virke. Du skal heller ikke have en DOCTYPE eller andre HTML-koder omkring.
Avatar billede Slettet bruger
15. juli 2004 - 21:11 #2
Hvis serveren er sat op til automatisk at køre addslashes på variabler fra databaser, skal du lige fjerne slashes igen, når du udskriver.

echo stripslashes($blob);
Avatar billede flemseras Nybegynder
15. juli 2004 - 22:46 #3
dejligt at høre det kan lade sig gøre. Jeg skal nok lige bede om et lille hint mere..

Jeg har lavet en DB der hedder "fil". i den har jeg lavet en tabel der hedder "files".

der er to felter, et varchar der hedder "bruger" med et brugernavn (fle) og et der hedder "config" med mediumblob hvor jeg har insertet et lille tekst dokument (gpl.txt)


Burde nedenstående så kunne virke ?


<?php
$connect = mysql_connect("min_mysql_server","root","mit-root-password");
mysql_select_db("fil", $connect);
mysql_query("SELECT config FROM files WHERE bruger = 'fle';
header("Content-Type: application/octet-stream");
echo $blob;
?>
Avatar billede Slettet bruger
15. juli 2004 - 23:19 #4
Med et par rettelser og en lille tilføjelse:

<?php
$connect = mysql_connect("min_mysql_server","root","mit-root-password");
mysql_select_db("fil", $connect);

$res=mysql_query("SELECT config FROM files WHERE bruger = 'fle'");
$row=mysql_fetch_assoc($res);

header("Content-Type: application/octet-stream");
echo $row['config'];
?>

så skulle det virke. (Der skal måske en header mere til for at nogle browsere ikke forsøger at vise filen, selv om den bliver sendt som application/octet-stream.)
Avatar billede flemseras Nybegynder
16. juli 2004 - 09:07 #5
Hmmm..Nu får jeg denne ?

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/localhost/htdocs/send.php on line 6

Warning: Cannot modify header information - headers already sent by (output started at /var/www/localhost/htdocs/send.php:6) in /var/www/localhost/htdocs/send.php on line 8
Avatar billede flemseras Nybegynder
16. juli 2004 - 09:34 #6
hov, undskyld, det var mig der ikke havde sat den rigtige tabel på :-)...
Den virker fint nu.. tak for hjælpen!!

Svar så kommer point. ( I explorer viser den filen, men firefox vil downloade, så det er det vigtigeste. den skal nemlig bruges i firefox. Dog gemmer den filen som "send.php" Er der en måde man kan ændre det på til at blive filnavnet på den fil der ligger i Blob ) Hvis du kan hjælpe med den også er der 60 mere points :-)
Avatar billede Slettet bruger
16. juli 2004 - 13:20 #7
Hvis du sætter følgende linie sammen med den anden header, skulle den også få et fornuftigt filnavn.

header('Content-Disposition: attachment; filename="' . $filnavn . '"');

Hvis du vil have, at den skal have samme filnavn, som da brugeren uploadede filen, er du nødt til at gemme filnavnet også. (Eller hvis filnavnet altid er det samme, kan du bare sætte $filnavn til at indeholde teksten.
Avatar billede flemseras Nybegynder
16. juli 2004 - 13:55 #8
Perfekt!! Tak for hjælpen...
Avatar billede flemseras Nybegynder
16. juli 2004 - 13:58 #9
hov Sandbox, jeg skal vist lige bruge et svar mere fra dig fpr at gi dig 60 mere..
Avatar billede Slettet bruger
16. juli 2004 - 14:00 #10
Skidt med dem. De 60, jeg har fået er nok.
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