Schleifen in HTML Tabellen

kosovafan

Erfahrenes Mitglied
Hallo,

ich frage mich wie gebe ich Schleifen in Tabellen wieder. Ich habe mein Portfolioscript jetzt soweit das aus den Arrays gerechnet wird und alle Daten zurzeit in ein <ul><li> Konstrukt geschrieben werden. Das lässt sich aber nicht richtig formatieren, weil eine Tabellenzeile rot sein soll bei negativen Werten und grün bei positiven. Das lässt sich am besten über eine Tabelle regeln, aber ich bekomme es einfach nicht hin die korrekt auszugeben.

Die Tabelle ist zurzeit folgend aufgebaut.

Unternehmen | Kaufdatum | Kaufkurs

Ich bin zurzeit bei folgenden Stand:

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
require_once ("inc/calc/function.inc.php");
require_once ("inc/calc/array.inc.php");

echo "<table>\n";
echo "<tr>\n";
echo "<td>Unternehmen</td>\n";
echo "<td>Kaufdatum</td>\n";
echo "<td>Kaufkurs</td>\n";
echo "</tr>\n";

    $i = 0;
    // Unternehmen ausgeben
    // Hier wird es ja noch richtig angezeigt, alle schön unter Unternehmen
    foreach ($unternehmen as $comp) {
        echo "<tr><td>$comp</td></tr>";
    }

    echo "<tr>\n";
    // Kaufdatum
    //Ab hier geht irgendwie nichts mehr
    foreach ($kaufdatum as $buydate) {
        echo "<td>$buydate</td>\n";
    }
    echo "</tr>\n";

    // Kaufkurs
    foreach ($kaufkurs as $buyquote) {
        echo "<td>$buyquote</td>\n";
    }
    echo "</tr>";
    $i++;
echo "</table>";
?>

Ich weiß wie die Tabelle aufgebaut ist, aber ich verstehe nicht wie ich diese in Schleifen umsetze. Ich habe mit tr und td ohne Ende probiert.

Hat hier jemand Rat? Vielen Dank!


MFG
Silvio
 
Mal davon abgesehen das deine Zellen nicht mit denen der Zeilen übereinstimmen sollten wir noch wissen wie die Tabelle richtig aussehen sollte.

PHP:
echo "<tr>\n";
echo "<td>Unternehmen</td>\n";
echo "<td>Kaufdatum</td>\n";
echo "<td>Kaufkurs</td>\n";
echo "</tr>\n";

So wie du es machst, müsstest du warscheinlich mehrere Tabellen verschachteln, da du einzelne Arrays für jede Kategorie hast.
 
Wenn man jetzt wüßte wie die Tabelle aussehen soll und wofür die einzelnen Variablen stehen, dann wäre es sicher einfacher zu helfen.
 
Du kannst eine IF Anweisung hinzufügen.
Mit der IF Anweisung überprüfst Du dann einen Wert. Wenn der Wert negativ ist, fügt der in ein Element die class="darkred" und gibt die restlichen Werte, des Datensatzes, aus.
Im anderen Fall ist class="darkgreen".

Um das gesamte Verfahren zum bearbeiten leichter zu gestalten kannst Du auch eine Variable einfügen, die gleich heißt. Diese ist dann entweder class="darkred" oder class="darkgreen"
Dieses Verfahren ist sinnvoll, wenn Du dir mit der Farbauswahl nicht sicher bist, oder in Zukunft mind 1 weiteres Layout anbieten möchtest.

Das ganze an einem Beispiel festgemacht:
PHP:
    foreach ($unternehmen as $comp) {
if ($kaufkurs < 0) {
 $color = 'class="darkred"';
} elseif ($kaufkurs >= 0) {
 $color = 'class="darkgreen"';
} else {
 echo "Unbekannter Wert!";
}
        echo "<tr><td ".$color.">$comp</td></tr>";
    }

EDIT: Da mir unbekannt ist, welcher Wert, nach den Optionen negativ & positiv, überprüft werden soll, habe ich der Logik nach den Kaufkurs gewählt.
 
Hallo,


hier die Tabelle als HTML Gerüst wie diese aussehen soll:

HTML:
 <table>
    <tr>
        <td>Unternehmen</td>
        <td>Kaufdatum</td>
        <td>Kaufpreis</td>
    </tr>

    <tr>
        <td>Beiersdorf</td>
        <td>03.01.2011</td>
        <td>41,31 EUR</td>
    </tr>

    <tr>
        <td>Deutsche Bank</td>
        <td>03.01.2011</td>
        <td>39,56 EUR</td>
    </tr>

    <tr>
        <td>Deutsche Börse</td>
        <td>03.01.2011</td>
        <td>52,69 EUR</td>
    </tr>

    <tr>
        <td>Eon</td>
        <td>03.01.2011</td>
        <td>23,05 EUR</td>
    </tr>

    <tr>
        <td>RWE</td>
        <td>03.01.2011</td>
        <td>50,40 EUR</td>
    </tr>
 </table>

Die Werte der Variablen:

PHP:
<?php
$unternehmen = array("Beiersdorf", "Deutsche Bank", "Deutsche Börse", "E.ON", "RWE");
$kaufdatum = array("03.01.2011", "03.01.2011", "03.01.2011", "03.01.2011", "03.01.2011");
$kaufkurs = array("41.31", "39.56", "52.69", "23.05", "50.40");
?>

Die Kaufkurse werden später entweder direkt von der Yahoo API übernommen oder aus dem entsprechenden CSV File.

Nur ich habe wirklich probiert wie ich das mit Tabellen hinbekommen soll, mit <ul> klappt das.

Wie macht man das aber mit Tabellen? Ist für mich echt ein Rätzel. Würde mich freuen. Suche im Internat brachte mich immer nur auf Mysql Anwendungen.

Vielleicht mal nach foreach <table> suchen, vielleicht ergibt das etwas.

MFG
Silvio
 
PHP:
// Wir gehen davon aus, das alle drei arrays die gleiche Anzahl an Elementen haben und auch die Reihenfolge stimmt

echo "<table>
<tr>
  <th>Unternehmen</th>
  <th>Kaufdatum</th>
  <th>Kaufpreis</th>
</tr>
";
for($i = 0; $i < count($unternehmen); $i++)
{
  echo "<tr>
  <td>" . $unternehmen[$i] . "</td>
  <td>" . $kaufdatum[$i] . "</td>
  <td>" . $kaufkurs[$i] . "</td>
</tr>
";
}

echo "</table>";
 
Zuletzt bearbeitet:
Hallo,

das ist ja super, vielen Dank. War mein Gedanke mit for doch nicht so schlecht, aber verworfen weil ich nicht wirklich ans Ziel kam. Das td sollte geschlossen werden. Vielen vielen Dank.

PHP:
echo "<table>
<tr>
  <td>Unternehmen</td>
  <td>Kaufdatum</td>
  <td>Kaufpreis</td>
</tr>
";
for($i = 0; $i < count($unternehmen); $i++)
{
  echo "<tr>
  <td>" . $unternehmen[$i] . "</td>
  <td>" . $kaufdatum[$i] . "</td>
  <td>" . $kaufkurs[$i] . "</td>
</tr>";
}

echo "</table>";


MFG
Silvio
 
Zuletzt bearbeitet:
Ja, ich hatte versehentlich die HTML-Abschluss-Tags für Tabellen-Zelle <td> statt </td> notiert, ist jetzt korrigiert.
 
Hallo,

kein Problem, konnte man ja ohne Probleme finden. Ich habe jetzt die Tabelle komplett fertig, das sieht doch super aus. Jetzt lässt sich das ganze angenehm formatieren. Jetzt noch irgendwie die CSV in das Array packen so das jeweils die aktuellen Kurse in der Tabelle stehen und gut ist es. Aber hier scheint hatte ich schon array_funktionen gefunden. Den $a = array("funktion(BEI.DE") brachte nicht den Erfolg. Aber das wird sich finden lassen.


Danke auf jeden Fall, die Tabelle war trotz einfachen Aufbau echt nicht in die Schleife zu bringen, oder mir fehlt es am logischen Denken.

Silvio

Silvio
 
Hallo,

eine Frage habe ich noch. Ich lese das csv File von Yahoo mit file ein, weil wie ich gelesen habe daraus direkt ein Array gebildet wird. Soweit funktioniert das auch, aber wenn ich die Werte dann in der Tabelle darstelle kommt die Meldung "Notice: A non well formed numeric value encountered", was genau den Array betrifft.

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
require_once ("inc/calc/function.inc.php");
require_once ("inc/calc/array.inc.php");


// Yahoo Kurse einlesen
$file = file("quotes.csv");

// Yahoo Kurse berechnen
$wert = array_map("mp", $anzahl, $file);

echo "<table>\n
<tr>\n
  <td>Unternehmen</td>\n
  <td>Kaufdatum</td>\n
  <td class=\"right\">Kaufpreis</td>\n
  <td class=\"right\">Anzahl</td>\n
  <td class=\"right\">Kaufwert</td>\n
  <td class=\"right\">Preis</td>\n
  <td class=\"right\">Dividende</td>\n
  <td class=\"right\">Zeitwert</td>\n
  <td class=\"right\">Gewinn</td>\n
  <td class=\"right\">GuV/%</td>\n
</tr>\n
";

for($i = 0; $i < count($unternehmen); $i++)
{
echo "<tr>\n";
echo "<td>" . $unternehmen[$i] . "</td>\n";
echo "<td>" . $kaufdatum[$i] . "</td>\n";
echo "<td class=\"right\">" . $anzahl[$i] . "</td>\n";
echo "<td class=\"right\">" . $kaufkurs[$i] . "</td>\n";
echo "<td class=\"right\">" .number_format($kaufwert[$i], 2, ',', '.')."</td>\n";

// Yahoo Kurse aus dem CSV File
echo "<td class=\"right\">" .number_format($file[$i], 2, ',', '.')."</td>\n";
echo "<td class=\"right\">" . $dividende[$i] . "</td>\n";

// Berechnung mit den Yahoo Kursen aus dem CSV File
echo "<td class=\"right\">" .number_format($wert[$i], 2, ',', '.')."</td>\n";

if($gewinn[$i] > 0) {
echo "<td class=\"pos\">" .number_format($gewinn[$i], 2, ',', '.')."</td>\n";
}

else {
echo "<td class=\"neg\">" .number_format($gewinn[$i], 2, ',', '.')."</td>\n";
}

if ($prozent[$i] > 0) {
echo "<td class=\"pos\">" .number_format($prozent[$i], 2, ',', '.')."</td>";
}else {
echo "<td class=\"neg\">" .number_format($prozent[$i], 2, ',', '.')."</td>";
}
echo "</tr>";
}
echo "</table>\n";

?>

Code:
// Yahoo CSV 
44.34
41.25
52.61
19.325
38.07

Ich verstehe die Meldung nicht, den das number_format, ich denke die Meldung meint das, regelt doch nur die deutsche Ausgabe mit zwei Kommastellen.

Hat hier jemand ein Tipp?

Silvio
 
Zurück