Archiv verlassen und diese Seite im Standarddesign anzeigen : Ergebnisse horizontal anzeigen lassen.
Hallo.
Ich möchte gerne die Datenbankeinträge anderes darstellen.
Kann mir kurz jemand schreiben wie ich eine Tabelle horizontal angezeigt
bekomme, so dass die Daten in Blöcken nebeneinander und nicht
untereinander angezeigt werden?
echo "<table border='0', width='140'>";
echo nl2br ("<tr><td><hr style border='1px dotted #FC6053 width: 15px'>
<b>" . $event['datum'] . "\n</b> <b>Ort: <a href='$link'><font color='#98c9ec'>" . $event['ort'] . "\n</b>
<b>" . $event['name'] . "\n</b></a>
<a href='$link'><center>$htmlCode</center></a></td></tr>");
echo "</table>";
Vielen Dank
Schmeiß die \n und das nl2br raus. Dann stehen sie nebeneinander. Außerdem solltest du die einzelnen Punkte in separate tds packen.
Peter
Ich denke da haben wir uns missverstanden oder ich mich mal wieder zu
ungenau erklährt.
Innerhalb der Ausgabe sollen schon Zeilenumbrüche stattfinden, aber
von einem zum nächsten DB Eintrag hätte ich gerne eine horizontale Linie.
In etwas so:
Datum: | Datum:
Ort: | Ort:
Name: | Name:
Bild: | Bild:
Derzeit sieht es ja so aus:
Datum:
Ort:
Name:
Bild:
----------------
Datum:
Ort:
Name:
Bild:
Gruß
Wie sieht denn die Schleife für die Ausgabe aus? Packst du jeden Datensatz in eine eigene Tabelle? Das ist aus deinem bisherigen Code nicht ersichtlich.
Peter
AmicaNoctis 17-02-2010, 20:04 $rows = <alle Datensätze jeweils als assoziatives Array>;
$cols = <alle Spaltennamen>;
foreach ($cols as $name) {
echo("<tr>");
echo("<th>" . $name . "</th>");
foreach ($rows as $row) {
echo("<td>" . $row[$name] . "</td>");
}
echo("</tr>\n");
}
Hallo und danke für die Unterstützung!
Also ich habe das Script etwas abgeändert, da ich keine
Überschriften brauche.
$rows = array($event['datum'],$event['ort'],$event['name'],$htmlCode);
foreach ($rows as $row) {
echo("<tr>");
echo("<td>" . $row . "</td>");
}
echo("</tr>\n");
Leider habe ich noch nicht ganz das gewünschte Ergebnis.
Er schreibt mir zwar alles nebeneinander, macht aber im Block
keine Zeilenumbrüche und ohne nl2br geht mit Umbrüchen gar nix.
Doch auch mit nl2br bekomme ich die Infos nur untereinander.
Im Idealfall so es ja so aussehen:
(habe eine kleine Bilddatei angehängt)
AmicaNoctis 18-02-2010, 17:38 Dann verstehe ich dein Anliegen noch nicht, die Grafik hilft mir da auch nicht weiter.
Hmm!
Also derzeit sieht es so aus, dass er alle Werte neben einander
schreibt.
In diesem Fall so:
30.01.2010al-DenteGrünkohlwanderungBild07.02.2010al-DenteFrühstücks-BüffetBild
(Sorry für evt. Überlänge)
Mit einem nl12br sieht es so aus:
30.01.2010al-DenteGrünkohlwanderungBild
07.02.2010al-DenteFrühstücks-BüffetBild
Anbei noch mal 2 Dateien:
Originalzustand wie es vorher war und wünschenswerter Zustand.
Ich hoffe es ist mir jetzt etwas besser gelungen :-)
AmicaNoctis 18-02-2010, 18:06 Dann kannst du es doch mit der Variante machen, die ich gepostet hatte. Alles was daran geändert werden muss, ist das Styling der einzelnen Zellen in Bezug auf den Rahmen.
Probier's mal aus und setz border-top und border-bottom für die td-Elemente auf 0.
Hab ich ja gemacht in Post #6.
Nur halt ohne Überschrift, oder hab ich da was übersehen?
Das Ergebnis ist eine langer String und auf das \n reagiert er
überhaupt nicht.
Das Layout werde ich später im CSS generieren.
AmicaNoctis 18-02-2010, 18:26 Hab ich ja gemacht in Post #6.
Hast du nicht. Du hast $rows ja einfach umdefiniert, so dass $rows nur einen Datensatz enthält und $row ein Feld darin ist. In meinem Beispiel ist $rows aber ein Array von Datensätzen und $row ein einzelner Datensatz. Wenn du die Überschriften nicht wolltest, hättest du einfach die 6. Zeile entfernen müssen.
Ja du hast natürlich recht!
Wie bitte definiere ich diese Zeile richtig?
$cols = <alle Spaltennamen>;
Ich kriege es einfach nicht hin.
Ständig die Fehlermeldung:
Invalid argument supplied for foreach() in Zeile:
foreach ($cols as $name)!
Danke.
AmicaNoctis 18-02-2010, 19:29 Wie machst du es denn? MySQL, MySQLi oder PDO?
AmicaNoctis 18-02-2010, 19:38 $query = "select ... from ... where ...";
$result = $mysqli->query($query);
$cols = array();
foreach ($result->fetch_fields() as $field) {
$cols[] = $field->name;
}
$rows = $result->fetch_all(MYSQLI_ASSOC);
// der Rest ist bekannt
Langsam solltest du aber selbst ein bisschen Initiative zeigen...
Hallo und vielen Dank erstmal bis dato.
Irgendwie will es einfach nicht gelingen, habe das Skript jetzt
soweit, dass ich zumindestens eine Ausgabe ohne Fehler bekomme.
<?php
error_reporting(E_ALL); #zeig alle Fehler
ini_set('display_errors', '1');
require_once 'inc/login.inc.php';
$verbindung = @mysqli_connect($server, $benutzer, $passwort);
if ($verbindung){
mysqli_select_db($verbindung, $datenbank);
if(mysqli_error($verbindung)){
echo 'Fehler: ' . mysqli_error($verbindung);
} else {
$query = "select * from event order by datum DESC";
$result = mysqli_query($verbindung, $query);
$cols = array();
foreach ($result->fetch_fields() as $field) {
$cols[] = $field->name;
}
while($rows = mysqli_fetch_assoc($result)) {
$or = $rows['ort'];
$htmlCode = '<img src="event/img_get.php?id=' . $rows['ID'] . '"
width="100" height="70" alt="" />';
switch ($or) {
case 'al-Dente':
$link = 'al-dente-highlights.php';
break;
case 'Medleys':
$link = 'medleys-events.php';
break;
case 'Club-Lounge':
$link = 'club-lounge-events.php';
break;
case 'Sport-Center':
$link = 'sport-center-events.php';
break;
default:
$link = 'index.php';
}
$rows = array($rows['datum'],$rows['ort'],$rows['name'],$htmlCode);
foreach ($cols as $name) {
echo("<tr>");
//echo("<th>" . $name . "</th>");
foreach ($rows as $row) {
echo("<td>" . $row[$name] . "</td>");
}
echo("</tr>\n");
}
// echo print_r($rows);
}
}
}
mysqli_close($verbindung);
?>
Nur leider ist das Ergebnis etwas, was ich leider nicht verstehe:
Folgende Zeile gibt er mir aus:
3aG< 3aG< 3aG< 3aG< 3aG< 3aG< 3aG< 3aG< 0aF< 0aF< 0aF<
0aF< 0aF< 0aF< 0aF< 0aF< 0SS< 0SS< 0SS< 0SS< 0SS< 0SS<
0SS<0SS<
Bin etwas ratlos.
Gruß
Hauser
AmicaNoctis 21-02-2010, 13:05 Also, wenn man dir schon funktionierende Beispiele gibt, darfst du die natürlich auch verwenden. Wenn du aber unbedingt deinen eigenen Kram draus machen musst und der dann nicht funktioniert, würde ich das einfach mal unter "Pech gehabt" einstufen.
Warum wechselst du immer zwischen prozeduraler und objektorientierter Notation hin und her? Warum denkst du immer noch, dass dein $rows und mein $rows dasselbe wäre? Ist es nicht! Dein $rows ist nur eine Row und mein $rows sind alle (fetch_all).
Sorry, aber mich regt das immer ein bisschen auf, wenn man jemandem schon Codeschnipsel gibt und der die dann kaputtändert und sagt: "geht nicht".
Gruß,
Amica
Hallo !
Ups ! Da ist mir wirklich ein Fehler unterlaufen. Die row Zeile sollte da eigentlich
gar nicht erscheinen.
Dennoch, ich habe mir dein Snippsel angesehen und natürlich getestet.
Leider bekam ich eine Fehler :
***Fehler:
Notice: Undefined variable: mysqli in C:\xampp\htdocs\index.php on
line 114
Fatal error: Call to a member function query() on a non-object in
C:\xampp\htdocs\index.php on line 114
114: $result = $mysqli->query($query);***
und habe versucht, das Script so anzupassen
das es evtl. doch noch aus eingener Kraft funktioniert.
Evtl. wäre es ja auch nur eine Kleinigkeit gewesen und ich hätte doch
das eine oder andere richtig gemacht.
Aber da bin ich wohl etwas über das Ziel hinausgeschossen.
Pech gehabt ! Korrekt !!!
Danke aber für deine Hilfe und vor allem deine Geduld mit mir.
Gruß
Hauser.
AmicaNoctis 21-02-2010, 13:49 Ersetze mein $mysqli durch deine $verbindung und probier's nochmal.
Jo, hab ich getan, jetzt hackt es hier:
$rows = $result->fetch_all(MYSQLI_ASSOC);
Fehlermeldung:
Fatal error: Call to undefined method mysqli_result::fetch_all() in..
onemorenerd 21-02-2010, 14:34 Du hast vermutlich nicht PHP 5.3.
Hallo !
Doch meine Version ist die 5.3.0.
Laut PHP.net soll das ja ab Version 5.0 unterstützt werden.
Gruß
Lass dir doch mal mit phpinfo(); ausgeben, ob mysqli überhaupt unterstützt wird.
Peter
AmicaNoctis 21-02-2010, 16:56 @Kropff: Muss es ja, sonst würde ja schon das mysqli_connect scheitern.
@Hauser: Poste mal bitte deinen aktuellen vollständigen Code.
Ja gerne:
<?php
error_reporting(E_ALL); #zeig alle Fehler
ini_set('display_errors', '1');
require_once 'inc/login.inc.php';
$verbindung = @mysqli_connect($server, $benutzer, $passwort);
if ($verbindung){
mysqli_select_db($verbindung, $datenbank);
if(mysqli_error($verbindung)){
echo 'Fehler: ' . mysqli_error($verbindung);
} else {
$query = "select * from event";
$result = $verbindung->query($query);
$cols = array();
foreach ($result->fetch_fields() as $field) {
$cols[] = $field->name;
}
$rows = $result->fetch_all(MYSQLI_ASSOC);
foreach ($cols as $name) {
echo("<tr>");
//echo("<th>" . $name . "</th>");
foreach ($rows as $row) {
echo("<td>" . $row[$name] . "</td>");
}
echo("</tr>\n");
}
echo print_r($rows);
}
}
mysqli_close($verbindung);
?>
AmicaNoctis 21-02-2010, 17:22 Und dabei kommt jetzt dieser Fehler "Call to undefined method mysqli_result::fetch_all()"?
Das finde ich zwar komisch, aber es lässt sich auch anders lösen:
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
Der Rest wie gehabt.
onemorenerd 21-02-2010, 18:16 mysqli_result::fetch_all() bzw. mysqli_fetch_all() gibt es nur mit mysqlnd. Das fehlt ihm vermutlich.
Ja das ist richtig.
Aber so wie es AmicaNoctis umformuliert hat ist es super, vielen Dank.
Ich würde gerne noch in diesem Zusammenhang eine Frage anschließen.
Ich lasse mir ja die Bilder wie folgt ausgeben:
$htmlCode = '<img src="event/img_get.php?id=' . $event['ID'] . '"
width="100" height="70" alt="" />';
Nun sieht das natürlich, wenn es sich um ein Hochkantbild handelt nicht
sehr schön aus.
Kann ich mit einem Zusatz im Script erreichen, dass er die Darstellung erkennt,
bzw. zwei Variablen zuordnen kann.
z.B.
Wenn Hochformat, dann height='100' width='70'
und
Wenn Querformat, dann height='70' width='100'.
Er müsste dann nur irgendwie wissen, wann er was anzuwenden hat.
Da gibt es doch sicherlich eine bessere Lösung.
Gruß
Hauser
AmicaNoctis 21-02-2010, 20:20 Du musst ja die Größe nicht von Hand angeben. Ohne width- und height-Attribute kriegt der Browser das schon selbst raus. Also: einfach weglassen.
Logo, vielen Dank, hat wunderbar geklappt !
Gruß
Hauser;)
|
-
- |