PHP - Template/Class - Fehler im Code, wer kann mir helfen?

Alles, was PHP betrifft, kann hier besprochen werden.

PHP - Template/Class - Fehler im Code, wer kann mir helfen?

Postby Franz Reiter » 21. August 2003 11:43

Hi!
Habe aus nem Buch den Code abgeschrieben, der funktioniert aber nicht! Bitte entschuldigt den vielen Code, ist aber notwendig :(
Zweck des ganzen soll sein: Die Tags im Html-Code (eingeschlossen in {}) sollen durch aktuelle Werte ersetzt werden. Der seiten-titel und der buchstabe werden ersetzt, aber zeilen.adressen wird nicht ersetzt. Meine Nachforschungen haben ergeben, daß zwar die Variable zeilen.adresse im Array $variablen aufscheint (als $zeichenfolge ausgelesen, aber der dazugehörige Wert $$zeichenfolge leer ist (für die Variable zeilen.adresse) alles in der function adresse_sql, die Variable $vollstaendige_tabelle in der function datei_parser aber richtig belegt ist,
Der Aufruf index.php:
Code: Select all
<?
include("vorlage.class");
$seiten_titel = "Adressbuch";
// die standardseite ruft Personen ab, deren Nachname mit 'A' beginnt
if (! isset($buchstabe) ) :
   $buchstabe = "A";
endif;

$vorl = new vorlage;
$vorl->datei_registrieren("buch", "buch.html");
$vorl->variablen_registrieren("buch","seiten_titel,buchstabe");
$vorl->adresse_sql("buch","zeilen.adressen","$buchstabe");
$vorl->datei_parser("buch");
$vorl->drucke_datei("buch");
?>

Die Html-Datei buch.html:
Code: Select all
<title>::::{seiten_titel}::::</title>
</head>
<body bgcolor="white">
<table cellpadding=2 cellspacing=2 width=600>
<h1>Adressbuch: {buchstabe}</h1>
<tr><td>
<a href="index.php?buchstabe=A">A</a> |
........
</td></tr>
  {zeilen.adressen} 
</table>
</body>
</html>

Und schliesslich die Datei vorlage.class:
Code: Select all
<?
class vorlage {
   var $dateien = array();
   var $variablen = array();
   var $sql = array();
   var $oeffnend_escape = '{';
   var $schliessend_escape = '}';
   
   var $host = "localhost";
   var $benutzer = "root";
   var $kennwort = "";
   var $db = "buch";
   var $adressen_tabelle = "Adressbuch";

function datei_registrieren($datei_id, $datei_name) {
      
      // Datei $datei_name zum Lesen öffnen oder beenden und Fehlermeldung ausgeben
      $dh = fopen($datei_name,"r") or die("Datei $datei_name konnte nicht geöffnet werden!");
      
      // Gesamten Inhalt der Datei $datei_name lesen
      $datei_inhalte = fread($dh, filesize($datei_name));
      
      // Diese Inhalte einer Position im Array zuweisen, Die Position wird durch den Schlüssel $datei_id angegeben
      $this->dateien[$datei_id] = $datei_inhalte;
      
      // Wir benötigen die Datei nicht länger, also schliessen
      fclose($dh);
   } // Ende datei_registrieren
   function variablen_registrieren($datei_id,$variablen_name) {
   
      // Array aus übergebenen Variablen erstellen
      $eingabe_variablen = explode(",",$variablen_name);
      
      // Variablenname der nächsten Position im $datei_id_Array zuordnen
      while (list(,$wert) = each($eingabe_variablen)):
      
         // den Wert einer neuen Position im $this->variablen_array zuordnen
         $this->variablen[$datei_id][] = $wert;
         
      endwhile;
      
   } // Ende variablen_registrieren
   function adresse_sql($datei_id, $variablen_name, $buchstabe) {
   
      // MySQL-Serververbindung aufbauen und datenbank auswählen
      mysql_connect($this->host, $this->benutzer, $this->kennwort) or die("Verbindung zu MySQL-Server nicht möglich!");
      mysql_select_db($this->db) or die("Auswahl der MySQL-Datenbank nicht möglich!");
      
      // Datenbank abfragen
      $abfrage = "SELECT nachname, vorname, tel, email FROM $this->adressen_tabelle WHERE nachname LIKE '$buchstabe%'";
      $ergebnis = mysql_query($abfrage);

      // Datei "zeilen.adressen" öffnen und Inhalte in Variable einlesen
      $dh = fopen("$variablen_name","r");
      $datei_inhalte = fread($dh,filesize("zeilen.adressen"));
      
      // Variablennamen durch Tabellendaten ersetzen
      while ($zeile = mysql_fetch_array($ergebnis)):
   
         $neue_zeile = $datei_inhalte;
         
         $neue_zeile = str_replace($this->oeffnend_escape."nachname".$this->schliessend_escape,
            $zeile["nachname"],
            $neue_zeile);
         
         $neue_zeile = str_replace($this->oeffnend_escape."vorname".$this->schliessend_escape,
            $zeile["vorname"],
            $neue_zeile);         
      
         $neue_zeile = str_replace($this->oeffnend_escape."telefon".$this->schliessend_escape,
            $zeile["tel"],
            $neue_zeile);
            
         $neue_zeile = str_replace($this->oeffnend_escape."email".$this->schliessend_escape,
            $zeile["email"],
            $neue_zeile);         
         
         // Neue Tabellenzeile an vollständig ersetzte Zeichenfolge anhängen
         $vollstaendige_tabelle .= $neue_zeile;
         
      endwhile;
   
      // Zeichenfolge für Tabellenersetzung einem SQL-Arrayschlüssel zuweisen
      $sql_array_schluessel = $variablen_name;
      $this->sql[$sql_array_schluessel] = $vollstaendige_tabelle;
      
      // Schlüssel dem Variablenarray für spätere Suchläufe hinzufügen
      $this->variablen[$datei_id][] = $variablen_name;

      // Dateihandle schliessen
      fclose($dh);

      } // Ende von adresse_sql
   function datei_parser($datei_id) {
      
      // Wie viele Variablen sind für diese Datei registriert?
      $varzaehler = count($this->variablen[$datei_id]);
      
      // Wie viele Dateien sind registriert?
      $schluessel = array_keys($this->dateien);
      
      // Wenn Schlüssel $datei_id im $this->dateien_array vorliegen und einige registrierte variablen aufweist...
      if ((in_array($datei_id,$schluessel)) && ($varzaehler > 0)):
         
         //$x zurücksetzen
         $x = 0;
         
         //Wenn weitere Variablen analysiert werden müssen...
         while ($x < sizeof($this->variablen[$datei_id])):
   
            // Nächste Variable abrufen
            $zeichenfolge = $this->variablen[$datei_id][$x];
            
            //Diesen Variablenwert abrufen! Beachten Sie, dass ich eine Variablenvariable zum Abrufen des Wertes verwende.
            // Dieser Wert ersetzt im Dateiinhalt den entsprechenden Variablennamen
            GLOBAL $$zeichenfolge;
            
         
            // Was genau wird in den Dateiinhalten erstezt?
            $nadel = $this->oeffnend_escape.$zeichenfolge.$this->schliessend_escape;

            // Zeichenfolgenersetzung durchführen
            $this->dateien[$datei_id] = str_replace(
                                    $nadel,                // Nadel
                                    $$zeichenfolge,          // im
                                    $this->dateien[$datei_id]   // Heuhaufen
                                    );   
            
            // Erhöhung $x
            $x++;
         endwhile;
      endif;
   } // Ende Datei_parser
   function drucke_datei($datei_id) {
   
      // Durch $datei_id referenzierte Inhalte ausdrucken
      print $this->dateien[$datei_id];
      
   } // Ende von Drucke_datei

Und nocht die Datei zeilen.adressen:
Code: Select all
<tr><td bgcolor="#C0C0C0">
<b>{nachname},{vorname}</b>
</td></tr>
<tr><td>
<b>{telefon}</b>
</td></tr>
<tr><td>
<b><a href = "mailto:{email}">{email}</a></b>
</tr></td>
Franz Reiter
 

Return to PHP

Who is online

Users browsing this forum: No registered users and 22 guests