Avatar billede blueeye97 Nybegynder
11. april 2005 - 12:29 Der er 10 kommentarer og
1 løsning

lille "loppemarked"

Jeg har på mit site et lille loppemarked. Det virker fint nok. Men brugerne efterlyser muligheden for at have et billede tilknyttet annoncerne.

Jeg har forberedt en mappe hvor de uploadede billeder skal være i. Men for at undgå ens navne skal billederne vel gemmes med kronologiske navne. 1.jpg, 2.jpg osv.

Formularen som brugeren udfylder linker til en php side hvor de indtastede oplysninger gemmes i en MySql database.

Hvordan uploader jeg billedet samtidig med at annoncen oprettes i databasen og hvordan omdøber jeg det i samme funktion til f.eks. 1.jpg ? Jeg går ud fra at det eneste der kræves af databasen, er et tekstfelt med navnet på billedefilen.
Avatar billede sukos Juniormester
11. april 2005 - 12:37 #1
hvis du bruger et id i Mysql, som er auto_incrment, primary, kan du jo bruge navnet, "id".filtype
Så vil hvert billede være tilknyttet den vare.

mysql.................
$last_id = mysql_insert_id();

Og så bruge getimagesize til at finde ud hvilken filtype det er som uploades, og på den måde give det den rette filtype, gif, jpeg, png........

$typer = array(1 => "gif", 2 => "jpeg", 3 => "png");
$upname = $last_id ".". strtr($img[2], $typer);
Avatar billede sukos Juniormester
11. april 2005 - 12:39 #2
Hvor
$img = getimagesize($_FILES["upfile"]["tmp_name"]);
Avatar billede blueeye97 Nybegynder
12. april 2005 - 15:26 #3
Argh... Jeg forstår det ikke.. :o(

Måske det er nemmere at se mit script. Hvor får jeg omdøbt filen her ?

<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Vælg billede</font>
<br>

<input name="upfile[]" type="file" size="48"><br>
<input type="submit" value="Upload" class="submit">
</form>
<p>
<?php
$dist = $_SERVER["DOCUMENT_ROOT"] ."/loppe/billeder/";
$link = $_SERVER["PHP_SELF"];

if (isset($_FILES["upfile"])) {

for($i = 0; $i < count($_FILES["upfile"]["name"]); $i++) {
if ($_FILES["upfile"]["name"][$i] !="") {
$nr++;

if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$i])) {
move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i]);
echo"Filen <b>". $_FILES["upfile"]["name"][$i] ."</b> er uploadet<br>\n";
}else{
echo"Upload til serveren skete ikke!";
}
}
}

if($nr < 1) {
echo"Find billede til upload! <a href=\"". $link ."\">tilbage</a>";
}else{
echo"<a href=\"". $link ."\">tilbage</a>";
}
}
?>
Avatar billede blueeye97 Nybegynder
12. april 2005 - 15:48 #4
Ovenstående er taget fra en bog og tar højde for at der kan uploades flere billeder, så jeg er sikker på at det nok kan koges ned til noget mere simpelt.

Jeg har et id felt med autonummerering og selvfølgelig er det smartest at bruge det som udgangspåunkt for billedets navn. but how...
Avatar billede sukos Juniormester
12. april 2005 - 20:28 #5
Først skal du indsætte i mysql som du plejer, og derefter tjekke om der skal uploades et billede.
$last_id = mysql_insert_id();

Efter du har insat et nyt row, kan du få id med mysql_insert_id()


Og i stedet for $_FILES["upfile"]["name"] kan du så bruge:

$img = getimagesize($_FILES["upfile"]["tmp_name"]);
$typer = array(1 => "gif", 2 => "jpeg", 3 => "png");
$upname = $last_id ".". strtr($img[2], $typer);

hvor "$upname" jo så bliver filnavnet.
Avatar billede blueeye97 Nybegynder
13. april 2005 - 11:21 #6
Jeg forstår godt ideen og jeg har også forsøgt at lave det.

Min formular ligger i en htm fil og selve oprettelsen i databasen ligger i en php fil. Jeg har tilføjet et "fil-felt" og kaldt det "upfile". Men ovre på php siden er filnavnet ændret til et temp navn og jeg kan ikke få upload scriptet til at køre.

Gider du evt. bruge tid på at skitsere et lille eksempel hvor formen er på en side og upload scriptet er på en anden ?
Avatar billede blueeye97 Nybegynder
13. april 2005 - 12:43 #7
vent...

Jeg havde lavet en fejl. Jeg kan godt finde ud af upload nu. Nu mangler bare konverteringen af navnet. :o))
Avatar billede blueeye97 Nybegynder
13. april 2005 - 13:11 #8
Nu har jeg fundet ud af at omdøbe og uploade. Nu har jeg så problem 2...

Når jeg opretter recorden uploades billedet med id som navn. Men jeg kan jo først få oplyst id EFTER jeg har skrevet recorden. Databasen ved således ikke at der er et billede tilknyttet den enkelte record. eller hvad ?
Avatar billede blueeye97 Nybegynder
13. april 2005 - 13:28 #9
Har løst det...

Jeg tilføjer bare fotofeltet umiddelbart efter at den originale record er skrevet.

Svar og points er på vej :o)
Avatar billede sukos Juniormester
13. april 2005 - 13:31 #10
Den nemme:
Brug kun jpg filer!
Så kan du jo blot tjekke om filen findes
if(is_file($row["id"] .".jpeg")) {
......
}

og lidt mere besværlige:
Enten uploader du først et evt. billede efter din INSERT, og henter id med mysql_insert_id()

Og nok indsætter navnet på filen, med en UPDATE, så du ved hvilken fil du skal vise.

Du kan også hente næste id med en query, dog med en smule usikkerhed, hvis nu to brugere opretter på samme tid .........
Avatar billede sukos Juniormester
13. april 2005 - 13:32 #11
Nåh, ja ok, du får et svar :O)
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