Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 15:02 Der er 30 kommentarer og
1 løsning

Php: upload fil,opret mappe efter id

Hej phpeksperter.

Jeg har nedenstående script som jeg har fundet på et site. Hvordan udbygger jeg det, så det ligger billedfilen,som jeg uploader,ind i en mappe der er navngivet efter billedets id fra en mysqldatabase. Jeg håber meget i kan hjælpe.
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 15:06 #1
<?php
if ($_FILES['minfil']) //Har brugeren forsøgt at uploade noget?
{
    //Bestem hvor filen skal smides hen og og hvad den skal hedde
    $destination = "Images/" . $_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="upload.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>
Avatar billede jakobdo Ekspert
01. januar 2008 - 15:10 #2
Kender du funktionen mkdir() ?
Du kan læse om den her: www.php.net/mkdir
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 15:30 #3
Nej..Jeg har brug for at uploade et billede, assigne billedet et ID fra en mysql database, bruge dette id til at lave en mappe hvor billedet kan ligge i. Jeg kan ikke helt finde ud af hvad der skal gøres først i scriptet.
Avatar billede jakobdo Ekspert
01. januar 2008 - 15:50 #4
Filens navn kommer herfra: $destination = "Images/" . $_FILES['minfil']['name'];
Så der skal du "bare" indsætte dit DatabaseID og så skal du kigge på funktionen mkdir(), den bruges til at oprette mapper.
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 15:57 #5
Mit problem er sådan set bare, at jeg skal uploade en masse billeder. Uvilkårligt hvad de hedder, skal de omdøbes til et ID. Hvordan får jeg lavet det sådan?
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 15:59 #6
Billedet skal nemlig både uploades og billedets URL skal sættes ind i et databaseindlæg. Er det muligt at omdøbe billedet til database-id'et samt at opkalde mappen billedet ligger i efter id'et?

Ja det er lidt forvirrende, men jeg håber det kan forstås
Avatar billede jakobdo Ekspert
01. januar 2008 - 16:08 #7
Det kan man godt ja! :o)
Jeg kunne godt give dig en løsning, men jeg tror du lære mest ved lige at få lov til at tænke og prøve lidt selv!
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 16:12 #8
Kan det evt se sådan ud?

$dirname = en eller anden ting hvor man kan få den næste ledige idnummer frem
mkdir("Images/$dirname") 
$destination = "Images/" . $dirname;
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 16:17 #9
det næste ledige idnummer skal hentes fra mysqldb på en eller anden måde.
har lidt på fornemmelsen at jeg er lidt gal på den et eller andet sted..
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 16:23 #10
Er det noget med først at skabe en connection med mysqldatabasen skabe et nyt indlæg, kalde id'et på det nye indlæg frem, og bruge det i navngivningsprocessen af både fil og mappe. Herefter indsætte sti til billedet i db-indlægget?
Avatar billede jakobdo Ekspert
01. januar 2008 - 16:37 #11
Korrekt, noget i stil med det sidste du skriver ja.
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 16:41 #12
Kan du ride det op groft i kode? Kan ikke helt se mig ud af det rent teknisk
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 16:44 #13
ridse
Avatar billede jakobdo Ekspert
01. januar 2008 - 16:52 #14
Indsæt i database.
Få id via: mysql_insert_id();
Opret mappe med mkdir() og brug id fra ovenover.
Upload billedet til mappen netop oprettet og kald billedet navn med ID.
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 17:29 #15
Hvorfor virker dette ikke?

mysql_query("INSERT INTO images (date) VALUES ('$time()')") OR DIE(mysql_error());       
    mysql_insert_id();
    $navn = mysql_insert_id();
    mkdir("Images/$navn") 
    $destination = Images/$navn;
Avatar billede jakobdo Ekspert
01. januar 2008 - 17:33 #16
mysql_query("INSERT INTO images (date) VALUES ('$time()')") OR DIE(mysql_error());     
$navn = mysql_insert_id();
mkdir("Images/$navn")
$destination = "Images/$navn"; //Husk noget endelse på dit billede
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 17:38 #17
Den siger: Parse error: syntax error, unexpected T_VARIABLE in /web/www/frac/users/j/jimages/uploada.php on line 9

og refererr til $destination = "Images/$navn";
Avatar billede jakobdo Ekspert
01. januar 2008 - 17:45 #18
mkdir("Images/$navn"); <---- ;
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 17:49 #19
Juhuu det virker!! En sidste ting: hvordan får jeg i samme omgang omdøbt filen til samme navn som mappen?
Avatar billede jakobdo Ekspert
01. januar 2008 - 17:54 #20
Ret $destination
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 17:58 #21
Jeg troede det virkede men den melder blot ud: Der er sket en fejl:

mysql_query("INSERT INTO images (date) VALUES ('$time()')") OR DIE(mysql_error());   
    $navn = mysql_insert_id();
    mkdir("Images/$navn");
    $destination = "Images/$navn";
   
    //Forsøg at flyttede den uploadede fil fra 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";
    }
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 17:59 #22
Mappen bliver oprettet hvor den skal men filen er ikke i
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 18:14 #23
NU har jeg prøvet lidt nyt: Men får følgende:

Warning: move_uploaded_file() [function.move-uploaded-file]: SAFE MODE Restriction in effect. The script whose uid is 85274 is not allowed to access /web/www/frac/users/j/jimages/Images/24 owned by uid 33 in /web/www/frac/users/j/jimages/upload.php on line 13
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 18:18 #24
Er det pga. serverens instillinger?
Avatar billede jakobdo Ekspert
01. januar 2008 - 18:45 #25
Det er noget med safe_mode.
Prøv at søg lidt på nettet.
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 18:57 #26
Jeg har fundet ud af, at safemode er en fnktion serveren har slået til.. Mht til mit script: Det virker nu mht navngivning af billeder som numre hvilket er helt fint.

Jeg vil gerne være i stand til at loade 3 billeder op på engang. Billederne skal have følgende navn: $id-1.jpg, $id-2.jpg og $id-3.jpg. Hvordan får jeg lavet det i scriptet?

<?php
if ($_FILES['minfil'])
{
    mysql_connect("m", "m", "m") or die(mysql_error());
    mysql_select_db("jimages") or die(mysql_error());
    mysql_query("INSERT INTO images (date) VALUES ('$time()')") OR DIE(mysql_error());   
    $navn = mysql_insert_id();
    $destinationpath = "$navn.jpg";
    echo "$destination";
   


    if (move_uploaded_file($_FILES['minfil']['tmp_name'], $destinationpath))
    {

        echo "Uploaded";

    }
    else
    {
        echo "Der er sket en fejl";
    }


}
?>

<form action="<? $_server['php_self']; ?>" 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>
Avatar billede lasse-p3 Nybegynder
01. januar 2008 - 18:58 #27
Jeg har smidt nogle flere point i spørgsmålet da det kun er rimeligt!
Avatar billede jakobdo Ekspert
01. januar 2008 - 19:07 #28
Test her:

<?php
if(isset($_POST['upload']))
{
    mysql_connect("m", "m", "m") or die(mysql_error());
    mysql_select_db("jimages") or die(mysql_error());
    mysql_query("INSERT INTO images (date) VALUES ('$time()')") OR DIE(mysql_error()); 
   
    $id = mysql_insert_id();
    $extension = 'jpg';
 
  for($i = i; $i <= 3; $i++){
        if (move_uploaded_file($_FILES['minfil']['tmp_name'], $id . '-' . $i . '.' . $extension)){
            echo 'Fil: ' . $i . ' - Uploaded';
        }else{
            echo 'Fil: ' . $i . ' - Fejl';
        }
    }
}
?>

<form action="<? $_server['php_self']; ?>" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    Vælg fil 1: <input name="minfil[1]" type="file"><br />
    Vælg fil 2: <input name="minfil[2]" type="file"><br />
    Vælg fil 3: <input name="minfil[3]" type="file"><br />
    <input type="submit" name="upload" value="Upload fil">
</form>
Avatar billede lasse-p3 Nybegynder
03. januar 2008 - 16:01 #29
Super, smider du et svar, jakobdo?
Avatar billede jakobdo Ekspert
03. januar 2008 - 19:02 #30
Svar!
Avatar billede jakobdo Ekspert
23. april 2009 - 09:20 #31
Takker for point.
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