Zur Navigation

new MyPDO(); umbenennen

1 tobi

Ich habe eine Joomla Seite und binde 2 Artikel ein, die php Dateien beinhalten. Beide php Einzeln funktionieren, in der eingebunden Seite erhalte ich aber die Fehlermeldung
Whoops \ Exception \ ErrorException (E_COMPILE_ERROR)
Cannot declare class MyPDO, because the name is already in use

Ich gehe davon aus, dass er meckert weil in beiden einzelnen php Dateien
$pdo = new MyPDO();
$sql = "
....
steht. Kann man dies irgendwie umbenennen oder umgehen?

19.10.2017 13:29

2 Jörg Kruse

Das hört sich eher danach an, als ob die Datei, in welcher die Klasse MyPDO definiert ist, mehrfach inkludiert ist.

19.10.2017 16:08

3 tobi

Ich inkludiere jede Datei nur 1x.

20.10.2017 06:51

4 Jörg Kruse

Es geht um die Datei, in welcher MyPDO definiert ist:

class MyPDO {
    ...
}

Darauf bezieht sich die Fehlermeldung.

Anzeigen lassen kannst du dir die includeten Dateien mit get_included_files()

Oder hast du etwa die Datei, welche die Deklaration enthält, dupliziert?

Es scheint sich bei MyPDO aber auch nicht um die Datenbankklasse von Joomla zu handeln? Diese würde man ja eher so verwenden:

https://docs.joomla.org/Selecting_data_using_JDatabase

Mal abgesehen davon: benötigst du wirklich mehrere Objekte der Datenbankklasse MyPDO, d.h. musst du mehrere verschiedene Datenbanken mit unterschiedlichen Zugangsdaten ansprechen? ansonsten reicht es doch, einmal eine Verbindung herzustellen, und das Objekt in allen Scripten zu verwenden. Oder besser noch, entsprechend der Dokumentation von Joomla deren Datenbankklasse zu verwenden.

20.10.2017 09:14

5 tobi

Wenn ich irgendwie hinbekommen, dass ich 2 Tabellen nebeneinander platziert bekomme, dann könnte man auch versuchen, dies in einer Datei zu realisieren.
Das ganze soll so aussehen, links der Rückblick, auf der rechten Seite die Vorschau (da wo Pressebericht gerade als Platzhalter ist).


Beide Dateien einzeln sind erreichbar unter:
https://tspies.de/images/EigeneDateien/php/spiele-vorschau.php
https://tspies.de/images/EigeneDateien/php/spiele-rueckblick.php

Vorschau:
<?php

//Einbinden von CSS Datei
include "css.php.inc";

/**
* pdo extension
*/
class MyPDO extends PDO
{

    function __construct($file = 'db-config.ini')
    {
        if (!$settings = parse_ini_file($file, TRUE))
            throw new Exception("Unable to process file: " . $file);

        $dns = $settings['database']['driver'] .
            ':host=' . $settings['database']['host'] .
            ((!empty($settings['database']['port']))
                ? (';port=' . $settings['database']['port'])
                : '') .
            ';dbname=' . $settings['database']['schema'];

        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        ];

        parent::__construct(
            $dns,
            $settings['database']['username'],
            $settings['database']['password'],
            $opt
        );

    }
}

$pdo_3 = new MyPDO();
$sql_3 = "
    SELECT
        id, wochentag, spielzeit, spielklasse, heimmannschaft,
        gastmannschaft, heimergebnis, gastergebnis
    FROM
        spielergebnisse
    WHERE
        heimmannschaft
    NOT LIKE '%spielfrei%'
    AND gastmannschaft NOT LIKE '%spielfrei%'
    AND spielzeit >= CURDATE()
    AND spielzeit < DATE_ADD(CURDATE(), INTERVAL 7 DAY) 
    ORDER BY
        spielzeit
";

try {
    printResult($pdo_3->query($sql_3)->fetchAll());
} catch (Exception $e) {
    die('Something went wrong...<br />' . $e->getMessage());
}
function printResult($res_3) {
    echo "
        <table class='table_gesamtspielplan'> 
            <tr>
                <td><b>Tag</b></td>
                <td><b>Datum und Uhrzeit</b></td>
                <td><b>Heimmannschaft</b></td>
                <td><b>Gastmannschaft</b></td>
             </tr>
    ";

    foreach ($res_3 as $val) {
        if ($val["spielklasse"] == "Da Vb Kl" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Damen 1";
        }
        if ($val["spielklasse"] == "Da Bez Li" && $val["heimmannschaft"] == "TTC Langensteinbach  II") {
        $val["heimmannschaft"] = "Damen 2";
        }
        if ($val["spielklasse"] == "He Bez Li" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Herren 1";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["heimmannschaft"] == "TTC Langensteinbach  II") {
        $val["heimmannschaft"] = "Herren 2";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["heimmannschaft"] == "TTC Langensteinbach  III") {
        $val["heimmannschaft"] = "Herren 3";
        }
        if ($val["spielklasse"] == "He Kr  Kl A" && $val["heimmannschaft"] == "TTC Langensteinbach  IV") {
        $val["heimmannschaft"] = "Herren 4";
        }
        if ($val["spielklasse"] == "He Kr  Kl B" && $val["heimmannschaft"] == "TTC Langensteinbach  V") {
        $val["heimmannschaft"] = "Herren 5";
        }
        if ($val["spielklasse"] == "He Kr  Kl C" && $val["heimmannschaft"] == "TTC Langensteinbach  VI") {
        $val["heimmannschaft"] = "Herren 6";
        }
        if ($val["spielklasse"] == "Ju Vb Kl" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Jugend 1";
        }
        if ($val["spielklasse"] == "Ju Bez Kl" && $val["heimmannschaft"] == "TTC Langensteinbach  II") {
        $val["heimmannschaft"] = "Jugend 2";
        }
        if ($val["spielklasse"] == "Ju Kr  Kl" && $val["heimmannschaft"] == "TTC Langensteinbach  III") {
        $val["heimmannschaft"] = "Jugend 3";
        }
        if ($val["spielklasse"] == "Sm Kr  Li" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Schüler A";
        }
        if ($val["spielklasse"] == "Sm Kr Kl" && $val["heimmannschaft"] == "TTC Langensteinbach  (SBm)") {
        $val["heimmannschaft"] = "Schüler B";
        }
        if ($val["spielklasse"] == "Da Vb Kl" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Damen 1";
        }
        if ($val["spielklasse"] == "Da Bez Li" && $val["gastmannschaft"] == "TTC Langensteinbach  II") {
        $val["gastmannschaft"] = "Damen 2";
        }
        if ($val["spielklasse"] == "He Bez Li" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Herren 1";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["gastmannschaft"] == "TTC Langensteinbach  II") {
        $val["gastmannschaft"] = "Herren 2";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["gastmannschaft"] == "TTC Langensteinbach  III") {
        $val["gastmannschaft"] = "Herren 3";
        }
        if ($val["spielklasse"] == "He Kr  Kl A" && $val["gastmannschaft"] == "TTC Langensteinbach  IV") {
        $val["gastmannschaft"] = "Herren 4";
        }
        if ($val["spielklasse"] == "He Kr  Kl B" && $val["gastmannschaft"] == "TTC Langensteinbach  V") {
        $val["gastmannschaft"] = "Herren 5";
        }
        if ($val["spielklasse"] == "He Kr  Kl C" && $val["gastmannschaft"] == "TTC Langensteinbach  VI") {
        $val["gastmannschaft"] = "Herren 6";
        }
        if ($val["spielklasse"] == "Ju Vb Kl" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Jugend 1";
        }
        if ($val["spielklasse"] == "Ju Bez Kl" && $val["gastmannschaft"] == "TTC Langensteinbach  II") {
        $val["gastmannschaft"] = "Jugend 2";
        }
        if ($val["spielklasse"] == "Ju Kr  Kl" && $val["gastmannschaft"] == "TTC Langensteinbach  III") {
        $val["gastmannschaft"] = "Jugend 3";
        }
        if ($val["spielklasse"] == "Sm Kr  Li" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Schüler A";
        }
        if ($val["spielklasse"] == "Sm Kr Kl" && $val["gastmannschaft"] == "TTC Langensteinbach  (SBm)") {
        $val["gastmannschaft"] = "Schüler B";
        }
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val["spielzeit"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$val["wochentag"]} </td>
            <td> {$newDate} </td>
            <td> {$val["heimmannschaft"]} </td>
            <td> {$val["gastmannschaft"]} </td>
        </tr>
        ";
    }
    echo "</table>";
}
?>

Rückblick:
<?php

//Einbinden von CSS Datei
include "css.php.inc";

/**
* pdo extension
*/
class MyPDO extends PDO
{

    function __construct($file = 'db-config.ini')
    {
        if (!$settings = parse_ini_file($file, TRUE))
            throw new Exception("Unable to process file: " . $file);

        $dns = $settings['database']['driver'] .
            ':host=' . $settings['database']['host'] .
            ((!empty($settings['database']['port']))
                ? (';port=' . $settings['database']['port'])
                : '') .
            ';dbname=' . $settings['database']['schema'];

        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        ];

        parent::__construct(
            $dns,
            $settings['database']['username'],
            $settings['database']['password'],
            $opt
        );

    }
}

$pdo = new MyPDO();
$sql = "
    SELECT
        id, wochentag, spielzeit, spielklasse, heimmannschaft,
        gastmannschaft, heimergebnis, gastergebnis
    FROM
        spielergebnisse
    WHERE
        heimmannschaft
    NOT LIKE '%spielfrei%'
    AND gastmannschaft NOT LIKE '%spielfrei%'
    AND spielzeit >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
    AND spielzeit < CURDATE()
    ORDER BY
        spielzeit
";

try {
    printResult($pdo->query($sql)->fetchAll());
} catch (Exception $e) {
    die('Something went wrong...<br />' . $e->getMessage());
}
function printResult($res) {
    echo "
        <table class='table_gesamtspielplan'> 
            <tr>
                <td><b>Tag</b></td>
                <td><b>Datum</b></td>
                <td><b>Heimmannschaft</b></td>
                <td><b>Gastmannschaft</b></td>
                <td align=center><b>H</b></td>
                <td align=center><b>:</b></td>
                <td align=center><b>G</b></td>
             </tr>
    ";

    foreach ($res as $val) {
        if ($val["spielklasse"] == "Da Vb Kl" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Damen 1";
        }
        if ($val["spielklasse"] == "Da Bez Li" && $val["heimmannschaft"] == "TTC Langensteinbach  II") {
        $val["heimmannschaft"] = "Damen 2";
        }
        if ($val["spielklasse"] == "He Bez Li" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Herren 1";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["heimmannschaft"] == "TTC Langensteinbach  II") {
        $val["heimmannschaft"] = "Herren 2";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["heimmannschaft"] == "TTC Langensteinbach  III") {
        $val["heimmannschaft"] = "Herren 3";
        }
        if ($val["spielklasse"] == "He Kr  Kl A" && $val["heimmannschaft"] == "TTC Langensteinbach  IV") {
        $val["heimmannschaft"] = "Herren 4";
        }
        if ($val["spielklasse"] == "He Kr  Kl B" && $val["heimmannschaft"] == "TTC Langensteinbach  V") {
        $val["heimmannschaft"] = "Herren 5";
        }
        if ($val["spielklasse"] == "He Kr  Kl C" && $val["heimmannschaft"] == "TTC Langensteinbach  VI") {
        $val["heimmannschaft"] = "Herren 6";
        }
        if ($val["spielklasse"] == "Ju Vb Kl" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Jugend 1";
        }
        if ($val["spielklasse"] == "Ju Bez Kl" && $val["heimmannschaft"] == "TTC Langensteinbach  II") {
        $val["heimmannschaft"] = "Jugend 2";
        }
        if ($val["spielklasse"] == "Ju Kr  Kl" && $val["heimmannschaft"] == "TTC Langensteinbach  III") {
        $val["heimmannschaft"] = "Jugend 3";
        }
        if ($val["spielklasse"] == "Sm Kr  Li" && $val["heimmannschaft"] == "TTC Langensteinbach") {
        $val["heimmannschaft"] = "Schüler A";
        }
        if ($val["spielklasse"] == "Sm Kr Kl" && $val["heimmannschaft"] == "TTC Langensteinbach  (SBm)") {
        $val["heimmannschaft"] = "Schüler B";
        }
        if ($val["spielklasse"] == "Da Vb Kl" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Damen 1";
        }
        if ($val["spielklasse"] == "Da Bez Li" && $val["gastmannschaft"] == "TTC Langensteinbach  II") {
        $val["gastmannschaft"] = "Damen 2";
        }
        if ($val["spielklasse"] == "He Bez Li" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Herren 1";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["gastmannschaft"] == "TTC Langensteinbach  II") {
        $val["gastmannschaft"] = "Herren 2";
        }
        if ($val["spielklasse"] == "He Kr   Li" && $val["gastmannschaft"] == "TTC Langensteinbach  III") {
        $val["gastmannschaft"] = "Herren 3";
        }
        if ($val["spielklasse"] == "He Kr  Kl A" && $val["gastmannschaft"] == "TTC Langensteinbach  IV") {
        $val["gastmannschaft"] = "Herren 4";
        }
        if ($val["spielklasse"] == "He Kr  Kl B" && $val["gastmannschaft"] == "TTC Langensteinbach  V") {
        $val["gastmannschaft"] = "Herren 5";
        }
        if ($val["spielklasse"] == "He Kr  Kl C" && $val["gastmannschaft"] == "TTC Langensteinbach  VI") {
        $val["gastmannschaft"] = "Herren 6";
        }
        if ($val["spielklasse"] == "Ju Vb Kl" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Jugend 1";
        }
        if ($val["spielklasse"] == "Ju Bez Kl" && $val["gastmannschaft"] == "TTC Langensteinbach  II") {
        $val["gastmannschaft"] = "Jugend 2";
        }
        if ($val["spielklasse"] == "Ju Kr  Kl" && $val["gastmannschaft"] == "TTC Langensteinbach  III") {
        $val["gastmannschaft"] = "Jugend 3";
        }
        if ($val["spielklasse"] == "Sm Kr  Li" && $val["gastmannschaft"] == "TTC Langensteinbach") {
        $val["gastmannschaft"] = "Schüler A";
        }
        if ($val["spielklasse"] == "Sm Kr Kl" && $val["gastmannschaft"] == "TTC Langensteinbach  (SBm)") {
        $val["gastmannschaft"] = "Schüler B";
        }
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val["spielzeit"]);
        $newDate = $date->format('d.m.Y');
        echo "
        <tr>
            <td> {$val["wochentag"]} </td>
            <td> {$newDate} </td>
            <td> {$val["heimmannschaft"]} </td>
            <td> {$val["gastmannschaft"]} </td>
            <td align=center> {$val["heimergebnis"]} </td>
            <td align=center> <b>:</b></td>
            <td align=center> {$val["gastergebnis"]} </td>
        </tr>
        ";
    }
    echo "</table>";
}
?>

20.10.2017 09:48

6 Jörg Kruse

Du hast die Klassendefinition zweimal eingebaut:

class MyPDO extends PDO
{
     ...
}

Eine Klasse kann genauso wie eine Funktion nur einmal deklariert werden! Klassen- und Funktionsdefinitionen sollten deswegen auch in eigenen Dateien ausgelagert werden und diese mit require_once() (oder einem Autoloader) includiert werden.

20.10.2017 10:02

7 tobi

d.h. wenn ich es auslagere und jeweils includiere dann sollte es gehen?

oder kann ich einfach
class MyPDO extends PDO
{
     ...
}
und
class MyPDO1 extends PDO
{
     ...
}
machen?

20.10.2017 10:06

8 Jörg Kruse

Nein, nicht umbennen! Ein Grundprinzip einer guten Programmierung ist DRY "Don't repeat yourself". Code sollte also nicht dupliziert, sondern wiederverwendet werden.

Und wenn man require_once() statt require() oder include() verwendet, dann ist sichergestellt, dass die Klassen-Datei nur einmal includiert wird.

20.10.2017 10:14

9 tobi

Wenn ich nun require_once einbaue, dann bekomme ich eingebundenes als Klartext:
http://tspies.de/images/EigeneDateien/php/spiele-vorschau.php

/** * pdo extension */ class MyPDO extends PDO { function __construct($file = 'db-config.ini') { if (!$settings = parse_ini_file($file, TRUE)) throw new Exception("Unable to process file: " . $file); $dns = $settings['database']['driver'] . ':host=' . $settings['database']['host'] . ((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) : '') . ';dbname=' . $settings['database']['schema']; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', ]; parent::__construct( $dns, $settings['database']['username'], $settings['database']['password'], $opt ); } }

<?php

//Einbinden von CSS Datei
include "css.php.inc";

//Einbinden von Datenbankzugang
require_once "dbVerbindung.php";


$pdo_3 = new MyPDO();
$sql_3 = "
...
?>

20.10.2017 10:42

10 Jörg Kruse

Hast du ein PHP-Tag in der ersten Zeile:

<?php

... und am Ende ggf.:

?>

20.10.2017 10:49