Ankündigung

Einklappen
Keine Ankündigung bisher.

Use of undefined constant obwohl definiert

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Use of undefined constant obwohl definiert

    Hoi,

    ich hab da mal ein kleines Problem. Zuerst einmal ich komme eigentlich aus dem C#-Bereich und muss sowieso schon ein wenig umdenken. Daher bitte nicht böse sein, wenn ich mich etwas blöd anstelle. Und zwar habe ich das Problem, das ich ein Script geschrieben habe welches mir etwas aus der Datenbank ausgeben soll, doch wenn ich das Script aufrufe, bekomme ich folgende Fehlermeldung:

    Notice: Use of undefined constant DATABASE - assumed 'DATABASE' in D:\xampp\htdocs\LinkCrypter\core\sql\sqlHandler.cl ass.php on line 9

    Notice: Use of undefined constant USERNAME - assumed 'USERNAME' in D:\xampp\htdocs\LinkCrypter\core\sql\sqlHandler.cl ass.php on line 9

    Notice: Use of undefined constant PASSWORD - assumed 'PASSWORD' in D:\xampp\htdocs\LinkCrypter\core\sql\sqlHandler.cl ass.php on line 9

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'USERNAME'@'localhost' (using password: YES)' in D:\xampp\htdocs\LinkCrypter\core\sql\sqlHandler.cl ass.php:9 Stack trace: #0 D:\xampp\htdocs\LinkCrypter\core\sql\sqlHandler.cl ass.php(9): PDO->__construct('mysql:host=loca...', 'USERNAME', 'PASSWORD', Array) #1 D:\xampp\htdocs\LinkCrypter\acp\login.php(13): MySqlHandler->GetQuery('SELECT siteName...') #2 {main} thrown in D:\xampp\htdocs\LinkCrypter\core\sql\sqlHandler.cl ass.php on line 9
    Ich habe eine PHP-Datei, wo das jeweilige Script drin ist, in diesem wird eine global.php includet wird. In dieser wiederum wird die sqlHandler.class.php includet. In der SqlHandler.class.php befindet sich eine Funktion, welche einen MySqlQuery zurückgeben soll und bindet eine config.php ein.

    Diese kann auch gefunden werden, allerdings kann ich aus irgendeinem Grund nicht drauf zugreifen. Wenn ich allerdings die config.php direkt in die PHP-Datei einfüge, welche die global.php includet, kann ich über echo die constanten ausgeben.

    Hat vielleicht jemand ne Ahnung woran das liegen könnte? Hier auch noch der Code der login.php, der global.php und der sqlHandler.php:

    login.php
    PHP-Code:
    <?php

    require '../core/global.php';

    $tpl->setCacheDir("./cache")->setTemplateDir("./template")->setCompileDir("./template_c");

    $sql = new MySqlHandler();
    $result $sql->GetQuery("SELECT siteName FROM options");

    $tpl->assign("siteName"$result[0]["siteName"]);
    $tpl->display("login.tpl");
    ?>
    global.php
    PHP-Code:
    <?php

    require 'template/Smarty.class.php';
    require 
    'sql/sqlHandler.class.php';

    $tpl = new Smarty();
    $tpl->caching true;
    $tpl->cache_lifetime 120;
    $tpl->debugging true;
    sqlHandler.class.php
    PHP-Code:
    <?php

    class MySqlHandler
    {
        public function 
    GetQuery($queryContent)
        {
            require_once 
    'config.php';
            
    $context = new PDO("mysql:host=localhost;dbname="DATABASE .""USERNAME PASSWORD , array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
            
    $out $context->prepare($queryContent);
            
    $out->execute();
            return 
    $out->fetchAll();
        }
    }
    ?>
    config.php
    PHP-Code:
    <?php

    define
    ("DATABASE""xxxx");
    define("USERNAME""xxxx");
    define("PASSWORD""xxxx");
    ?>
    Das Script selbst funktioniert übrigens einwandfrei. Wenn ich die Constanten einfach direkt Hardcode, dann wird das Script korrekt ausgeführt.


  • #2
    Wo definierst du die Konstanten?
    Code pls...
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Habs in den ersten Beitrag reineditiert.

      Kommentar


      • #4
        Deine MySQL Handler Klasse ist schwachsinnig. Software-Konfiguration über Konstanten ist etwas was Magisch irgendwo landet wenn du das so implementierst wie du das hier implementiert hast. Magisch ist schwer wartbar.

        Grundsätzlich solltest du eher hingehen und einen Datenbank-Adapter nutzen, der eine PDO Instanz zurück gibt oder einen QueryMapper.

        So ein Adapter könnte so aussehen: https://gist.github.com/Golpha/8446061
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Den Verbindungsaufbau in die Query-Methode zu schreiben ist auch unsinnig.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Wen du durch C# her auf eager-instantiation geschult bist, dann solltest du bei php generell auf lazy-instantiation umdenken. Du kannst -wie in c# auch- servicelocators oder dependency injection nutzen. Wenn man es richtig macht, wird auch erst beim ersten Erfragen eines Service die Verbindung (des in deinem Fall vorkommenden Datenbankobjekts) aufgebaut und direkt verwendet. Du brauchst also deine Datenbankklasse nicht unbedingt mit Lazy-Logic ausstatten.
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar

            Lädt...
            X