PHPWord Daten aus SQL in Tabelle

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

mDie

Grünschnabel
Hallo,

ich brauche Eure Hilfe.

In der PHPWord-Dokumentation ist das Befüllen einer Tabelle wie folgt beschrieben:

cloneRowAndSetValues​

Finds a row in a table row identified by $search param and clones it as many times as there are entries in $values.

+-----------+----------------+
| ${userId} | ${userName} |
| |----------------+
| | ${userAddress} |
+-----------+----------------+

$values = [
['userId' => 1, 'userName' => 'Batman', 'userAddress' => 'Gotham City'],
['userId' => 2, 'userName' => 'Superman', 'userAddress' => 'Metropolis'],
];
$templateProcessor->cloneRowAndSetValues('userId', $values);

Will result in

+---+-------------+
| 1 | Batman |
| |-------------+
| | Gotham City |
+---+-------------+
| 2 | Superman |
| |-------------+
| | Metropolis |
+---+-------------+

Das funktioniert soweit auch. Aber: Wie bekomme ich nun Daten aus einer SQL-Datenbank eingefügt? Ich habe schon mehrere Varianten versucht, aber vllt. stehe ich einfach gerade auf den Schlauch.

Vllt. kann mir jemand weiterhelfen, wie ich die Daten aus der SQL in die $values bekomme.

Besten Dank im Voraus.
 

mDie

Grünschnabel
Danke für die Antwort. Ich hatte es mit "RowResult::fetchAll" versucht. Leider funktioniert das nicht.

 

Yaslaw

alter Rempler
Moderator
"Leider funktioniert das nicht." ist keine Antwort.
Was genau hat nicht funktioniert?

Um dir zuhelfen solltest du uns folgende Infos zur Verfügung stellen
1) Der Code, der nicht funktioniert
2) Das Fehlverhalten beschreiben
3) Falls vorhanden, Fehlermeldungen
 

mDie

Grünschnabel
Das ist der Code:
PHP:
$sql = $con->query("SELECT var1, var2, var3 FROM table");
$values = $sql->fetchAll();

$templateProcessor->cloneRowAndSetValues('var1', $values);
$templateProcessor->saveAs('word-doc.docx');

Im Log ist folgende Meldung:
"PHP Fatal error: Uncaught PhpOffice\\PhpWord\\Exception\\Exception: Can not clone row, template variable not found or variable contains markup"

Es wird kein Worddokument erstellt.

Wenn ich allerdings den Code aus der Dokumentation nutze, funktioniert es reibungslos.
PHP:
$values = [
['userId' => 1, 'userName' => 'Batman', 'userAddress' => 'Gotham City'],
['userId' => 2, 'userName' => 'Superman', 'userAddress' => 'Metropolis'],
];

Gibt es eine Möglichkeit, dass man in der Variable $values die foreach Schleife durchlaufen lässt? z. B.
PHP:
$values = [

foreach($con->query($sql) as $row) :

['userId' => $row['var1'], 'userName' => $row['var2'], 'userAddress' => $row['var3'],

endforeach;

];
 
Zuletzt bearbeitet von einem Moderator:

Yaslaw

alter Rempler
Moderator
1) Lass dir mal $values mit var_dump() ausgeben
2) Ja mit einer Schleife kann man arbeiten. Das ist die Basis um mit Datenbanken zu arbeiten. Sollte in jedem Buch ganze weit vorne stehen. Es geht mit dem einfachen fetch_assoc() PHP: mysqli_result::fetch_assoc - Manual

Achja, nenne das Resultat aus query() nicht $sql. $sql wird normalerweise für den SQL-String verwendet und nicht für dessen Resultat
PHP:
$sql = "SELECT var1, var2, var3 FROM table";
$result = $con->query($sql);

$values =array();
while ($row = $result->fetch_assoc()) {
    $values[] = ['userId' => $row['var1'], 'userName' => $row['var2'], 'userAddress' => $row['var3'];
}
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge