Avatar billede g1mzee Nybegynder
12. januar 2010 - 13:31 Der er 13 kommentarer og
1 løsning

Galleri, med database.

Hej eksperter..
Jeg har fjollet lidt rundt med noget galleri her på det sidste, og jeg vil gerne have en som virker sikker og er tilstrækkelig til behov.
billedernes navne og id'er vil blive lageret i en database, hvor thumbnail navn også vil være. og så skal det være muligt at koble billeder sammen med en profil / event eller lign.
opsætningen vil være sådan at man har 2 knapper, forrige og næste, og så skal den gå til den pågældende.

billed database:
image_id
image_name
image_name_thumb
fk_event_id

noget lignende det her ville databasen se ud.

men jeg sidder bare og kan ikke finde ud af hvordan jeg skal få den til at kunne kører i loop i sig selv, og hvordan jeg skal kunne få den til at finde næste billed, hvis id'et ikke lige præcis er det næste? hvordan kan jeg hoppe fra id 234 til 345.
skal jeg have en slags sort på, hvor de  are rangeret fra 1 til ?? .
det skal også virke hvis der bliver slettet et billed,
og gerne gå en en løkke, så den starter forfra når sidste billed er vidst.

nogen der kan hjælpe mig lidt på vej her ? .. eller kender en guide eller lign.


Ngschumacher..
Avatar billede public2 Nybegynder
12. januar 2010 - 14:04 #1
Der er masser af PHP billedgallerier derude, men ellers er det næsten nemmere at lave det selv og så smide noget AJAX Modal Window på.

Der ligger et par gode artikler her på eksperten omkring at uploade og resize billeder.

Angående dit spørgsmål omkring ID og loop, så skal du ikke tænke så meget over det. Når du har en database med billeder, så vil de blive indsat kronologisk, altså 1-2-3-4-5-6-7-8-9-10 hvis du så sletter billede nummer 6, så vil det blot se således ud 1-2-3-4-5-7-8-9-10 så nu din kode looper over rækkerne i databasen, vil den blot finde det tage fra start til slut, uanset ID rækkefølge.

Jeg har et galleri (som jeg engang har fundet, ikke selv lavet) og jeg har testet det og det virker, det benytter sig af OOP PHP, benytter AJAX og er forholdsvist nemt at ændre i designet og integrere det på en side.

Det benytter derudover også en Database (hvor mange billedgallerier blot uploader til en mappe og så rekursivt viser indholdet i den).

Men prøv dette her galleri:
http://www.box.net/shared/re0yr0u6mp

Held og lykke
Avatar billede g1mzee Nybegynder
12. januar 2010 - 14:20 #2
Mange tak for svaret.
ang det med database noget, så vil jeg jo mene kan sætter id'et op i linket og henter det ned med $_GET
men lad os nu lige vi har id nummer 564, som er et billed til event 23. Hvordan vil du så kunne få lavet forrige knap og næste knap uden at vide hvad næste id er. da det kunne være 1000 eller 565.
For når du henter id'et ned fra GET, så sørger man jo noget lignende :
SELECT image_name, image_id FROM images WHERE image_id = '$_GET['image_id']'.
Hvilket jo kun ville give 1 row tilbage.
hvis du kan følge mig .

kigger lige på den anden der :)
Avatar billede public2 Nybegynder
12. januar 2010 - 14:21 #3
Hej igen,

okay, jeg har lige testet galleriet jeg har linket til og der mangler lidt arbejde på det for at det kommer helt til at virke, blandt andet med en login funktion, men det er jo til at klare.

Og så bruger det ikke helt det Ajax jeg havde troet, men det kan også sagtens uden større indgreb lade sig gøre, men det vigtigste er, at den gemmer i database (du skal dog lave et upload modul), men igen, nemt at lave.

Men dine hovedtræk er helt klar en del af det og det kræver en nem database, du skal dog også lave så den resizer billedet og gemmer thumpnail stien i databasen og igen igen, nemt at tilføje og implementere :-)

...

Her har du den oprindelige Database opsætning, hvor du så kan tilføje nye rækker:

-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jan 12, 2010 at 01:19 PM
-- Server version: 5.1.36
-- PHP Version: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `gallery`
--

-- --------------------------------------------------------

--
-- Table structure for table `photos`
--

CREATE TABLE IF NOT EXISTS `photos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `src` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `photos`
--

INSERT INTO `photos` (`id`, `title`, `src`) VALUES
(1, 'Title 3', '3.jpg'),
(2, 'Title 14', '14.jpg');

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `user_name`, `password`) VALUES
(1, 'test', 'test'),
(2, 'admin', 'admin');
Avatar billede g1mzee Nybegynder
12. januar 2010 - 14:26 #4
Kan se det er sådan noget lightbox noget..
Hvilket ikke er det jeg helt er ude efter :).
Personligt syntes jeg ikke om at se billeder i lightbox, det er mere irriterende en rart.
Avatar billede public2 Nybegynder
12. januar 2010 - 14:29 #5
Det du skal gøre er at lave krydsreferencer i din database, så du knytter forskellige elementer til hinanden, men hvor du selvfølgelig stadig overholder normformerne.

Hvordan du i PHP vil "forbinde" dem kan ske på flere måder, men hvis vi tager dit eksempel med at lave det ske i Query'en som du henter, så kan du jo have en query noget i stil med:
index.php?imageID={imageID}&eventID={eventID}.

Ved så at lave en reference i database kan du altid se, hvilke billeder hører til hvilke events eller omvendt, hvilke events hører til hvilke billedet.

Men nu skriver du også med dine "frem" og "tilbage" knapper og hvordan de skal vide med et ID, det vil du jo så finde ud af ved at lave en query til databasen, og den kan så laves mere eller mindre kompliceret, så den tager højde for næste billede for samme event eller omvendt, men hvordan det helt præcis skal laves, handler det jo om konteksten og hvordan det skal se ud...
Avatar billede public2 Nybegynder
12. januar 2010 - 14:31 #6
Intet står skrevet i sten med sådan et script, du kan fjerne lightbox, du kan tilføje en ny eller du kan helt lade vær. Du kan evt. browse rundt på nettet efter noget fedt JavaScript / Ajax du synes du vil have eller hvis du slet ikke vil bruge Ajax er det selvfølgelig endnu nemmere bare at "kalde" et nyt billede via PHP.
Avatar billede g1mzee Nybegynder
12. januar 2010 - 14:35 #7
Ved ikke helt om jeg formulerede mig forkert eller hvad jeg har :D
Men det skal dog siges jeg godt kender til faget, og at kunne få forbindelser imellem databaser.

Men selve problemet er egentlig med den forrige og næste knap, for den kan jeg ikke lige se mig ud af, resten kan jeg sagtens lave :)
Avatar billede g1mzee Nybegynder
12. januar 2010 - 14:36 #8
AJAX er skam cool nok :d
ville ønske jeg kunne det bedre end jeg kan :p..
Avatar billede public2 Nybegynder
12. januar 2010 - 14:44 #9
Jeg har lidt svært ved helt at forstå problemstillingen omkring dine knapper. Skal det forstås sådan, at et billede (ImageID=1) er knyttet til en event (EventID=1)?

Eller at f.eks. billederne (ImageID=1,2,13,24,35,56,78,86,900,1001) er tilknyttet en event (EventID=1) og at den så skal browse igennem de billeder, som tilhører eventen (EventID=1)???

Og så var det ikke meningen, hvis jeg kom til at skrive lidt nedladende, det er ikke altid til at vide hvilken erfaring folk har, så nogle gange kommer det måske til at forudsætte en mindre viden, og det er bestemt ikke meningen :-)
Avatar billede g1mzee Nybegynder
12. januar 2010 - 14:58 #10
Bestemt , bestemt.
Ja lige præcis, at der er en 1 til flere relation.
f.eks. facebook. der 'browser' man igennem billederne, og når man trykker næste får man det næste billede, uanset hvilket album eller hvad det ligger i.
men jeg vil have sådan at næste knappen sørger for at jeg får det næste billede med det event_id.
Avatar billede public2 Nybegynder
12. januar 2010 - 15:17 #11
Som jeg ser det er det noget din SQL query skal sørge for, det den skal hente på knappen "next" er noget i stil med imageID where imageID = eventID, så altså en krydsreference og siden det er en-til-mange skal din imageTable i database være udstyret med et eventID for hvert billede...

Således kan du blot få din SQL til at finde næste billede, som har imageID højere end det du er ved og hvor billedet eventID er ligmed en eventID i en Event tabel i databasen.

Det er meget lig hvis du har lavet eller roddet med et forum før, hvor én tråd har mange kommentar, så for at liste, lad os sige, 15 kommentar pr. side, så skal de kommentar også kun være dem, der er tilknyttet den aktuelle tråd.
Avatar billede jenz3n Nybegynder
12. januar 2010 - 15:22 #12
Næste knappen:

SELECT `id` FROM `tabel` WHERE `id` > 'nuværende billede ID' ORDER BY `id` LIMIT 1

Hvis den ikke returnerer nogen rækker, skal du i stedet finde det første billede.

Forrige knappen laves på næsten samme måde:

SELECT `id` FROM `tabel` WHERE `id` < 'nuværende billede ID' ORDER BY `id` ASC LIMIT 1

Igen, returnerer den ingen ting, skal du finde det sidste billede.

Vil du yderligere sikre dig at alle billederne tilhører et bestemt event, tilføjer du bare "AND `eventId` = 'id'" til din WHERE.
Avatar billede g1mzee Nybegynder
12. januar 2010 - 15:28 #13
JENZ3N.. !!!!
Det er lige præcis det der jeg mener ! :D
Min redning... Hvorfor er det lige at jeg ikke havde tænkt på det.
Avatar billede jenz3n Nybegynder
12. januar 2010 - 15:31 #14
Hehe, det var godt :)
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