mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 05:34 Benutzername: Passwort: Auto-Login

Thema: PHP Variable nicht gefunden vom 04.03.2009


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP Variable nicht gefunden
Autor Nachricht
Julia384
Threadersteller

Dabei seit: 17.02.2009
Ort: Lingen
Alter: -
Geschlecht: Weiblich
Verfasst Mi 04.03.2009 09:24
Titel

PHP Variable nicht gefunden

Antworten mit Zitat Zum Seitenanfang

Hallo,
ich habe eine Funktion:
Code:

   #
   #    Sprach Einstellung laden
   #
      function _loadLang($lang) {
        $text = array();
        $GETlang = "Select `KEYWORD`,`".$lang."` From Language Order by LANG_ID;";
        $RESlang = mysql_query($GETlang);
         while($row = mysql_fetch_row($RESlang)):
            $text[$row[0]] = $row[1];
         endwhile;
        return $text;
      }

Die Variable $lang mochte ich als Test erstmal nur auf DE stellen. Später soll das über GET realisiert werden
Code:

   #
   # Spracheinstellung // standard deutsch... muss noch mit englisch etc.
   #
   function _setLanguage(){
      global $lang;
      $lang = 'DE';
   }

Aufgerufen soll es hier:
Code:

   #
   # Die Settings und die möglichen SQL Errors werden aus index.php mitgegeben
   #
   public function Page($error, array $settings){
                _setLanguage();
      _loadLang($lang);
      $this->__construct($error, $settings);
   }

Und benutzt soll es so werden:
Code:

   #
   # Aufbau Home seite
   #
   private function _getStartText(){
      $header = $lang['Home Header'];
      $text    = $lang['Home Text'];
      return '<h1>$header</h1> $text';
   }   


Wo liegt mein Fehler?? ich habe die Variable schon als global und private deklariert und nix... liegt es daran das ich es alles in "final class Page" stehen habe??? Muss ich das dann anders machen?

Danke schonmal
Julia
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Mi 04.03.2009 10:05
Titel

Antworten mit Zitat Zum Seitenanfang

das Problem ist hier mieses Applikationsdesign...wobei die Deklaration global $lang; eigentlich dafür sorgen sollte das das teil verfügbar ist.

Arbeitest du innerhalb einer Klasse oder woher das public/private?
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Julia384
Threadersteller

Dabei seit: 17.02.2009
Ort: Lingen
Alter: -
Geschlecht: Weiblich
Verfasst Mi 04.03.2009 10:12
Titel

Antworten mit Zitat Zum Seitenanfang

ja will das in einer klasse die den frame der seite darstellen soll so das ich nur noch die inhalte laden muss
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Mi 04.03.2009 10:34
Titel

Antworten mit Zitat Zum Seitenanfang

lass mal bitte die ganze klasse sehen
  View user's profile Private Nachricht senden
Julia384
Threadersteller

Dabei seit: 17.02.2009
Ort: Lingen
Alter: -
Geschlecht: Weiblich
Verfasst Mi 04.03.2009 10:38
Titel

Antworten mit Zitat Zum Seitenanfang

ich hab nu schon wieder dran rum gewurschtelt :-S
Code:

<?php

require_once ("Language.php");

final class Page
{
   # um mit eigenen arrays innerhalb der Page zu arbeiten
   #
   # _arrayPathInfo [0] = Hauptseite
   private   $_arrayPathInfo    = array();
   private   $_arraySettings    = array();
   
   
   #
   # Fehlermeldungen werden auf Deutsch ausgegeben
   # neue Arrays werden mit Settings und Path gefüllt
   #
   public function __construct($error, array $settings){      
      if ( $error )
      {
         $this->_arraySettings['titel']   = ' ' . $lang['DB problem'] . ' ';
         $this->_arraySettings['text']   = '<em>' . $error . '</em>.';
         die ( $this->get('template.html') );
      }
      
      $this->_arraySettings = $settings;
      $this->_arrayPathInfo = $this->_getPathInfo();
      $this->init();
   }
   
   
   #
   # Die Settings und die möglichen SQL Errors werden aus index.php mitgegeben
   #
   public function Page($error, array $settings){
      #_setLanguage();
      _loadLang($lang);
      $this->__construct($error, $settings);
   }

   
   #
   # Spracheinstellung // standard deutsch... später über GET.
   #
   function _setLanguage(){
      if(!empty($_GET['lang'])):
         $lang = LoadLang($_GET['lang']);
      else:
         $lang = LoadLang("de");
      endif;      
   }


   #
   # Initialisierung der Seite
   #
   public function init(){      
      # Wenn der Path "leer" oder "home" ist dann auf Startseite [0]
      $this->_arrayPathInfo[0] = empty($this->_arrayPathInfo) ? 'home': $this->_arrayPathInfo[0];
      
      # Zugangskontrolle
      #
      #

      # Erstellung der Navigation
      $this->_arraySettings['navigation']   = $this->_getNavigation();
      $this->_getContent($this->_arrayPathInfo[0]);
      
      # Erstellung der Suche
      $this->_arraySettings['search header']   = $this->_getSearchHeader();
      $this->_getContent($this->_arrayPathInfo[0]);
      $this->_arraySettings['search']   = $this->_getSearchField();
      $this->_getContent($this->_arrayPathInfo[0]);
   }
   

   #
   # __toString Methode erlaubt einer Klasse zu entscheiden wie sie reagieren will
   # wenn Sie in eine Zeichenkette umgewandelt wird.
   #
   public function __toString(){
      return $this->get('template.html');
   }


   #
   # URL Pfad aufteilen um die entsprechenden Seiten laden zu können
   # /abc.php?key=value oder /abc.php/key/value
   #
   private function _getPathInfo(){
      if(isset($_SERVER['PATH_INFO'])) {
         $ap = explode('/', $_SERVER['PATH_INFO']); // in key/value pairs zerlegen
         array_shift($ap);
            while(count($ap) >= 2) {
            $key = array_shift($ap);
            $value = array_shift($ap);
            $_GET[$key] = $value;
            return $value;
            }
      }
   }
   

   #
   #   Alle Templatevariabelen austauschen und darstellen
   #
   public function get($template){
      $content   = file_get_contents($template);
         foreach ( $this->_arraySettings as $key => $value )
         {
            if ( is_string($value) )
               $content = str_replace('{' . $key . '}', $value, $content);
         }
         
         # löschen der restlichen {variablen}
         $content = str_replace('{path}', $this->_arraySettings['path'], $content);
         $content = preg_replace("/(\{([a-zA-Z0-9_]+)\})/e", null, $content);

      return $content;
   }
   

   #
   # Aufbau Navigation
   #
   private function _getNavigation(){
      return '
         <ul>
            <li class="login"><a href="{path}login.html"><span>' . $lang['Login'] . '</span></a></li>
            <li class="register"><a href="{path}register.html"><span>' . $lang['Register'] . '</span></a></li>
         </ul>';
   }


   #
   # Aufbau Suche
   #
   private function _getSearchHeader(){
      return '<h1>'. $lang['search header'] .'</h1>';
   }
   
   private function _getSearchField(){
      return '
         <ul>
            <li class="form">
               <form action="{path}search.php" method="get">
                  <input type="text" name="searchtext" value="' . $lang['Search friends'] . '"/>                  
                  <input type="submit" id="searchbutton" value="' . $lang['Search'] . '"/>                  
               </form>
            </li>
         </ul>';
   }

   #
   # Aufbau Home seite
   #
   private function _getStartText(){
      $header = $lang['Home Header'];
      $text    = $lang['Home Text'];
      return '<h1>$header</h1> $text';
   }   
}
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Mi 04.03.2009 11:01
Titel

Antworten mit Zitat Zum Seitenanfang

du könntest für die Sprache eine statische Klasse verwenden?

Oder eine komplett eigene Klasse die du dann quasi im konstruktur deiner Page Klasse instanzierst.

Allgemein zur ganzen Struktur mag ich mich jetzt doch nicht äussern, das kommt mir alles etwas verwurschtelt vor. Ich rate dir dich ein wenig mit Entwurfsmustern auseinanderzusetzen. Dazu noch ein kleiner Link: http://professionelle-softwareentwicklung-mit-php5.de/

In deinem besonderen Fall macht es vielleicht sinn sich mal das Strategy Pattern anzusehen.
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 04.03.2009 11:24
Titel

Antworten mit Zitat Zum Seitenanfang

Die Idee ist nicht schlecht, aber deine Klasse muss zu viele Aufgaben erledigen *zwinker* Ich würde - bevor du tiefer in die Materie einsteigst - einfach mal die einzelnen Aufgabe, die du erledigen willst, klar definieren und das ganze dann auf mehrere, kleinere Klassen aufteilen:

- Navigation
- Seiten(controller) für URL-Aufrufe
- I18n
- Daten
- Forms

etc...

Simple Internationalisierung kann man auch mit getText machen.
  View user's profile Private Nachricht senden
 
Ähnliche Themen [SQL] Variable durch Variable aus anderer Tabelle ersetzen
[gefunden] Programm für Webauswertung
Ein Picture Viewer gefunden den ich will
Definition Variable
Variable von JS an PHP übergeben?
JS zahlen variable
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.