Avatar billede YoJonas Nybegynder
06. oktober 2012 - 21:48 Der er 3 kommentarer og
1 løsning

Form med fileupload og radiobutton til database?

Jeg søger en form som uploader til en database (jeg bruger phpmyadmin) som har felterne "email", "billede" og "tekstbobbel". "email" skal bare være en input-felt som normalt, "billede" skal være en fil upload, hvor man kan uploade alle billedeformater og "tekstbobbel" skal være en radio button med 4 valgmuligheder.

De skal som sagt uploade til en database, det vil sige at "billede" skal uploade til en mappe eksempelvis "images", og samtidig skrive enten stien eller filnavnet i databasen.

Jeg har søgt forskellige steder - men kan ikke finde noget. Er det muligt og er der nogle som kan hjælpe mig? Er virkelig ude og svømme.
Avatar billede Slettet bruger
06. oktober 2012 - 23:50 #1
http://gratisupload.dk/       

www.2shared.com

www.peecee.dk

www.megafileupload.com

Filsystemet

Inkluder en fil
At inkludere en fil i PHP er utroligt simpelt og kan køres med én linje kode:


Kode:




1.
2.
3.


<?php
include("filnavn.php");
?>


Man kan også bruge require() i stedet for include(), den eneste forskel er den måde de opfører sig på hvis filen ikke kan findes. Ved include fortsætter den med at indlæse resten af siden selvom include filen ikke kan findes, men ved require stopper den.

Læg indholdet af en fil over i variabel
I princippet lige så simpelt som at inkludere en fil, her benytter vi bare funktionen file_get_contents(). Eksempel:


Kode:




1.
2.
3.
4.


<?php
$filindhold = file_get_contents("filnavn.txt"); //Indholdet af filnavn.txt tildeles variablen $filindhold
echo $filindhold;
?>


Læs en fil linje for linje
Gemmer man ting (diverse lister) i tekstfiler kan det tit være nødvendigt at læse en fil linje for linje. I nedenstående eksempel har jeg gemt en liste med søgemaskiner i en tekstfil (se fil), og indlæser den så i et array.


Kode:




1.
2.
3.
4.
5.
6.
7.
8.
9.
10.


<?php
$fil = file("sogemaskiner.txt"); //$fil bliver et array med én linje i hver position

//Vis indholdet af arrayet
foreach($fil as $linje)
{
    echo $linje . "<br />";
}

?>


Resultat:

Google
Altavista
Lycos
Yahoo


Skrive til en fil
Når man vil skrive noget indhold til en fil vha. PHP, så benytter man en såkaldt datastrøm. Vi tager udgangspunkt i et eksempel:


Kode:




1.
2.
3.
4.
5.
6.


<?php
$indhold = "Dette er noget indhold"; //Indhold vi gerne vil have ind i filen
$fil = fopen("minfil.txt", "w"); //Åben filen
fwrite($fil, $indhold); //Skriv indholdet af $indhold ind i filen
fclose($fil); //Luk filen
?>


For at åbne en fil til skrivning i php benyttes funktionen fopen(). I det første parameter oplyses der hvilken fil vi gerne vil arbejde med (i dette tilfælde minfil.txt). Det andet parameter fortæller hvordan vi ønsker at åbne filen (skal indholdet slettes i filen først? Skal indholdet smides ind sidst eller først i filen?). Jeg har i eksemplet brugt w, som betyder at filen åbnes kun for skrivning, den skriver i begyndelsen af filen, sletter alt andet indhold og hvis filen ikke eksistere så opretter den en. I tabellen herunder kan du se hvilke muligheder du har:





Metode

Betydning



r

Åben kun for læsning, start i begyndelsen af filen.



r+

Åben for både læsning og skrivning, start i begyndelsen af filen.



w

Åben kun for skrivning, start i begyndelsen af filen, slet alt indhold i filen først og opret filen hvis den ikke eksisterer



w+

Åben for læsning og skrivning, start i begyndelsen af filen, slet alt andet indhold i filen og opret filen hvis den ikke eksisterer



a

Åben kun for skrivning, start i slutningen af filen og opret filen hvis den ikke eksisterer



a+

Åben for læsning og skrivning, start i slutningen af filen og opret filen hvis den ikke eksisterer


Når filen er åbnet med det rette formål (i eksemplet w), så benyttes funktionen fwrite() fil at skrive en variabel til filen. Og endeligt afsluttes der med fclose() for at lukke filen (det skal man altid gøre når man er færdig med at arbejde med "datastrømmen".

En datastrøm i php oprettet med fopen() kan ikke kun bruges til at skrive til filer, men også at læse fra den. Dette gøres vha. fgets() funktionen.

Simpel counter i php
I denne lille guide vises hvordan man kan lave en simpel counter, baseret på tekstfiler. Den komplette kode ses i boksen herunder, og bagefter gennemgås den linje for linje.


Kode:




1.
2.
3.
4.
5.
6.
7.
8.
9.
10.


<?php
$hits = file_get_contents("counter.txt"); //Læs indholdet af filen (antallet af hits)
$hits++; //Læg 1 til
echo $hits; //Skriv antallat af hits ud på skærmen

//Gem det nye tal i tekstfilen
$fil = fopen("counter.txt", "w"); //Åben tekstfilen hvor antallet af hits gemmes i
fwrite($fil, $hits); //Gem $hits som vi lige har lagt 1 til, i filen
fclose($fil); //Luk filen
?>


Resultat:

1688

2: Her bruger vi funktionen file_get_contents() til at finde indholdet af counter.txt. I denne tekstfil gemmes det samlede antal hits.
3: Her forøger vi antal med 1 (hver gang siden indlæses bliver der lagt 1 til selvfølgelig).
4: Det nye tal skrives ud på skærmen.
7: Nu skal vi have skrevet det nye tal/hits ned i tekstfilen igen, sådan at det bliver gemt til næste gang. Vi bruger fopen() til at åbne filen, med metoden w. Som beskrevet i forrige afsnit, så betyder det at vi åbner filen kun for skrivning (vi behøver ikke læse noget fra den, vi skal bare have gemt et tal heri) og alt andet indhold i filen slettes (så der kun er det nye tal i tekstfilen).
8: fwrite() gemmer tallet i tekstfilen. Det første parameter angiver hvilken fil vi har med at gøre, og det andet parameter fortæller hvad der skal proppes i filen.
9: Sørg for at lukke filen med fclose()

Hvis du modtager en fejl, kan det skyldes at du ikke har rettigheder til at skrive til filen fra php. Derfor kræver det at du chmod'er filen til f.eks. 777.



Lav et upload script i php
Vi vil nu forsøge at lave et uploadscriptet vha. php, hvor brugeren kan vælge hvilken fil der skal uploades. Det første der skal på plads er selve formen, hvor brugeren vælger sin fil. Dette gøres på følgende måde:


Kode:




1.
2.
3.
4.
5.


<form action="eks1.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    Vælg fil: <input name="minfil" type="file">
    <input type="submit" value="Upload fil">
</form>


Der er et par ting at bemærke til koden. I den første linje er der tilføjet attributen enctype, som er nødvendig for at upload-scriptet vil virke. Læg også mærke til det skjulte felt med navnet MAX_FILE_SIZE, der fortæller hvor store filerne maksimalt kan være i bytes (i eksemplet er det 100000 bytes, dvs. 100kb).

Så kommer det interessante, nemlig php delen:



Kode:




1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.


<?php
if ($_FILES['minfil']) //Har brugeren forsøgt at uploade noget?
{
    //Bestem hvor filen skal smides hen og og hvad den skal hedde
    $destination = "uploadede_filer/" . $_FILES['minfil']['name'];

    //Forsøg at flyttede den uploadede fil har dens midlertidige destination til den nye
    if (move_uploaded_file($_FILES['minfil']['tmp_name'], $destination))
    {
        echo "Filen" . $_FILES['minfil']['name'] . " blevet uploadet";
    }
    else
    {
        echo "Der er sket en fejl";
    }
}
?>


Forklaring:
2. Her tjekkes der om brugeren har postet formen og der rent faktisk er en fil med. Hvis ja, skal den gå videre og uploade filen.
5. Her bestemmes den uploadede fils destination. Den kommer til at ligge i undermappen "uploadede_filer", med samme navn som den hedder på brugerens computer. Der er brugt $_FILES['minfil']['name'] fil at finde ud af hvad den uploadede fil hedder (se evt. boksen under forklaringen, da man også kan finde andre information om filen).
8. Det her sted er lidt tricky. Når brugeren trykker "send fil", så bliver brugerens fil i virkeligheden uploadet til webserveren hvor den ligger midlertidigt. Det kan vi ikke bruge til noget, derfor bruger vi kommandoen move_uploaded_file() til at flytte filen til den ønskede destination. $_FILES['userfile']['tmp_name'] bruges, som beskrevet i tabellen herunder, til at finde navnet på den midlertidige fil..





Variabel

Resultat



$_FILES['minfil']['name']

Giver navnet på den uploadede fil, magen til det den hedder på brugerens computer



$_FILES['userfile']['type']

Hvilken type fil er uploadet? (MIME format). F.eks. "image/jpeg"



$_FILES['userfile']['size']

Filstørrelsen i bytes



$_FILES['userfile']['tmp_name']

Filens midlertidige navn


Det samlede script bliver altså:

Kode:




1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.


<?php
if ($_FILES['minfil']) //Har brugeren forsøgt at uploade noget?
{
    //Bestem hvor filen skal smides hen og og hvad den skal hedde
    $destination = "uploadede_filer/" . $_FILES['minfil']['name'];

    //Forsøg at flyttede den uploadede fil har dens midlertidige destination til den nye
    if (move_uploaded_file($_FILES['minfil']['tmp_name'], $destination))
    {
        echo "Filen" . $_FILES['minfil']['name'] . " blevet uploadet";
    }
    else
    {
        echo "Der er sket en fejl";
    }
}
?>

<form action="eks3.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    Vælg fil: <input name="minfil" type="file">
    <input type="submit" value="Upload fil">
</form>


Husk at ændre eks3.php til navnet på selve php filen der eksekverer scriptet. Husk også at det kan bliver nødvendigt at chmod'e (til f.eks. 777) mappen hvor de uploadede filer lægges i, så rettighederne er i orden.

Vis alle filer i en mappe
Relativt simpelt, man benytter funktion opendir() til at "åbne" en mappe og derefter readdir() til at loope igennem filerne i mappen. Et eksempel:


Kode:




1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.


<?
$dirname = "testmappe/"; //Hvor skal den lede efter filer?
$dirhandle = opendir($dirname); //Åben mappen
while($file = readdir($dirhandle)) //Loop gennem mappen
{
    if ($file != "." && $file != "..") //Fjern . og ..
    {
        if (is_file($dirname.$file)) //Find ud af om det er en fil eller en mappe
        {
            echo "fil: " . $file . "<br>";
        }
        else
        {
            echo "mappe: " . $file . "<br>";
        }
    }
}
?>


Resultat:

fil: test1.txt
mappe: nymappe
fil: bongo.txt
mappe: mapp123
fil: 123.txt


Diverse fil-funktioner

Slet fil
I PHP kan man slette filer ved at benytte unlink(). Funktionen tager filnavnet som parameter. Eksempel:


Kode:




1.
2.
3.


<?php
unlink("mintestfil.txt"); //Slet en fil vha. php
?>




Slet mappe
Det er lige så simpelt at slette en mappe som en fil i php, og man benytter funktionen rmdir(). Et eksempel:


Kode:




1.
2.
3.


<?php
rmdir("minmappe/mappe1/"); //Slette en mappe i php
?>




Kopier fil
I php kan man kopiere filer vha. funktionen copy($source, $destination). Det første parameter er hvilken fil man ønsker at kopiere, og det næste er filen destination (fuldt filnavn begge steder). Eksempel:


Kode:




1.
2.
3.


<?php
copy("testdokument.txt", "abctest.txt"); //Kopier en fil med php
?>




Tjek om fil og mappe eksisterer
For at tjekke om en given fil eksisterer kan man benytte is_file(). F.eks.:


Kode:




1.
2.
3.
4.
5.
6.


<?php
if (is_file("filnavn.jpg")) //Tjek om filen findes
{
    //Filen findes
}
?>


Hvis man vil tjekke om en mappe findes kan man gøre følgende:



Kode:




1.
2.
3.
4.
5.
6.


<?php
if (is_dir("testmappe/")) //Test om en mappe findes med php
{
    //Mappen findes
}
?>

http://uploading.com
Avatar billede YoJonas Nybegynder
07. oktober 2012 - 14:03 #2
Hmm må indrømme, at jeg kan ikke helt få det til at virke. Men jeg kan heller ikke se, at det skulle gøre, som jeg gerne vil have det til. Det skal jo stadigvæk skrive filnavnet til min database ikke bare uploade på min server. Derudover skal der stadigvæk være et input, og et valg af en radiobutton. Så i alt 4 felter (med ID som det første).

Er det evt. muligt at du kan uploade en zip fil til mig med filer, hvor jeg bare skal ændre name på form-felterne og stien på mappen der skal uploades til?
Avatar billede Slettet bruger
07. oktober 2012 - 18:51 #3
Avatar billede YoJonas Nybegynder
21. marts 2013 - 19:03 #4
Lukket
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

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