Portal > Foren > PHP > PHP-Programmierung > PHP template und schleifen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 19.09.2007, 16:53 Nach oben    #21
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

das wird ausgegeben.
HTML-Code:
string(76) " Themenzeit: Deine Gilde! " 
kann damit nicht wirklich was anfangen.

PHP-Code:
$result mysql_query("SELECT * FROM roforum_topics  where forum_id='17'  ORDER BY topic_id DESC LIMIT 0,1"); 
Wenn der wert bei limit auf 1 steht geht es sobald ich es auf 5 stelle kommt die fehlermeldung wieder.

HTML-Code:
string(69) " Themenzeit: Deine Gilde! " 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 67

Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 72
string(0) "" 
Notice:  Undefined index:  0 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 76
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.09.2007, 18:03 Nach oben    #22
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ok gib mir mal bitte deinen Codebereich nochmal und schreib die Zeilennummern vorne ran.
Der Fehler ist einfach: Arrayindex 0 und 1 existieren nicht in dem Moment, in dem du darauf zugreifen willst.
Wenn
Zitat:
string(69) " Themenzeit: Deine Gilde! "
die Ausgabe der Variable ist, auf die du versuchst mit dem Arrayindex 1 zuzugreifen, dann ist es klar. Die Variable ist ein String und kein Array.

Aber erstmal den Code nochmal mit Zeilennummern vorne dran
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.09.2007, 18:13 Nach oben    #23
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

PHP-Code:
  60  function assign_array($replace$replacement_array) {
  
61      $matches = array ();
  
62      preg_match('/\{foreach \$'.$replace.'\}(.*?)\{\/foreach\}/si'$this->template$matches);
       
  
64     $keys array_keys($replacement_array['0']);
  
65      $row '';
  
66      foreach ($replacement_array as $array) {            
  
67            $items $matches['1'];
  
68          foreach ($keys as $key) {

  
70             $items str_replace($this->leftDelimiter.$key.$this->rightDelimiter$array[$key], $items);
    
  
72         }
  
73         $row .= str_replace($matches['1'], $row$items);
  
74          $row rtrim($row);
  
75      }
  
76      $all_rows preg_replace('/\r\n/si'''rtrim($row), 1);
  
77      $this->template str_replace($matches['0'], $all_rows$this->template);
  
78      return true;
79    
Die ausgabe mit den var_dump() dazu
HTML-Code:
string(66) " {$topic_title} " string(69) " Themenzeit: Deine Gilde! " string(122) "{$name}  Themenzeit: Deine Gilde!  " 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 67
NULL 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 73
string(0) "" 
Notice:  Undefined index:  0 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 77
string(122) "{$name}  Themenzeit: Deine Gilde!  " 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 67
NULL 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 73
string(0) "" 
Notice:  Undefined index:  0 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 77
string(122) "{$name}  Themenzeit: Deine Gilde!  " 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 67
NULL 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 73
string(0) "" 
Notice:  Undefined index:  0 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 77
string(122) "{$name}  Themenzeit: Deine Gilde!  " 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 67
NULL 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 73
string(0) "" 
Notice:  Undefined index:  0 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 77
string(122) "{$name}  Themenzeit: Deine Gilde!  " test  Themenzeit: Deine Gilde!
das ist die index.php
PHP-Code:
$test = array(

array(
"topic_title" => $data["topic_title"],
"topic_id" => $data["topic_id"]
)
);

$tpl->assign_array("news" $test); 

Geändert von Victorious (19.09.2007 um 18:51 Uhr)
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.09.2007, 20:12 Nach oben    #24
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

hm denke woran es liegen könnte, es werden einfach alle werte dran gehängt anstatt sie zu überschreiben. Hab durch das debuging festgestellt das er alle werte übergibt.
Siehe hier:
HTML-Code:
string(66) " {$topic_title} " string(24) "Themenzeit: Deine Gilde!" string(4) "1109" 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 66
NULL string(19) "Wartungen am Montag" string(4) "1077" 
Notice:  Undefined index:  1 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 73

Notice:  Undefined index:  0 in /is/htdocs/wp1009673_FMKUCXMAF1/www/php/cls/template.class.php on line 77
Ich weiss aber absolut nicht wie ich das beheben kann.
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.09.2007, 23:22 Nach oben    #25
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

hm... also laut deiner Ausgabe, ist allein $matches schuld.
Du müsstest also mal schauen was nach dem preg_match() in $matches drin steht.
Gute optische Ausgabe erreichst du bei einer Debugausgabe so:
PHP-Code:
<?php
  
echo "<pre>";
  
var_dump($matches);
  echo 
"</pre>";
?>
Wenn du das hast, dann her damit
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.09.2007, 00:25 Nach oben    #26
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

hab das mal getan und die ausgabe sieht so aus.

HTML-Code:
array(2) {
  [0]=>
  string(91) "{foreach $news}
{$topic_title}
{/foreach}"
  [1]=>
  string(66) "
{$topic_title}
"
}
array(0) {
}
somit ist es auch kein wunder das er Undefined index: 1 bzw 0 sagt,aber wieso ist da nix drin?

Geändert von Victorious (20.09.2007 um 00:38 Uhr)
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.09.2007, 10:25 Nach oben    #27
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Das ist eine gute Frage.
Du müsstest dich jetzt nach oben "debuggen", also schauen, was in den Variablen steht die du preg_match() übergibst (also in deinem Fall $this->template) bzw schauen was in den Variablen steht, die du deiner Funktion assign_array() übergibst.
Also direkt nach dem Funktionskopf einfach mal $replace und $replacement_array ausgeben lassen.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.09.2007, 10:40 Nach oben    #28
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

Habe ich auch mal gemacht einmal für $replace dann für $replacement_array und für $this->template.
Für die $replace kommt das raus
HTML-Code:
string(4) "news"
string(4) "news"
bei $replacement_array
HTML-Code:
array(2) {
  ["topic_title"]=>
  string(24) "Themenzeit: Deine Gilde!"
  ["topic_id"]=>
  string(4) "1109"
}
array(2) {
  ["topic_title"]=>
  string(19) "Wartungen am Montag"
  ["topic_id"]=>
  string(4) "1077"
}
bei $this->template das
HTML-Code:
string(110) "{$name}
{foreach $news}
{$topic_title}
{/foreach}  
"

string(84) "{$name}
Themenzeit: Deine Gilde!  
"

hm also mir scheint das so das die werte richtig übergeben werden aber der fehler liegt dann bei $this->template oder ? Beim 2 durchlauf ist ja schon das {foreach $news}
{$topic_title}
{/foreach} schon ersetzt wurden.Wie kann ich das ändern das er das erst ersetz wenn alles durchlaufen ist?

Geändert von Victorious (20.09.2007 um 10:50 Uhr)
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.09.2007, 11:13 Nach oben    #29
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ich will dich ja bissle zum selber Nachdenken anregen und dir nichts fertiges vorsetzen.
Es sieht für mich so aus, als wenn du selbst noch nicht so ganz verstanden hast, was deine Methode macht.
Also am besten gehst du jetzt Zeile für Zeile durch und schreibst kurz als Kommentar dahinter was die Zeile macht.
Notfalls auch auf Papier schreiben, was in welcher Reihenfolge passiert. Dann siehst du am schnellsten, wo der Fehler ist.

Probier das mal. Geht ja recht schnell...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.09.2007, 11:44 Nach oben    #30
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

hm ich komm einfach ned drauf.
Also mit preg_match wird doch die tpl mit meinem suchmuster durchsucht.

mit $match[1] wird dann der teil aus dem array rausgeholt der ersetzt werden soll.

Durch die foreach schleifen werden alle array durchlaufen.

PHP-Code:
$items str_replace($this->leftDelimiter.$keys.$this->rightDelimiter$key$items); 
und hier wird das dann ersetzt was später als ausgabe raus soll.

mit rtrim werden die leerräume entfernt.

Bei preg_replace wird wird nach einem regulären ausdruck gesucht und ersetzt
PHP-Code:
$all_rows preg_replace('/\r\n/si'''rtrim($row), 1);        
        
$this->template str_replace($matches[0], $all_rows$this->template); 
Oder ist das falsch. Ich weiss echt nicht mehr weiter.Kann doch ned sein das ich so blöd bin oder doch?
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.09.2007, 12:06 Nach oben    #31
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Zitat:
Kann doch ned sein das ich so blöd bin oder doch?
Nein das sicher nicht.
Ich bin grade auf Arbeit und kann daher selbst jetzt nicht Hand anlegen. Ich schau mir das heute Abend en Detail an.
Bis dann!
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 10:57 Nach oben    #32
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

sorry hab erst heute geschafft.
PHP-Code:
<?php
    
function assign_array($replace$replacement_array) {
      
$matches = array ();
      
preg_match('/\{foreach \$'.$replace.'\}(.*?)\{\/foreach\}/si'$this->template$matches);
      
$keys array_keys($replacement_array['0']);
      
$row '';
      foreach (
$replacement_array as $array) {            
        
$items $matches['1'];
        foreach (
$keys as $key) {
          
$items str_replace($this->leftDelimiter.$key.$this->rightDelimiter$array[$key], $items);
        }
        
$row .= str_replace($matches['1'], $row$items);
        
$row rtrim($row);
      }
      
$all_rows preg_replace('/\r\n/si'''rtrim($row), 1);
      echo 
"vor template:<br/>";
      echo 
"<pre>".var_dump($this->template)."</pre>";
      
$this->template str_replace($matches['0'], $all_rows$this->template);
      echo 
"nach template:<br/>";
      echo 
"<pre>".var_dump($this->template)."</pre>";
      return 
true;
    }
?>
Damit solltest du eigentlich sehen was das Problem ist.
Wenn nicht, sag bescheid, dann versuche ich das nochmal bissle besser zu erklären
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 14:05 Nach oben    #33
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

hm bringt mir auch nicht wirklich weiter. Ich seh halt nur das er beim ersten durch lauf das findet:

HTML-Code:
vor template:
string(110) "{$name} {foreach $news} {$topic_title} {/foreach}   " 

Dann das ersetzt
HTML-Code:
nach template:
string(84) "{$name} Themenzeit: Deine Gilde!   " 
Und beim 2 durchlauf das :
HTML-Code:
 vor template:
string(84) "{$name} Themenzeit: Deine Gilde!   " 
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 14:09 Nach oben    #34
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Richtig. Nun beleibt doch die Frage: Wenn du $this->template im ersten Durchlauf überschreibst, dann kannst du damit nichts mehr anfangen...
Es ist also wichtig, dass du erstmal deine Daten sammelst (z.B. in einer temporären Variable) und dann $this->template überschreibst bzw mit Daten füllst die du auch brauchst.

Problem verstanden?
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 14:18 Nach oben    #35
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

jo das habe ich verstanden. nur wie sammel ich die daten am besten?
Ich hätte da ne überlegung so zb.

PHP-Code:
   <?php

class tpl
{
     var 
$tplvar = array();

function 
assign_array($replace$replacement_array) { 
  
$this->tplvar[$replace][] = $replacement_array;
}
?>

Geändert von Victorious (21.09.2007 um 14:22 Uhr)
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 14:27 Nach oben    #36
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Warum so kompliziert mit Array?
PHP-Code:
var $tmp "";

function 
assign_array($replace$replacement_array) {
      
$matches = array ();
      
preg_match('/\{foreach \$'.$replace.'\}(.*?)\{\/foreach\}/si'$this->template$matches);
      
$keys array_keys($replacement_array['0']);
      
$row '';
      foreach (
$replacement_array as $array) {            
        
$items $matches['1'];
        foreach (
$keys as $key) {
          
$items str_replace($this->leftDelimiter.$key.$this->rightDelimiter$array[$key], $items);
        }
        
$row .= str_replace($matches['1'], $row$items);
        
$row rtrim($row);
      }
      
$all_rows preg_replace('/\r\n/si'''rtrim($row), 1);
      echo 
"vor template:<br/>";
      echo 
"<pre>".var_dump($this->template)."</pre>";
      
$this->tmp .= str_replace($matches['0'], $all_rows$this->template);
      echo 
"nach template:<br/>";
      echo 
"<pre>".var_dump($this->template)."</pre>";
      return 
true;
    }

    function 
out()
    {
        echo 
$this->tmp;
        return 
true;
    } 
Aber der Weg ist der richtige, du darfst halt dein Template nicht so ersetzen, dass deine Schleifen verloren gehen.
Und jetzt viel Spass beim weiterarbeiten
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 14:44 Nach oben    #37
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

ah ok danke dir. Ich werd das aber trozdem noch mal überarbeiten das ganze t und hier posten und bräuchte dann feedback.Denke dazu werde ich nen neuen thread auf machen. Noch mal vielen dank für die hilfe.Wobei ich hab da trozdem noch mal ne frage?Kann sein das sie ein wenig überstürtz ist, aber ich habe meine seiten damals so gestealltet:

PHP-Code:
switch($_GET['modul']) 
{
  default : 
news_system($eintrag);break;
  case 
sektion sektion($sektion);break;


function 
news_system($eintrag)

inhalt 

Ich wusste sonst nicht anders wie ich den seiten inhalt ändern könnte.Gibt es den ne ander vlt bessere möglichkeit dazu, weil das funktioniert nämlich nicht mehr mit dem template zumindest nicht in meinem?

Geändert von Victorious (21.09.2007 um 15:06 Uhr)
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 15:10 Nach oben    #38
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Ein default-Zweig muss immer als letztes stehen.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 15:15 Nach oben    #39
Benutzer
 
Registriert seit: 16.09.2007
Beiträge: 65
Standard

darum ging es in der frage zwar nicht aber trozdem danke für den hinweis.
Victorious ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.09.2007, 16:03 Nach oben    #40
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Für den Anfänger und für kleine private Homepages ist dieser weg richtig. Warum dass nun mit deinen Templates nicht funktionieren soll verstehe ich nicht.

Für andere Möglichkeiten gibts z.B. URL-Rewrites, Model-View-Controller Technik oder oder oder Einfach mal im Forum stöbern, dass ist schon sehr oft angesprochen worden.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen