• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ausgabe aus Datenbank

lascaux

Mitglied
Hallo,

ich habe eine Datenbank wo DJs gespeichert sind und diese dann alle auf einer Seite gelistet sind:

Code:
mysql_connect($mysql_host,$mysql_user,$mysql_pass);      
mysql_select_db($mysql_data);
      
$query  = mysql_query("SELECT kuenstlername,land,bundesland,musikstil1,musikstil2,bild1 FROM ".$mysql_tdjs." ORDER BY land,bundesland,kuenstlername");
      
while($data = mysql_fetch_assoc($query)) {
  if(empty($data['musikstil2'])) {
     $ms2 = "<br />";
      } else {
        $ms2 = "<span>".$data['musikstil2']."</span><br />";
      }
      
  echo "
    <div class=\"singledj\">
      <a href=\"\" title=\"".$data['kuenstlername']."\"><img src=\"".$data['bild1']."\" alt=\"".$data['kuenstlername']."\" height=\"225\" width=\"150\" /></a><br />
      <strong>".$data['kuenstlername']."</strong><br />
      <span>".$data['musikstil1']."</span><br />
      $ms2
      <span class=\"bundesland\">[ ".$data['bundesland']." ]</span><br />
      <span>- ".$data['land']." -</span>
      <br /><br /><br />
    </div>";

Code:
.singledj {  
  width: 190px;
  float: left;
  font-size: 12px;
  text-align: center;
}


.singledj img {
  border: none;
}


.singledj strong {
  line-height: 1.9;
  font-size: 14px;
  font-weight: bold;
  color: #f90;
}


.singledj span {
  font-size: 11px;
  color: #7F4C00;
}


.singledj span.bundesland {
  line-height: 1.9;
}

Die Ausgabe erfolgt zwar, doch leider habe ich da ein kleines grafisches Problem. Ich denke jedoch, dass es an meiner PHP-Ausgabe liegt, da ich schon versch. Möglichkeiten in CSS ausprobiert habe.

Ich habe die Breite des übergeordneten DIVs auf 950px eingestellt, so dass genau 5 DJs in einer Reihe angezeigt werden. Geplant war, dass nach dem 5. DJ ein automatischer Umbruch kommt (5 x 190px = 950px) und es dann eine Zeile drunter weitergeht.

Doch leider ist die Theorie anders als die Praxis. Es werden 5 DJs in einer Reihe angezeigt, dann folgt die 6. Reihe wo ein einzelner DJ angezeigt wird, jedoch rechtsbündig - da erfolgt dann ein erneuter Umbruch und es werden unter dem 6. Einzelnen DJ 5 weitere in einer Reihe angezeigt usw.

Hier kann man es anschauen underground|performer


Kann mir da jemand vielleicht weiterhelfen?

lascaux
 
Ich kenn so unliebsame Effekte bei float, wenn die Gesamtbreite der Float-Elemente die Breite des einhüllenden Elemente übersteigt. Beschränk doch mal die Größe der DJ-Bilder zum Test mal auf 100x100 oder 60x60 oder so. Zu deiner Bildbreite (von derzeit 150) kommen ja noch die Leerräume. Ich mach auch immer für eine Zeile (also nach 6 Bildern) ein neues Div auf (was man sich eventuell sparen kann).
 
Zuletzt bearbeitet:
Die Zwischenräume sind beabsichtigt, so dass ich keine 'Trenner' einbauen muss.

Dass ich nach jedem 5. DJ eine neue Zeile anfange, habe ich auch schon überlegt, allerdings muss es auch so gehen, es wäre für mich höchstens eine Notlösung.

Allerdings nutze ich als Ausgabemethode mysql_fetch_assoc was es für mich verkompliziert (da ich mich nicht sonderlich gut in PHP auskenne).

Gibt es eine Alternative zu dem Vorschlag von NetAktiv?

lascaux
 
Mir ist schon klar, dass die Trenner beabsichtigt sind, ich wollte dich ja auch nur darauf hinweisen, dass du die bei der Breite berücksichtigen musst. Die Notlösung ist ja kaum schwer einzubauen, wenn du einfach einen Zähler in die Loop machst und dann eine Division Mudulo x (x=Anzahl der gewünschten Bilder), siehe http://php.net/manual/de/language.operators.arithmetic.php. Immer wenn Ergebnis=0, dann machst in der Loop am Anfang bzw. Ende ein echo "<div>" bzw </div>. Ich hab auch bei solch regelmäßigen Matrix-Anordnungen keine Probleme, eine Tabelle zu verwenden und dann nach x <td> eine neue <tr> zu machen. OK, ich höre die Aufschreie, das Table für Layout nicht genommen werden soll, aber ein Beispiel ist bei mir Mühlespiel - Turniere/Berichte EM 2006
 
Die sind bei der Breite berücksichtigt worden ;)

Das Bild hat die Breite 150px mit jeweils 20px Abstand nach links und rechts; das Div in dem das Bild liegt hat eine Breite von 190px - von daher passt das alles schon;

Ich dachte eigentlich eher an soetwas wie, dass das 5. Div in einer Reihe einen zusätzlichen CSS-Tag bekommt: clear: both;

Allerdings weiß ich nicht wie ich das bewerkstelligen soll, wie gesagt: mit PHP kann ich nicht so gut, meine Stärken liegen eher im Design (HTML & CSS).. Da bekomm ich zu 99% das hin was ich mir vornehme.. Vorausgesetzt die Website ist Statisch und nicht Dynamisch.

Ich frage zwar ungerne danach weil ich selbst auf die Lösung kommen möchte, aber ich schaffs nicht.. also:

Kannst du mir ein Beispiel geben wie ich das machen kann?


PS: Tabellen haben im Layout nichts verloren - ja. Aber ich für meinen Teil denke, dass es bei Datenausgaben die Tabellarisch dargestellt werden vernünftig ist. Sei es Daten oder Bilder. Für mein Layout möchte ich jedoch weitestgehend Tabellenfrei bleiben und mich einzig und allein auf Div-Boxen konzentrieren was Datenausgabe betrifft.
 
etwa so
PHP:
$anzahl  = 5
$counter = 0;
while (...) {
    $counter++;     //Zähler hoch
    $rest = $counter % $anzahl  //Modulo $anzahl teilen
    if ($rest == 0) echo "Beim $anzahl. am Anfang";
    echo "Hier mein Code für Bild Nummer $counter";
    if ($rest == 0) echo "Beim $anzahl. am Ende";
}

Nachtrag: Mir fiel noch auf, dass du was andres viel kürzer schreiben kannst
PHP:
$ms2 = ((empty($data['musikstil2'])) ? '' : "<span>".$data['musikstil2']."</span>")  . "<br />"
Schau dir das Konstrukt
PHP:
$var = (bedingung) ? true-teil : false-teil;
mal an, es macht etliche if-then-else sehr elegant und kurz, wenn anhand der Bedingung nur einen Wert setzen will.
 
Zuletzt bearbeitet:
Ging ja schnell mit der Antwort :)

Danke schonmal im Voraus, ich versuche es mal gegen später einzusetzen.

Ich habe noch eine Frage:

Ich möchte, dass wenn ich auf ein DJ-Bild klicke, dass kleines Fenster aufgeht wo die genaueren Daten des DJs nochmal zu sehen sind. Im Link verbaut, ist der DJ-Name, so dass ich ihn per MySQL auslesen kann. Z.b <a href=\"#".$data['kuenstlername']."\"> ergibt dann als ausgabe http://blablubb.com/#DjName.

Durch ein wenig stöbern im Internet, habe ich die Funktion parse_url gefunden und hab auch schon eine klare Vorstellung wie ich das einsetzen muss:

parse_url($url, PHP_URL_FRAGMENT);

Allerdings scheitere ich an der Tatsache, die URL auszulesen, so dass ich sie als http://blablubb.com/#DjName in die Variable $url verpacken und auswerten kann.

Mit PHP_SELF komm ich nicht weiter =/
 
Du hast serverseitig keine Möglichkeit, an den Fragment Identifier zu kommen. Den schickt der Client nicht mit.
 
Sorry, ich habe den Thread nur überflogen. Was meinst du mit „Argument“? URL-Parameter? Könntest du vielleicht einen Beispiel-URL posten und verdeutlichen, welche Informationen du erhalten möchtest?
 
An die Werte in der URL gelangst du über $_GET und der erhaltene String lässt sich bedarfsweise mit strtok() aufsplitten.
 
So geht's

Zusammenfassend sagen die vorherigen Einträge in etwa, dass du deinen Link wie folgt kodieren musst

HTML:
href="http://blablubb.com/index.php?dj=clicked-dj-name"

und in der index.php bekommst den DJ-Namen dann durch

PHP:
$djname = $_GET['clicked-dj-name'];
 
Zusammenfassend sagen die vorherigen Einträge in etwa, dass du deinen Link wie folgt kodieren musst

HTML:
href="http://blablubb.com/index.php?dj=clicked-dj-name"

und in der index.php bekommst den DJ-Namen dann durch

PHP:
$djname = $_GET['clicked-dj-name'];

Du meinst wohl:
PHP:
$djname = $_GET['dj'];

"clicked-dj-name" ist nur der wert von $_GET['dj'].

Hier ist ein gutes Tutorial, welches auch auf die Gefahren von GET-Variablen eingeht: Quakenet/#php Tutorial - de - GET
 
Zurück
Oben