Daten quer in Tabelle ausgeben
Florian Schmidt
- php
0 wahsaga0 Andreas Dölling
Hallo!
Ich habe eine vielleicht ganz simple Frage, habe aber wahrscheinlich ein Brett vor dem Kopf:
Ich ziehe mittels SQL und PHP Daten aus einer Oracle-DB, die ich nun in einer Tabelle ausgeben möchte. Nun sollen diese aber nicht untereinander sondern nebeneinander ausgegeben werden. Ich habe insgesamt 3 Werte.
Hier mein Code:
OCIExecute($Stmt);
while (OCIFetch($Stmt, ""))
{
$spalte2=OCIResult($Stmt,"ID_VV_REE_ENTSCHW_IST");
$spalte3=OCIResult($Stmt,"SOLLWERT");
$spalte4=OCIResult($Stmt,"ANZAHL_SCHMELZEN");
$spalte5=OCIResult($Stmt,"ABWEICHUNG");
echo "<td align="center">";
echo " $spalte2";
echo "</td><td align="center">";
echo " $spalte3";
echo "</td><td align="center">";
echo " $spalte4";
echo "</td><td align="center">";
echo " $spalte5";
echo "</td></tr>";
}
echo "</table>";
Frage:
Wie muß ich den Code nun ändern, damit die (zusammenhängenden) Daten nebeneinander ausgegeben werden?
Das Ganze soll in etwa so aussehen:
spalte2 spalte2 spalte2
spalte3 spalte3 spalte3
spalte4 spalte4 spalte4
Danke im Voraus.
Gruß
Florian
hi,
Wie muß ich den Code nun ändern, damit die (zusammenhängenden) Daten nebeneinander ausgegeben werden?
Das Ganze soll in etwa so aussehen:spalte2 spalte2 spalte2
spalte3 spalte3 spalte3
spalte4 spalte4 spalte4
da dir jeder datensatz ja nur jeweils einen wert für spalte2, spalte3 und spalte4 liefert, ist es nicht so ohne weiteres möglich, dass direkt in der schleife über das abfrageergebnis zu machen.
vorschlag: lege dir zuerst die werte aller datensätze in einem zweidimensionalen array ab, und "drehe" dieses dann um 90° - durch vertauschen der indizes und ggf. ihrer laufrichtung.
gruß,
wahsaga
Hallo!
Ich habe das jetzt wie folgt gelöst:
$array1=array();
$array2=array();
$array3=array();
$i=0;
OCIExecute($Stmt);
while (OCIFetch($Stmt, ""))
{
$i++;
$array1.=OCIResult($Stmt,"SOLLWERT");
$array1.=" ";
$array2.=OCIResult($Stmt,"ANZAHL_SCHMELZEN");
$array2.=" ";
$array3.=OCIResult($Stmt,"ABWEICHUNG");
$array3.=" ";
}
echo "</table>";
echo "<br><br>";
echo $array1;
echo "<br>";
echo $array2;
echo "<br>";
echo $array3;
Jetzt habe ich nur noch das Problem, daß beim 1. Mal je Array angezeigt wird, also so:
Array Datensatz1 Datensatz2 ......
Array Datensatz1 Datensatz2.....
Wie kann ich das noch unterbinden???
Danke im Voraus.
Gruß
Florian
hi,
Ich habe das jetzt wie folgt gelöst:
sorry, aber - grausig!
$array1=array();
wenn du hier diese variable als array deklarierst -
$array1.=OCIResult($Stmt,"SOLLWERT");
warum benutzt du sie dann hier wie einen einfachen string, an den du mit dem .-operator einen weiteren anhängst?
gruß,
wahsaga
Vielleicht habe ich dann Deine erste Antwort nicht richtig verstanden. Kannst Du mir das dann etwas DAU- freundlicher erklären?
Danke...
Gruß
Florian
hi,
Vielleicht habe ich dann Deine erste Antwort nicht richtig verstanden. Kannst Du mir das dann etwas DAU- freundlicher erklären?
in der schleife über das ergebnis alle datensätze in ein zweidimensionales array mit nummerischen indices packen:
$array = array();
$zaehler = 0;
while(...) {
$array[$zaehler] = array();
$array[$zaehler][0] = $spalte1;
$array[$zaehler][1] = $spalte2;
$array[$zaehler][2] = $spalte3;
$zaehler++;
}
und ein solches zweidimensionales array durch zwei verschachtelte schleifen wieder ausgeben zu lassen, sollte ja kein großes problem sein - am einfachsten vielleicht mit zwei for-schleifen, wenn man vorher die dimensionen bestimmt:
for($y=0; $y < $zeilenzahl; $y++) {
for($x=0; $x < $spaltenzahl; $x++) {
echo $array[$y][$x].' | '; // beispiel ohne HTML-tags, mit trennzeichen
}
echo "\n";
}
so, das gibt das ganze natürlich immer noch "zeilenweise" aus.
wie sich das ändert, wenn du jetzt mal die indices bei $array[$y][$x] vertauschst und/oder einen von ihnen rückwärts laufen lässt, kannst du ja mal ausprobieren ...
gruß,
wahsaga
Hallo,
ich würde mir die Ausgaben in datenspaltenbezogenen Variablen zwischenspeichern und das endgültige HTML hinterher ausgeben.
Etwa so:
$html_col1 = '';
$html_col2 = '';
$html_col3 = '';
while (OCIFetch($Stmt, "")) {
//...
$html_col1 .= '<td>'.$value_col1.'</td>';
$html_col2 .= '<td>'.$value_col2.'</td>';
$html_col3 .= '<td>'.$value_col3.'</td>';
}
$html = '<table>';
$html .= '<tr>'.$html_col1.'</tr>';
$html .= '<tr>'.$html_col2.'</tr>';
$html .= '<tr>'.$html_col3.'</tr>';
$html .= '</table>';
echo $html;
Habe ich Dich richtig verstanden?
Ein Nachteil des obigen Ansatzes ist allerdings, daß das HTML so semantisch nicht ganz korrekt eingesetzt würde.
Daher wäre alternativ zu überlegen, ob Du nicht zunächst von der XHTML-Semantik ausgehend die passende Ausgabe zusammenbaust und sie dann mit CSS-Stylesheets so formatierst, wie Du das haben möchtest.
Aber vielleicht gibt es aus dem Forum auch noch ganz andere Vorschläge.
Ciao,
Andreas