Hvordan laves et simpelt brugergalleri smartest? Hvor skal billederne ligge? Hvordan kobler jeg billede-filen og bruger-id bedst sammen? Hvilke oplysninger er nødvendige at gemme om billedet?
Du kan sagtens lave et brugergalleri helt uden at gemme oplysninger om det i en database.
F.eks. kan du have mappen "brugerbilleder" hvor du så laver en mappe til hver bruger. Disse mapper døber efter brugernes id'er. Så brugeren med id 15, får en mappe, der hedder "15". I denne mappe kan du så lægge alle billederne. Når du skal vise billederne, skal din kode bare gå ind i denne mappe og vise de billeder, der er. =)
Hvis du endelig skal gemme informationer, så kan du stadigvæk følge w13's forslag. Du laver blot en XML-fil (naturligvis automatisk genereret i PHP) i alle mapperne, eksempelvis kaldet "info.xml", hvori du gemmer lidt information om det enkelte billede. Filen behøver reelt ikke at være XML, den kan sagtens blot være en almindelig TXT-fil, hvis du hellere vil arbejde med den filtype.
Jeg vil umiddelbart gætte på, at de sætter det ind i en database. Med så mange brugere, og så mange billeder, er det både det hurtigste, samt det mest effektive.
Du har umiddelbart allerede fået det mest optimale forslag, til dine behov. Medmindre du har yderligere behov, så dækker w13's forslag uden tvivl dette - eventuelt inkl. én standard XML-fil i hver mappe, hvori der bliver gemt nogle basale informationer.
- Hvis du dog ønsker at inddrage en reel database, så må du jo give udtryk for dette :-)
Hvis du gemmer oplysninger i en selvstændig fil, i mappen, så kan du sagtens gemme information. Det er dog tit lettere at arbejde med informationer i en database, frem for i en decideret XML-fil.
Hvis du ønsker at lave det i en database, så laver du bare en tabel med nogle celler lign: id, bruger_id, url, dato. Så er det så let, at når du skal udskrive billederne, sortere du bare dem ud fra tabellen, som passer til den pågældende bruger, og via. den gemte url i rækken, kender du billedets url-adresse. Du har desuden også et id og en dato, til dette billede.
Selve billederne kan du blot gemme i den samme folder - du skal naturligvis blot sikre, at der ikke allerede eksisterer et billede med samme navn, og såfremt der skulle gøre det, så omdøbe det nye billede til noget, som intet andet billede hedder.
Det havde jeg også selv forestillet mig. Men så er jeg lidt i tvivl om det er smart at gemme hele billedets URL fremfor blot navn. Hvad hvis jeg skifter lokation for billederne eller til en ny server eller lignende.
Og hvad jeg mest er i tvivl om - hvordan skal jeg navngive billederne? det skal helst være nogle unikke ID's - men hvordan :S
Du kan f.eks. navngive billedet efter hvilket id det skal have. Derved skal det første billede f.eks. hedde 1.jpg, det næste 2.jpg, osv. For at gøre navnet lidt længere, og blandet med bogstaver også - så kunne du meget enkelt lave en md5-enkryptering på id'et, og så bruge resultatet som navn.
Mht. billedets url, så bør du (som du også selv er inde på) kun gemme billedets fulde navn - og ikke en hel url-adresse. Derved kan du til hver en tid flytte rundt på diverse domæner, mapper, o.l.
Mappen kan du f.eks. kalde: billeder, brugerbilleder, images, userimages, eller andet.
cronick - hvordan finder jeg billedet id? jeg ønsker jo at tjekke om billedet blev uploadet FØR jeg smider det ind i databasen. så jeg ved ikke rigtigt hvordan jeg skal finde på dets id.
Først indsætter du en række i din tabel, hvor der automatisk bliver genereret et unikt nyt id, ved hjælp af 'auto_increment'. Herefter bruge du id'et, samt en md5-kryptering, til at lave navnet på billedet, som du så uploader. Efterfølgende checker du om billedet blev uploadet korrekt - hvis ikke, så sletter du den nye række igen. Alternativt kunne du blot have indlagt en ekstra query, for at hente det næste id i rækken - på denne måde bliver din kode et par linier længere, dog sparer du en ekstra query. Det kunne være noget lign. det følgende:
mysql_query("INSERT ... ")or die(mysql_error());
$unique_id = mysql_insert_id() // det nye id der blev brugt ovenover $fileFrom = $_FILES['image']['tmp_name']; $fileTo = "billeder/".md5($unique_id).".".end(explode(".", $_FILES['image']['name']));
Eftersom $fileTo ryger ind i tabellen, er du uvæsenligt, hvorvidt id'et er brugt to gange, eftersom den tilføjer et tilfældigt tal imellem 0 - 9999, til md5-krypteringen.
Hvis det alligevel skal handle om 'tilfældighed' (på et eller andet niveau :D), burde man så ikke spare det databasekald, og så gøre det ENDNU mere tilfældigt. Altså noget alá md5( microtime() . rand( 0, 999999 ) )?
Det kan du da sagtens - men du sparer ikke noget database-kald :-)
Uanset hvad skal du bruge den øverste query, til at indsætte informationer i tabellen, hvis du skal benytte dig af en database, frem for så meget andet.
Synes godt om
Ny brugerNybegynder
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.