Zur Navigation

SQL Abfrage mittels PDO [2]

11 chorn

Ja klar.

15.03.2018 08:11

12 tobi

Und wie genau? Ich habe nun etwas probiert, bekomme es aber nicht hin.

Habe auch gelesen, dass man dies evtl. direkt in der sql Abfrage schon einbauen könnte ...

15.03.2018 13:10

13 Jörg

Die Queries kannst du eins zu eins übertragen. Es gibt höchstens einen Unterschied, wie PHP-Variablen in die Query eingebaut werden. da du in den Queries keine PHP-Variablen verwendest, ist das hier aber nicht von Belang.

Was mir am Code in Beitrag 4 aber noch auffällt: du hast da eine verschachtelte Funktionsdefinition - das ergibt keinen Sinn.

Die Ausgabe unterscheidet sich anscheinend zum einem in der Ergebnismenge aus der Abfrage, zum anderen im Titel der Tabelle. Also benötigst du eine Funktionsdefinition mit zwei Argumenten:

function printResult($res, $title) {
    echo "<br/><b>".$title."</b>
        ...
    ";
    foreach ($res as $val) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val["timestamp"]);
        /* ... */
    }
    echo "</table>";
}

Aufrufen kannst du die Funktion dann folgendermaßen:

try {
    printResult($pdo_1->query($sql_1)->fetchAll(), 'Nach Datum');
    printResult($pdo_2->query($sql_2)->fetchAll(), 'Nach TTR');
} catch (Exception $e) {
    die('Something went wrong...<br />' . $e->getMessage());
}

15.03.2018 13:51 | geändert: 15.03.2018 13:53

14 tobi

Ich habs nun so versucht. Hier wird nun nur die Zahl 1 aus gegeben.
    foreach ($res_1 as $val_1) {
      	$anzahl = 1; {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_1["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$anzahl} </td>       
            <td> {$val_1["id"]} </td>
            <td> {$val_1["nachname"]} </td>
            <td> {$val_1["vorname"]} </td>
            <td> {$val_1["verein"]} </td>
            <td> {$val_1["ttr"]} </td>
            <td> {$newDate} </td>
        </tr>
        ";
                  $anzahl++;
          }
    }
    echo "</table>";

21.03.2018 06:40

15 chorn

Da sieht man doch gleich, dass die Aussage nicht stimmt, und es an dem Code nicht liegen kann, wenn man das einfach mal ausprobiert:

	$res_1 = [
		[
			'id' => 1,
			'nachname' => 2,
			'vorname' => 3,
			'verein' => 4,
			'ttr' => 4,
			'timestamp' => '2018-01-23 14:11:09',
		],
		[
			'id' => 5,
			'nachname' => 6,
			'vorname' => 7,
			'verein' => 8,
			'ttr' => 4,
			'timestamp' => '2018-01-23 14:11:09',
		],
	];

21.03.2018 07:27 | geändert: 21.03.2018 07:28

16 tobi

Siehe:

21.03.2018 07:59

17 Jörg

Welchen Zweck haben die Klammern innerhalb des foreach Blocks?

In der ersten Zelle steht $anzahl, und die wird möglicherweise wegen dieser überflüssigen Klammern nicht korrekt hochgezählt:

      	$anzahl = 1; {

                  $anzahl++;
          }

ansonsten zum Debuggen mal $res_1 vor dem foreach Block ausgeben:

echo '<pre>';
print_r($res_1);
echo '</pre>';

... oder mit einem Testarray testen, wie von chorn vorgeschlagen

21.03.2018 08:35 | geändert: 21.03.2018 08:42

18 tobi

Die Klammern sind entfernt, das Debuggen ergibt:

Teilnehmerliste nach Meldeeingang sortiert
Array
(
    [0] => Array
        (
            [id] => 122
            [nachname] => Mustermann
            [vorname] => Max
            [verein] => TTC Musterhausen
            [ttr] => 1543
            [timestamp] => 2017-09-08 08:47:24
        )

    [1] => Array
        (
            [id] => 121
            [nachname] => Mustermann1
            [vorname] => Max1
            [verein] => TTC Musterhausen1
            [ttr] => 1219
            [timestamp] => 2017-09-06 21:08:25
        )

    [2] => Array
        (
            [id] => 118
            [nachname] => Musterhausen2
            [vorname] => Max2
            [verein] => TTC Musterhausen3
            [ttr] => 1537
            [timestamp] => 2017-09-06 15:34:20
        )
usw.

21.03.2018 10:53 | geändert: 21.03.2018 11:01

19 Jörg

Die Klammern sind entfernt

Und wird $anzahl jetzt korrekt hochgezählt?

Das Array schaut ja soweit OK aus?

21.03.2018 11:33

20 tobi

Nein, schaut noch so aus wie in Post 16.

21.03.2018 11:42