2012-04-01 3 views
0

Ich versuche PDO auf diese Weise zu verwenden und die Ausgabevorlage wiederverwenden:PDO while-Schleife Ausgabevorlage wiederzuverwenden

selected_products_show .= '<div class="'.$product_id.'">'.$product_name.'</div>'; 

Um für die beiden Abfragen verwendet werden, die da beide = 1 bestellt $ ausgeführt wird & $ Versand = 1. Das Problem ist im Ausgangsbereich:

<?php if ($ordered == 1) { echo $selected_products_show;}?> 
<?php if ($shipped == 1) { echo $selected_products_show;}?> 

$ selected_product_show wird von der zweiten Schleife überschreibt wo verschifft $ = 1. Wie kann ich die korrekte Abfrage (die jetzt passiert) herausziehen und die richtige Schleife mit der korrekten Variablenanzeige für diese Schleife anhängen (alles mit einer while-Schleife, während dieselbe Ausgabevorlage wiederverwendet wird)? Hier

ist der Code:

$ordered = 1; 
$shipped = 1; 

if ($ordered == 1) { 
$queryEnd = "WHERE product_id IN (?,?,?)"; 
} 
if ($shipped == 1) { 
$queryEnd = "ORDER BY product_id DESC LIMIT 5"; 
} 

$query = "SELECT product_id, product_name FROM products $queryEnd"; 

if ($ordered == 1) { 
$ordered_products = array(1,2,3); 
$selected_products = $dbh->prepare($query); 
$selected_products->execute($ordered_products); 
} 
if ($shipped == 1) { 
$selected_products = $dbh->prepare($query); 
$selected_products->execute(); 
} 

while($row = $selected_products->fetch(PDO::FETCH_ASSOC)){ 
    $product_id = $row["product_id"]; 
    $product_name = $row["product_name"]; 
    $selected_products_show .= '<div class="'.$product_id.'">'.$product_name.'</div>'; 
} 

<?php if ($ordered == 1) { echo $selected_products_show;}?> 
<?php if ($shipped == 1) { echo $selected_products_show;}?> 

Jede Idee, wie dies erreicht werden kann?

+0

@IhrCommonSense Wirklich? Warum das? Möglicherweise müssen Sie dieselbe exakte Ausgabe aus der while-Schleife wiederverwenden, jedoch mit anderen korrekten PDO-Anweisungen. Stellen Sie sich vor, Sie müssten 1.000 Zeilen Ausgabe ausgeben, und Sie müssten 3.000 Zeilen der gleichen genauen Zahl anstelle von 1.000 wiederholen. Ich denke tatsächlich, dass es in Situationen wie diesem effizienter ist. – Maverick

+0

@YourCommonSense Wie würdest du es dann richtig machen? – Maverick

+0

Ich würde meine Geschäftslogik (was das Abrufen und Vorbereiten von Daten betrifft) von der Anzeigelogik trennen (was das Anzeigen von Daten betrifft). Daher bleibt PDO im Geschäftslogikteil, während nur Daten in die Vorlage übertragen werden. Und natürlich würde ich Paginierung implementieren, um nur 100 Zeilen pro Seite anzuzeigen –

Antwort

1
function templating($selected_products){ 
    $selected_products_show = ''; 
    while($row = $selected_products->fetch(PDO::FETCH_ASSOC)){ 
     $product_id = $row["product_id"]; 
     $product_name = $row["product_name"]; 
     $selected_products_show .= '<div class="'.$product_id.'">'.$product_name.'</div>'; 
    } 
return $selected_products_show; 
} 

$ordered = 1; 
$shipped = 1; 
$queryMAIN = "SELECT product_id, product_name FROM products"; 

if ($ordered == 1) { 
    $query = $queryMAIN." WHERE product_id IN (?,?,?)"; 
    $ordered_products = array(1,2,3); 
    $selected_products = $dbh->prepare($query); 
    $selected_products->execute($ordered_products); 
    echo templating($selected_products); 
} 

if ($shipped == 1) { 
    $query= $queryMAIN." ORDER BY product_id DESC LIMIT 5"; 
    $selected_products = $dbh->prepare($query); 
    $selected_products->execute(); 
    echo templating($selected_products); 
} 

So ähnlich?

+0

Funktioniert perfekt mit dem neuen Schnitt! Vielen Dank für Ihre Hilfe! – Maverick

+0

Gern geschehen;) – egis

Verwandte Themen