Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][CSS] Rozmieszczenie zdjęć w galerii
Forum PHP.pl > Forum > Przedszkole
bemol
Witam, podczas pisania pewnej aplikacji narodził się błąd. Mianowicie chodzi o zapytanie lub coś czego właśnie nie znam smile.gif
A mianowicie mam 2 tabele w bazie danych o strukturach:

Gallery:
  1. CREATE TABLE `Gallery` (
  2. `GalleryID` int(11) NOT NULL AUTO_INCREMENT,
  3. `GalleryDate` datetime NOT NULL,
  4. `GalleryDescription` text NOT NULL,
  5. `GalleryContent` text NOT NULL,
  6. PRIMARY KEY (`GalleryID`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=2 ;


Photos:
  1. CREATE TABLE `Photos` (
  2. `PhotoID` int(11) NOT NULL AUTO_INCREMENT,
  3. `PhotoDate` datetime NOT NULL,
  4. `PhotoGalleryID` int(11) NOT NULL,
  5. `PhotoDescription` text NOT NULL,
  6. PRIMARY KEY (`PhotoID`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;


oraz plik:
offer.php (część kodu)
  1. <?php
  2. $Db = new db_engine(HOST, USER, DBPASSWORD, NAME);
  3. if ( $Db->is_connected ) {
  4. $Db->query_db("SELECT * FROM Gallery");
  5. if ( $Db->num_rows() > 0 ) {
  6.  
  7.  while ( $Row = $Db->fetch_array() ) {
  8. echo '<div class="div_head">';
  9. echo $Row['GalleryDescription'];
  10. echo '</div>';
  11. echo '<div class="div_body">';
  12. $Db->Query("SELECT * FROM Photos WHERE PhotoGalleryID=".$Row['GalleryID']);
  13. while ( $Verse = $Db->fetch_array() ) {
  14. echo '<img src="photos/mini/'.$Verse['PhotoID'].'.jpg" alt="'.$Verse['PhotoDescription'].'" />&nbsp;&nbsp;';
  15. }
  16. echo $Row['GalleryContent'];
  17. echo '<hr size="1" color="#555555">
  18. <a href="offer.php?Action=Edit&ID='.$Row['GalleryID'].'"><img src="actions/edit.png" alt="edytuj" class="a_img" /> Edytuj</a>&nbsp;&nbsp;
  19. <a href="offer.php?Action=Delete&ID='.$Row['GalleryID'].'"><img src="actions/delete.png" alt="kasuj" class="a_img" /> Kasuj</a>&nbsp;&nbsp;</div>';
  20. }
  21. } else {
  22. echo '<div align="center"><a href="startpage.php?Action=Add"><img src="actions/addpage.png" alt="dodaj" class="a_img" /> Dodaj treść</a><br /><br />Pusta zawartość. Kliknij w przycisk Edytuj stronę główną, żeby dodać zawartoś
    ć.</div>'
    ;
  23. }
  24. }
  25. $Db->close_db();
  26. ?>


Chcę, aby wyświetlane były dwie kolumny zdjęć.

Przykład:

Galeria1 *zdjęcie1 | zdjęcie2*
Galeria1 ******zdjęcie3****
Galeria2 ******zdjęcie1****
Galeria3 *zdjęcie1 | zdjęcie2*
Galeria3 *zdjęcie3 | zdjęcie4*

Prosze o pomoc
nexis
W temacie nazwałeś swój problem "zaawansowanym zapytaniem", a w opisanym problemie nie widzę niczego, co miałoby z tym coś wspólnego.

// Proszę o nie nabijanie postów.
// ~webdicepl
bemol
widocznie nie rozumiesz co napisałem i co chce osiągnąć, ja widze duży związek temtu z treścią.
niepotrzebny spam
konraddo
Problem leży tu zapewne w odpowiednim ułożeniu znaczników html'a i nadaniu im reguł css'a, bądź atrybutów
ustaw odpowiednią szerokość dla klasy div_body i obrazka, otocz pojedyńczy obrazek dodatkowym div'em wyrównaj go do lewej, ustaw szerokość, a będą się układać jeden obok drugiego aż sie nie zmieszczą w szerokości div_body i przejdą do nowego wiersza
bemol
niestety z tego skorzystać nie mogę. to jest wyświetlanie jedynie w panelu administracyjnym, a co bedzie na stronie? smile.gif
rozjedzie sie :/
trzeba tutaj zastosować parzystość i nieparzystość
konraddo
Jeśli chcesz korzystać z parzystości nieparzystości najprościej będzeie zrobic if'a z operacją modulo(%), który zwraca resztę z dzielenia
np. if($i%2 == 1)echo '<br clear="all"/>';
batman
Cytat(nexis @ 9.05.2008, 02:02:22 ) *
W temacie nazwałeś swój problem "zaawansowanym zapytaniem", a w opisanym problemie nie widzę niczego, co miałoby z tym coś wspólnego.

// Proszę o nie nabijanie postów.
// ~webdicepl

Co racja, to racja. Temat nie należy do najbardziej trafionych, ale zamiast bawić się moderatora należy to zgłosić.


@bemol
Proszę zmienić temat na taki, który będzie lepiej oddawał naturę Twojego problemu. Mała podpowiedź, to nie zapytanie jest zaawansowane, lecz html + css. A do tego nie zaawansowany, a podstawowy.
bemol
@batman powiedz mi więc co mam zrobić z html+css podstawowym? Co on mi pomoże?
Tutaj tylko i wyłącznie chodzi o poprawne zapytanie które wypisze mi rekordy jeden obok drugiego. Jeśli rekordów będzie nieparzysta ilość to ostatni rekord zostaje wycentrowany.
Zgadzam się z konraddo trzeba bardziej w ten sposób pokombinować smile.gif
Właściwie już rozwiązałem ten problem, więc można zamknąć.
Punkt dla konraddo.
batman
@bemol
1. Nie powinno wykonywać się zapytań w pętli.
2. HTML + CSS ( ewentualnie + jedna instrukcja warunkowa) załatwi Twój problem, wystarczy nieco pokombinować.
3. Tematu nie zamykam, ponieważ podejrzewam, że jeszcze będziesz miał jakieś pytania.
4. Zmieniam tytuł tematu.
bemol
Hmmm, temat nie bardzo odpowiada ale ok. Poradzilem sobie z zapytaniem, teraz jednak chodzi o wyświetlanie.

Skrypt wygląda obecnie tak:
  1. <?php
  2. include "admin/Engine.php";
  3. include "admin/Globals.php";
  4.  
  5. error_reporting(E^ALL & NOTICE);
  6.  
  7. $Db = new Engine(HOST, USER, DBPASSWORD, NAME);
  8.  
  9. if ( $Db->IsConnected ) {
  10.  
  11. $Db->Query("SELECT Gallery.*, Photos.* FROM Gallery LEFT JOIN Photos ON Gallery.Gallery
    ID=Photos.PhotoGalleryID ORDER BY GalleryDescription, PhotoDescription"
    );
  12.  
  13. while ( $Row = $Db->FetchAssoc() ) {
  14.  
  15. }
  16. }
  17.  
  18. $Db->Close();
  19.  
  20. ?>


W pętle while trzeba wpisać konstrukcje foreach, tylko kompletnie nie wiem jak się za to zabrać :/

Proszę o pomoc, ale nie w postaci odnośników do kursów w których są opisane wielowymiarowe tablice asocjacyjne, bo czytalem i nie zakumałem, tym bardziej, że w tym przypadku jest to wypisanie danych z bazy.
nospor
Cytat
W pętle while trzeba wpisać konstrukcje foreach, tylko kompletnie nie wiem jak się za to zabrać :/
Jaki foreach, poczym? Whilem iterujesz po zapytaniu, a foreachem to po czym chcesz iterowac bo nie rozumiem.
bemol
nie mam pewnosci ze to jest dobrze, ale wydaje mi sie ze whilem wypisuje wszystkie wartosci do tablicy asocjacyjnej. Teraz z tej tablicy musi posortować i przypisac odpowiednie dane do odpowiedniego GalleryID, tak żeby GalleryID posiadało nazwe(GalleryDescription), tresc(GalleryContent) i zdjecia(PhotoID - kazde zdjecie ma przypisane w bazie PhotoGalleryID, czyli kazde zdjecie jest przypisane do konkretnej galleri, oraz PhotoDescription wyswietlane w znaczniku img alt="PhotoDescription", oraz ID zdjecia, ktore odpowiada nazwie konkretnego pliku).
byc moze zawile to tlumacze ale mam nadzieje ze ktos zrozumie ;p
piotrekkr
cos takiego:
  1. <?php
  2. $Db->Query("SELECT Gallery.*, Photos.* FROM Gallery LEFT JOIN Photos ON Gallery.Gallery
    ID=Photos.PhotoGalleryID ORDER BY GalleryID, PhotoID"
    );
  3.  
  4. $galleries = array();
  5. while($aRow = $Db->FetchArray()){
  6. $galleries[$aRow['GalleryID']] = array(
  7. 'GalleryDate' => $aRow['GalleryDate'], 
  8. 'GalleryDescription' => $aRow['GalleryDescription'], 
  9. 'GalleryContent' => $aRow['GalleryContent']);
  10. $galleries[$aRow['GalleryID']]['photos'][] = array(
  11. 'PhotoID' => $aRow['PhotoID'], 
  12. 'PhotoDate' => $aRow['PhotoDate'], 
  13. 'PhotoGalleryID' => $aRow['PhotoGalleryID'], 
  14. 'PhotoDescription' => $aRow['PhotoDescription']);
  15. }
  16.  
  17. foreach($galleries as $gallery_content){
  18. echo '<div><b>'.$gallery_content['GalleryDescription'].'</b></div>';
  19. echo '<div>'.$gallery_content['GalleryContent'].'</div>';
  20. echo '<br />';
  21. foreach($gallery_content['photos'] as $photo){
  22. echo '<img src="photos/thumbs/'.$photo['PhotoID'].'.jpg" alt="'.$photo['PhotoDescription'].'" />';
  23. }
  24. }
  25. ?>
bemol
wyświetla prawie dobrze, tylko zamiast trzech zdjęć galerii Okna wyświetla 1 - ostanie :/
czy ktoś znalazł jakiś błąd?
prosze o pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.