while-Schleife mit 2 Bedingungen
Sandra
- php
-1 Daniel0 sebastianbuege0 Maddin1 Axel Richter
Hi Forum,
die folgende while-Schleife soll so lange laufen, solange $history ODER $history_o Inhalt haben.
Leider funktioniert diese Schleife nicht. Irgendwas ist daran falsch und ich weiss nicht was.
while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
{
weiss jemand warum?
viele Grüße
Sandra
Hi,
while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
{
ja ich, das || durch && ersetzten, bei schleifen muss man etwas anders denken wie bei ner if-Abfrage, schließlich ist bei || immer true wenn eines schon true ist. verstehst?
MfG
Hi,
aber das && kann ich nicht setzen, da es auch sein kann, dass z.B nur $history_o Daten enthält und dann trotzde, die Schleife ausgeführt werden soll.
== ist auch falsch, da es ja kein Vergleich ist, sondern eine Zuweisung.
Hat evtl. noch jemand einen Tip?
vielen Dank
Sandra
Hi,
na dann mach für jedes seperat ne schleife.
Mfg
Hi,
ja das wäre schön wenn das mit den 2 Schleifen so einfach gehen würde.
genauere Erklärung:
ich habe einen Shop, mit einer DB-Tabelle für Innlandbestellungen und eine Tabelle für Auslandsbestellungen.
In der Bestellübersicht sollen alle Bestellungen, die aus beiden Tabellen gelesen werden, untereinander aufgelistet werden.
am besten sortiert nach Datum
das Script an dem ich arbeite hat bisher nur aus einer Tabelle gelesen. darin werden zuerst alle Bestellungen anhand der Kunden_id gezählt (count*). solange Bestellungen vorhanden sind, wird diese Tabelle dann nochmal ausgelesen.
Das Script ist leider so umfangreich sonst würde ich es hier posten.
hat jemand einen Link zu einem funktionierenden Beispiel, das Werte aus 2 Tabellen liest und die dann sortiert nach Bestelldatum untereinander auflistet?
ansonsten weiss ich nicht, wie ich hier die 2.Tabelle integrieren muss:
hier Beispiel-code für die ausgabe aus einer Tabelle, in welche noch die Werte aus der 2.Tabelle mit rein müssen:
if ($orders_total > 0)
{
$history_query_raw = "select o.orders_id, o.date_purchased, o.delivery_name, o.billing_name, ot.text as order_total, s.orders_status_name from " . TABLE_ORDERS . " o, " . TABLE_ORDERS_TOTAL . " ot, " . TABLE_ORDERS_STATUS . " s where o.customers_id = '" . (int)$customer_id . "' and o.orders_id = ot.orders_id and ot.class = 'ot_total' and o.orders_status = s.orders_status_id and s.language_id = '" . (int)$languages_id . "' order by orders_id DESC";
$history_split = new splitPageResults($history_query_raw, MAX_DISPLAY_ORDER_HISTORY);
$history_query = tep_db_query($history_split->sql_query);
while ($history = tep_db_fetch_array($history_query))
{
$products_query = tep_db_query("select count(*) as count from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$history['orders_id'] . "'");
$products = tep_db_fetch_array($products_query);
if (tep_not_null($history['delivery_name']))
{
$order_type = TEXT_ORDER_SHIPPED_TO;
$order_name = $history['delivery_name'];
} else
{
$order_type = TEXT_ORDER_BILLED_TO;
$order_name = $history['billing_name'];
}
....
dann folgt die Ausgabe in html:::::
...<td class="main" width="50%" valign="top"><?php echo '<b>' . TEXT_ORDER_DATE . '</b> ' . tep_date_long($history['date_purchased']) . '<br><b>' . $order_type . '</b> ' . tep_output_string_protected($order_name); ?></td>...
Wenn ich in diese DB-Befehle die 2.Tabelle mit einfüge, mischt er mir die Bestellung wild durcheinander. weiss jemand Rat?
viele Grüße
Sandra
yo,
Hat evtl. noch jemand einen Tip?
ich würde mit der funktion empty() innerhalb der schleifenprüfung arbeiten und die zuweisung in der while schleife machen.
Ilja
Hallo bin zwar nicht der super Programmierer
aber
while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
ist nur eine Zuweisung
meiner meinung nach müsste es richtig heißen:
while ($history == tep_db_fetch_array($history_query) || $history_o == tep_db_fetch_array($history_o_query) )
Gruß
Sebastian
Hallo Sandra,
Leider funktioniert diese Schleife nicht. Irgendwas ist daran falsch und ich weiss nicht was.
Was heißt denn "funktioniert ... nicht"?
Wird sie gar nicht durchlaufen? Oder immer?
while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
Mach doch mal die Zuweisungen vorher und laß Dir die Ergebnisse ausgeben. Vielleicht stimmt da schon was nicht.
Gruß,
Maddin
Hallo,
Leider funktioniert diese Schleife nicht. Irgendwas ist daran falsch und ich weiss nicht was.
while ($history = tep_db_fetch_array($history_query) || $history_o = tep_db_fetch_array($history_o_query) )
{
weiss jemand warum?
Eine OR (||) Verknüpfung wird optimiert (short-circuit) ausgeführt. Da sie TRUE ergibt, sobald der erste Wert TRUE ergibt, wird dann, wenn das so ist, der zweite Wert erst gar nicht mehr erstellt. Nur wenn der erste Wert FALSE ergibt, _muss_ der zweite Wert erstellt werden.
...
$history = tep_db_fetch_array($history_query);
$history_o = tep_db_fetch_array($history_o_query;
while ($history || $history_o)
{
//machwas
$history = tep_db_fetch_array($history_query);
$history_o = tep_db_fetch_array($history_o_query;
}
...
viele Grüße
Axel