2017-11-14 5 views
1

Ich habe Probleme mit der Reihenfolge der Ausgabe einer gespeicherten Prozedur (MariaDB). Ich habe diese verschiedenen Möglichkeiten ausprobiert und jedes Echo Ergebnis-Set zeigt das gleiche Problem. (Ich konnte es nicht mit procedural/mysqli auflösen, also das Projekt in PDO neu machen, und jetzt ist das gleiche Problem entstanden.) Das ist episch, also danke an alle, die lesen.PHP-Ausgabe echo out of order

Ich versuche, einen form-letter Bericht für jedes Mitglied in der Ergebnismenge zu erstellen, mit einer Einführung und einer Tabelle der Gebühren, die diesem Mitglied zugeordnet werden.

So würde ich erwarten, zu sehen:

Intro für das Mitglied 1,
Tabelle für das Mitglied 1;
Intro für Element 2,
Tabelle für Element 2; und so weiter.

Das Problem ist, dass ich sehe:

Intro für das Mitglied 1,
Intro für Mitglieder 2,
Tabelle für das Mitglied 1,
Intro für das Mitglied 3,
Tabelle für das Mitglied 2,
Intro für Element 4,
Tabelle für Element 3; und so weiter.

Genannt gespeicherte Prozedur:

SELECT * FROM `View_Accounts_report` WHERE `Date` >= parameter_start_date AND `Date` <= parameter_end_dated 

Anruf an die Ausgangsfunktion innerhalb html:

if(isset($_REQUEST['submit'])) { 
     Accounts_by_date($_REQUEST['start_date'], $_REQUEST['end_date']); 
    } 

PHP-Funktion Accounts_by_date Methode 1:

function Accounts_by_date($start_date, $end_date) { 
     require '../lib/pdo.php'; 


$prev = NULL; 

$sql = "CALL accounts_report_dates (:start_date, :end_date)"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindValue(':start_date', $start_date); 
$stmt->bindValue(':end_date', $end_date); 
$stmt->execute(); 

$results = $stmt->fetchALL(PDO::FETCH_ASSOC); 

var_dump($results); 

$arrlength = count($results); 

for ($row = 0; $row < $arrlength; $row++) { 

    $person = $results[$row]['Member_ID']; // tracking each row 

    if ($person != $prev) { // if the current member is different from the previous member, print header and row 

// table headers 

     echo "<br><br>Member: " . $results[$row]['Member_name'] . "<br>"; 
     echo "Dear " . $results[$row]['First_name'] . ",<br>"; 
     echo "Please find your Belmont Pottery Group fees for the period " . $start_date . " to " . $end_date . " below. <br>"; 
     echo "<br><table><tr><th>Total</th><th>Member_ID</th><th>Date</th><th>Transaction</th><th>Amount</th>"; 
     echo "<th>First name</th><th>Email</th><th>Member name</th></tr>"; 

// table rows 

     echo "<tr><td>" . $results[$row]['Total'] . "</td>"; 
     echo "<td>" . $results[$row]['Member_ID'] . "</td>"; 
     echo "<td>" . $results[$row]['Date'] . "</td>"; 
     echo "<td>" . $results[$row]['Transaction'] . "</td>"; 
     echo "<td>$" . $results[$row]['Amount'] . "</td>"; 
     echo "<td>" . $results[$row]['First_name'] . "</td>"; 
     echo "<td>" . $results[$row]['Email'] . "</td>"; 
     echo "<td>" . $results[$row]['Member_name'] . "</td></tr>"; 

     $prev = $person; 

    }else{ 

     echo "<tr><td>" . $results[$row]['Total'] . "</td>"; 
     echo "<td>" . $results[$row]['Member_ID'] . "</td>"; 
     echo "<td>" . $results[$row]['Date'] . "</td>"; 
     echo "<td>" . $results[$row]['Transaction'] . "</td>"; 
     echo "<td>$" . $results[$row]['Amount'] . "</td>"; 
     echo "<td>" . $results[$row]['First_name'] . "</td>"; 
     echo "<td>" . $results[$row]['Email'] . "</td>"; 
     echo "<td>" . $results[$row]['Member_name'] . "</td></tr>"; 

     $prev = $person; 

    } 
}  

}

Auszug o f Var_dump von PHP-Funktion Methode 1:

Array (15) {[0] => Array (8) {[ "Total"] => string (5) "36,00" [ "member_id"] => int (31) ["Datum"] => string (10) "2017-11-06" ["Transaction"] => string (4) "Ton" ["Amount"] => string (5) "18.00" ["First_name"] => string (6) "Dummy" ["Email"] => string (25) "[email protected]" ["Member_name"] => string (12) "Dummy Nine"} [1 ] => array (8) {["Gesamt"] => string (5) "36.00" ["Mitglieder_ID"] => int (31) ["Datum"] => string (10) "2017-11-13 "[" Transaction "] => string (4)" Ton "[" Amount "] => string (5)" 18.00 "[" First_name "] => string (6)" Dummy "[" Email "] => string (25) "[email protected]" ["Mitgliedsname"] => string (12) "Dummy Nine"} [2] => array (8) {["Gesamt"] => string (5) "40.20 "[" Member_ID "] => int (29) [" Datum "] => string (10)" 2017-11-05 "[" Transaktion "] => string (6)" Firing "[" Amount "] = > Zeichenkette (4) "3.70" ["First_n ame "] => string (6)" Dummy "[" Email "] => string (25)" [email protected] "[" Member_name "] => string (13)" Dummy Seven "} [3] = > array (8) {["Gesamt"] => string (5) "40.20" ["Member_ID"] => int (29) ["Date"] => string (10) "2017-11-05" [ "Transaction"] => string (10) "Attendance" ["Amount"] => string (4) "4.00" ["First_name"] => string (6) "Dummy" ["Email"] => string (25) "Dummy @ Dummy.com“[ "MEMBER_NAME"] => string (13) "Dummy Seven"}

PHP-Funktion Accounts_by_date Methode 2:

function Accounts_by_date($start_date, $end_date) { 
     require '../lib/pdo.php'; 


$prev = NULL; 

$sql = "CALL accounts_report_dates (:start_date, :end_date)"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindValue(':start_date', $start_date); 
$stmt->bindValue(':end_date', $end_date); 
$stmt->execute(); 
$stmt->bindColumn('Total', $total); 
$stmt->bindColumn('Member_ID', $id); 
$stmt->bindColumn('Date', $date); 
$stmt->bindColumn('Transaction', $transaction); 
$stmt->bindColumn('Amount', $amount); 
$stmt->bindColumn('First_name', $fname); 
$stmt->bindColumn('Email', $email); 
$stmt->bindColumn('Member_name', $name); 

while ($row = $stmt->fetch(PDO::FETCH_BOUND)) { 

    $person = $id; 

    if ($person != $prev) { // if the current member is different from the previous member, print header and row 

// table headers 

     echo "<br><br>Member: " . $name . "<br>"; 
     echo "Dear " . $fname . ",<br>"; 
     echo "Please find your Belmont Pottery Group fees for the period " . $start_date . " to " . $end_date . " below. <br><br>"; 
     echo "The total of your invoice is: $" . $total . "<br>"; 
     echo "<br><table><tr><th>Total</th><th>Member_ID</th><th>Date</th><th>Transaction</th><th>Amount</th>"; 
     echo "<th>First name</th><th>Email</th><th>Member name</th></tr>"; 

// table rows 

     echo "<tr><td>" . $total . "</td>"; 
     echo "<td>" . $id . "</td>"; 
     echo "<td>" . $date . "</td>"; 
     echo "<td>" . $transaction . "</td>"; 
     echo "<td>$" . $amount . "</td>"; 
     echo "<td>" . $fname . "</td>"; 
     echo "<td>" . $email . "</td>"; 
     echo "<td>" . $name . "</td></tr>"; 

     $prev = $person; 

    }else{ 

     echo "<tr><td>" . $total . "</td>"; 
     echo "<td>" . $id . "</td>"; 
     echo "<td>" . $date . "</td>"; 
     echo "<td>" . $transaction . "</td>"; 
     echo "<td>$" . $amount . "</td>"; 
     echo "<td>" . $fname . "</td>"; 
     echo "<td>" . $email . "</td>"; 
     echo "<td>" . $name . "</td></tr>"; 

     $prev = $person; 

    } 
} 

}

Var_dump der PHP-Funktion Methode 2 true zurück .

Ausgang (beide Methoden):

Mitglied: Dummy Neun Liebe Dummy, Hier finden Sie Ihre BPG-Gebühren für den Zeitraum 2017-11-01 bis 2017-11-30.

Mitglied: Dummy Seven Sehr geehrte Dummy, Finden Sie Ihre BPG Gebühren für den Zeitraum 2017-11-01 bis 2017-11-30 unten.

Gesamt member_id Datum Transaktionsbetrag Vorname E-Mail-Mitglied Name 36.00 31 2017.11.06 Lehm $ 18.00 Dummy [email protected] Dummy Nine 36.00 31 2017.11.13 Lehm $ 18.00 Dummy [email protected] Dummy Nine

Mitglied: Dummy Six Liebe Dummy, Sie bitte Ihre BPG Gebühren für den Zeitraum 2017.11.01 bis 2017.11.30 unten finden.

Gesamt member_id Datum Transaktionsbetrag Vorname E-Mail-Mitglied Name 40.20 29 2017.11.05 Firing $ 3.70 Dummy [email protected] Dummy Seven 40.20 29 2017.11.05 Anwesenheits $ 4.00 Dummy [email protected] Dummy Seven 40.20 29 2017.11.19 Firing $ 11.60 Dummy [email protected] Dummy Sieben

Mitglied: Dummy Drei Liebe Dummy, Sie bitte Ihre BPG Gebühren für den Zeitraum finden 2017.11.01 bis 2017.11.30 unten.

Gesamt member_id Datum Transaktionsbetrag Vorname E-Mail-Mitglied Name 26.60 28 2017.11.02 Anwesenheits-Six $ 4.00 Dummy [email protected] Dummy 26.60 28 2017.11.06 Anwesenheits $ 4.00 Dummy [email protected] Dummy Six 26.60 28 2017.11.03 Firing $ 17.00 Dummy [email protected] Dummy Six 26,60 28 2017-11-06 $ 1,60 Dummy [email protected] Dummy Firing Sechs

Antwort

1

ich, indem sichergestellt wird beginnen würden Sie schließen Ihre Tabellen können Sie den folgenden Code hinzufügen:

if ($person != $prev) { 
    if ($row > 0) echo "</table>"; /*added line of code*/ 

Das sollte einige Probleme mit mehreren Tabellenheaderzellen in derselben Tabelle beheben. Die Multiple's in einer Tabelle drücken deine Intro's nach oben.

Vergessen Sie nicht, ein

</table> 

bis zum Ende des Codes als auch nach der while-Schleife für die richtige html

+0

Danke getan wird hinzuzufügen! Peinlicherweise war das das Problem. –

+0

@ E.rex froh, ich könnte helfen. Ich habe nichts anderes gesehen, was mit deinem Code falsch ist – SteveB