Avatar billede Slettet bruger
04. maj 2010 - 11:19 Der er 7 kommentarer og
2 løsninger

Omdøb billede til tilfældigt navn

Halløj
Jeg er igang med at lave et lille galleri, og det er første gang jeg roder med PHP/MySQL. Jeg har lavet selve upload-scriptet, men jeg vil gerne have det til at lade være med at uploade billedet, og melde en fejl hvis navnet allerede eksistere. Problemet er bare, at jeg ikke aner hvordan jeg skal gribe det an. Billednavnene er lagret i databasen og billederne ligger på FTP'en, så jeg ved ikke hvad der er nemmest at tjekke?
Håber der er nogle som kan hjælpe mig!
Mine filer:
upload.php
----------
<form method="POST" enctype="multipart/form-data" action="load.php">

<p>

Billedbeskrivelse:<br />
<textarea name="beskrivelse" cols="30" rows="5" type="text"></textarea><br>

Billede:<br />
<input type="file" name="fil" size="21">

<input type="submit" value="Upload!" name="submit">

</p>

</form>
----------

load.php
----------
<?php

include ('connect.php');

$BilledeNavn = $_FILES['fil']['name'];

$beskrivelse = $_POST['beskrivelse'];

$BilledeTmp = $_FILES['fil']['tmp_name'];

$Destination = "billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder.

move_uploaded_file($BilledeTmp, $Destination);

mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");

echo "Billedet er blevet uploadet";

?>
----------

Og så håbede jeg også på at en af jer kan fortælle mig hvordan i laver code-bokse? :-)

Mvh
Kristoffer
Avatar billede Slettet bruger
04. maj 2010 - 11:22 #1
Hov, fik da lige lavet en forkert overskrift - det beklager jeg meget!
Avatar billede majbom Novice
04. maj 2010 - 11:27 #2
du må have noget upload-kode også? der skal du jo så tjekke i databasen om navnet findes?

code bokse laves med ['div']['/div'] uden '
og så kan du lave fonten til serif med ['pre']['/pre'] også uden '
Avatar billede showsource Seniormester
04. maj 2010 - 11:32 #3
Du bør tjekke om der faktisk er en fil.
Og slette "dårlige" tegn i navnet, som f.eks. æ,ø og å

Og du bør sikre dig bare en smule mod sql-injections

Hvis du lader feltet hvor filnavnet er i db, være UNIQUE vil der aldrig kunne være to ens navne.
Avatar billede intenz Novice
04. maj 2010 - 11:37 #4
Du har jo billede destinationen heri $Destination, så det nemmeste er nok at tjekke om filen allerede eksisterer. Du skriver i titlen, at du gerne vil have et tilfældigt navn, og i teksten at du gerne vil melde en fejl hvis billedet eksisterer, hvad vil du?

Jeg har lavet det, så du sikrer at billede navnet ikke eksisterer inden du uploader/gemmer det, så tingene aldrig bliver overskrevet.

Så vil jeg nok også anbefale at du lige kører filnavnet gennem en strtolower() for at sikre, at det kun er små bogstaver, det kan nemt gøre livet nemmere.

Så noget i den stil her:

<?php
include ('connect.php');

$BilledeNavn = strtolower($_FILES['fil']['name']);
$beskrivelse = $_POST['beskrivelse'];
$BilledeTmp = $_FILES['fil']['tmp_name'];

$Destination = "billeder/".$BilledeNavn; // Så ender billedet i en mappe der hedder billeder

// så længe vi ikke har en ny fil, kører vi dette loop og ændrer filnavnet.
while (file_exists($Destination)) {
  $Destination = "billeder/".rand(0,1000).$BilledeNavn;
}

move_uploaded_file($BilledeTmp, $Destination);

mysql_query("INSERT INTO billeder (billede,beskrivelse)VALUES('$BilledeNavn','$beskrivelse')");

echo "Billedet er blevet uploadet";

?>


Du laver desuden kode-bokse ved (div)(/div), og så skal du erstatte parenteserne, med firkantede parenteser [ ]
Avatar billede showsource Seniormester
04. maj 2010 - 11:48 #5
intenz => Du glemmer det nye navn ved INSERT hvis navnet allerede findes.
Avatar billede Slettet bruger
04. maj 2010 - 12:05 #6
Du kan benytte PHP-funktionen "uniqid" til at generere en unik streng (filnavn):
http://dk.php.net/manual/en/function.uniqid.php

Du kan se de forskellige formateringskoder på Eksperten her:
http://www.eksperten.dk/guide/1325
Avatar billede intenz Novice
04. maj 2010 - 12:11 #7
#5 ja, det er selvfølgelig rigtigt. Så skal den se sådan ud:

$oriBilledeNavn = $BilledeNavn;
while (file_exists($Destination)) {
  $BilledeNavn = rand(0,1000).$oriBilledeNavn;
  $Destination = "billeder/".$BilledeNavn;
}
Avatar billede Slettet bruger
04. maj 2010 - 13:44 #8
Hvis du har en id-kolonne i din mysql tabel 'billeder' så kan du navngive billederne efter deres id nr.
Avatar billede Slettet bruger
04. maj 2010 - 15:52 #9
Grunden til den upassende overskrift er, at jeg skiftede mening da jeg sad og skrev tråden, og glemte så at skifte overskrift. Beklager.

Intenz, din løsning virker perfekt, og T4NK3R, jeg fandt dine links meget nyttige.

Jeg skal da lige love for at folk her inde forstår at svare. Det er skønt! :-)
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