/ Forside/ Teknologi / Udvikling / PHP / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Upload til mysql via php
Fra : niels_schleimann
Vist : 375 gange
100 point
Dato : 28-07-03 17:01

Jeg mangler en php kode hvor jeg kan upload filer (feks. word, txt) til mysql og så få vis filen som et link. Filen skal også kopieres fra mysql til en mappe på min server.
:)

 
 
Kommentar
Fra : shady


Dato : 29-07-03 12:39

Er det kun tekstdokumenter eller er det filer i det hele taget ?
Fordi at gemme filer generelt som en del af mysql er meget ustabilt og virker ikke i langt de fleste tilfælde...


Kommentar
Fra : niels_schleimann


Dato : 29-07-03 13:49

Det vil være fint hvis den bare kunne tage tekstdokumenter, men den skal også tage højde for breaks.

Accepteret svar
Fra : rlolsendk

Modtaget 100 point
Dato : 31-07-03 13:09

Jeg gør det ved hjælp af to filer. Den første, som er en ren html fil, indeholder formen hvor du vælger filen via en input field af typen file.
Derudover har jeg i formen lavet en hidden field, med navnet MAX_FILE_SIZE som indeholder den maksimale størrelse den uploadede
fil må have (givet i bytes). Formen's action sætter du til det php script der skal håndtere filupload og database halløjsaet.
Såsom :

<form enctype="multipart/form-data" action="uploaded.php" method="post" onSubmit="return test()">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input name="userfile" type="file" size="30">
..... + html kode der indeholder din formular
</form>

Jeg har i mit script lavet et javascript der sikrer mod forkert indtastede data, idet jeg har flere info jeg føjer til den uploadede fil, såsom
email addresse på hvem der sendte filen. Dem gemmer jeg så sammen med fil info i mysql databasen.
Næste fil indeholder så flere ting. Upload parten er nemmest, idet den egentlig kun består af at flytte filen fra et midlertidigt directory
fra serveren til det sted du vil have den til at ligge. Det gøres med følgende :

if (is_uploaded_file($userfile)) {
if (file_exists($dest)) {
echo("Warning : File already exists. I'm overwriting it!<BR>\n");
}
copy($userfile, $dest);

hvor $dest i mit tilfælde er en strengvariabel der indeholder den komplette sti til hvor filen skal ligge.
Efter at have flyttet filen ind i et directory af eget valg, sender du så en query til mysql manageren. Først åbnes en connection:
$conn_id=mysql_connect($dbhost,$dbuser,$dbpassword);$query="INSERT INTO ".$dbtable."....... (hvad du nu vil indsætte, men stien og filnavnet er en RIGTIG god ide).
$res_id=mysql_query($query);$res_id=mysql_close($conn_id);

På den måde undgår du at gemme filen i mysql databasen som blobs (eller hvad pokker de nu hedder), men kun information omkring
filen, såsom sti og filnavn. Yderligere kan du også gemme andre informationer omkring filen såsom lidt forklarende tekst om hvad det
er for noget, email addresse på afsender etc. Når du nu vil vise linkene på de respective filer der er uploaded, kører du først en ny
query på mysql manageren (de fire ovenstående linier, blot med INSERT INTO... erstattet med SELECT bla bla bla.). Resultatet får du
så ud som en resource givet i $res_id (selfølgelig før du udfører lukke kommandoen). Her kan du så evt. lave en løkke sådan lidt
a la :
$num_rows=mysql_num_rows($res_id);
for($i=0;$i<$num_rows);$i++){
$line=mysql_fetch_row($res_id);
echo("<a href=\"".$line[0].$line[1]."\">".$line[1]."</a>\n");
}

hvor det med dette simple script kræver at første linie i databasen indeholder stien til filen, og næste linie indeholder navnet på filen.
Dette script er ikke helt så sikkert, idet man kan være uheldig at linie 0 kommer ud som filnavnet, og linie 1 er stien (altså lige omvendt,
hvilket ikke er særlig hensigtsmæssigt:), så kan man i sin query indsætte en SORT kommando, så man er sikker på at linie 0 er stien
og linie 1 er filnavnet.

Breaks i filnavnet er ikke noget problem på denne måde idet filnavnet og sti gemmes som text i databasen. Eneste problem er hvis
serveren af en eller anden grund ikke understøtter det.

Håber det hjælper.

Med venlig hilsen Rasmus


Kommentar
Fra : niels_schleimann


Dato : 31-07-03 15:21

Tak for det flotte indlæg Rasmus. Jeg fandt tildels selv ud af det, men dit indlæg hjalp mig godt på vej så du får poinene.

Godkendelse af svar
Fra : niels_schleimann


Dato : 31-07-03 15:23

Tak for svaret rlolsendk.
                        

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste