Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Ergebnisse horizontal anzeigen lassen. [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Ergebnisse horizontal anzeigen lassen.


 
Hauser
17-02-2010, 17:54 
 
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

 
Kropff
17-02-2010, 18:06 
 
Schmeiß die \n und das nl2br raus. Dann stehen sie nebeneinander. Außerdem solltest du die einzelnen Punkte in separate tds packen.

Peter

 
Hauser
17-02-2010, 18:47 
 
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ß

 
Kropff
17-02-2010, 19:56 
 
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");
}

 
Hauser
18-02-2010, 17:30 
 
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.

 
Hauser
18-02-2010, 18:00 
 
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.

 
Hauser
18-02-2010, 18:20 
 
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.

 
Hauser
18-02-2010, 19:17 
 
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?

 
Hauser
18-02-2010, 19:32 
 
Mit mysqli.

 
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...

 
Hauser
21-02-2010, 12:37 
 
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

 
Hauser
21-02-2010, 13:44 
 
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.

 
Hauser
21-02-2010, 14:19 
 
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.

 
Hauser
21-02-2010, 15:03 
 
Hallo !

Doch meine Version ist die 5.3.0.

Laut PHP.net soll das ja ab Version 5.0 unterstützt werden.

Gruß

 
Kropff
21-02-2010, 16:16 
 
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.

 
Hauser
21-02-2010, 17:11 
 
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.

 
Hauser
21-02-2010, 20:17 
 
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.

 
Hauser
15-03-2010, 22:52 
 
Logo, vielen Dank, hat wunderbar geklappt !

Gruß
Hauser;)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:48 Uhr.