Template Parser logik Problem

r3ddragon

Mitglied
Ich habe mir als Vorlage das Tutorial von Nils Hitze hier aus dem Forum genommen und angepasst.
So hier mal etwas com Code


das Template
HTML:
<center>

<table border="0" width="1000">
	<tr>
		<td><table border="1" width="1000" height="150">
			<tr>
				<td width="700">{HEADER_TXT}</td>
			</tr>
		</table></td>
	</tr>
	<tr>
		<td height="10"></td>
	</tr>
	<tr>
		<td><table border="0" width="1000" height="200">
			<tr>
				<td valign="top">
					<table border="1" width="200">
						<tr>
							<td>{MENU}</td>
						</tr>

					</table>
				</td>
				<td width="15"></td>
				<td valign="top">
					<table border="1" width="800">
						<tr>
							<td>{CONTENT}</td>
						</tr>
					</table>


				</td>
			</tr>
		</td>
	</tr>



</table>
</center>


der Parser
PHP:
<?php
$template = './template.tpl';
$var_array = array(//"CSS" => $css,
                    "HEADER_TXT" => 'Willkommen bei Setup zu RedFame v.0.1',
                    "MENU" => "Schritt 1",
		   "CONTENT" => $content
                    );



 Class parser
 {
  var $template;
  var $temp_content;

  function parser($template, $var_array)
  {
   $this->template = $template;
   $this->temp_content = file($this->template);
   $parsed = $this->rplc($var_array);
   echo(implode("", $this->temp_content));
  }

  function rplc($var_array)
  {
   foreach($var_array as $key => $value)
   {
    //$regex[var_name] : {VARIABLE}
    $regex['var_name'] = "#{[[:space:]]*?(".strtoupper($key)."){1,}?[[:space:]]*?}#si";
    $this->temp_content = preg_replace($regex['var_name'], $value, $this->temp_content);
   }
  }
 }

?>

so und hier das Probelm bzw. mein Logik Fehler
PHP:
<?php

$content = '
Trag hier bitte deine Datenbank Daten ein:</br></br>
<form action="./index.php?action=make_conf" method="post">
<table border="0">
	<tr>
		<td valign="top">Adresse:</td>
		<td><input type="text" name="host" value="localhost"></td>
	</tr>
	<tr>
		<td valign="top">Benutzername:</td>
		<td><input type="text" name="user" value=""></td>
	</tr>
	<tr>
		<td valign="top">Passwort:</td>
		<td><input type="text" name="pass" value=""></td>
	</tr>
	<tr>
		<td></td>
		<td></br><input type="submit" value="Testen und Schreiben"></td>
	</tr>
</table>
</form>

'
if ( $_REQUEST["make_conf"] ) {


$host = $_POST["host"];
$user = $_POST["user"];
$pass = $_POST["pass"];


/* Erstellt Connect zu Datenbank her */
$db = @ mysql_connect ( $host, $user, $pass )
   or die ( "Konnte keine Verbindung zur Datenbank herstellen, bitte pr&uuml;fen Sie die eingegebenen Daten!" );
      if ($db == "true" ) { echo " Erfolg!"; }


}
;
?>

so man kann in eine Variable ( in diesen fall die $content ) keine if anfragen machen , oder? Meine Frage dazu wie komm ich trotzdem dahin das die "action=make_conf" durchfeführt wird?

Achso das ist das erstmal das ich ein TemplateParser einsetze!
Danke schon mal im Vorraus

Andi
 
Bin mir nicht sicher, ob ich das richtig verstanden habe, aber schau dir mal das hier an.

Ich habe deinen Parameter "action" als verstecktes Form-Element deklariert und die if-Condition unterhalb dementsprechend angepasst. Kommt das in etwa dem hin, was du vor hattest? Wenn nein, beschreib mal ein bisschen genauer, was dein eigentliches Problem ist.

PHP:
 <?php

$content = '
Trag hier bitte deine Datenbank Daten ein:</br></br>
<form action="./index.php" method="post">
<input type="hidden" name="action" value="make_conf"/>
<table border="0">
    <tr>
        <td valign="top">Adresse:</td>
        <td><input type="text" name="host" value="localhost"></td>
    </tr>
    <tr>
        <td valign="top">Benutzername:</td>
        <td><input type="text" name="user" value=""></td>
    </tr>
    <tr>
        <td valign="top">Passwort:</td>
        <td><input type="text" name="pass" value=""></td>
    </tr>
    <tr>
        <td></td>
        <td></br><input type="submit" value="Testen und Schreiben"></td>
    </tr>
</table>
</form>

'
if ( $_POST['action'] == "make_conf" ) {


$host = $_POST["host"];
$user = $_POST["user"];
$pass = $_POST["pass"];


/* Erstellt Connect zu Datenbank her */
$db = @ mysql_connect ( $host, $user, $pass )
   or die ( "Konnte keine Verbindung zur Datenbank herstellen, bitte pr&uuml;fen Sie die eingegebenen Daten!" );
      if ($db == "true" ) { echo " Erfolg!"; }


}
;
?>

Grüße
 
Na klar wird action als POST übergeben. Im form - Tag steht doch action="post". Also wird das gesamte Formular per POST übergeben!
 
Also eigendlich müsste das funktionieren. Wenn nicht, setz mal folgendes vor die if-Abfrage und poste, was du ausgegeben bekommst:
PHP:
echo "<pre>" . print_r($_POST, 1) . "</pre>";

Nachtrag
Wenn im action-Tag des Formulars aber steht index.php?do=make_cnf wird die Variable do per GET übergeben, egal was du unter method definiert hast.
 
Entweder habe ich den Code von saftmeister mit dem von r3ddragon verwechselt, oder aber saftmeister hat im Nachhinein noch ein hidden-Field hinzugefügt. :confused:

Wie dem auch sei, wenn action als hidden-Field mit in der Form steht, wird es natürlich per POST übergeben, keine Frage.
Anderen falls natürlich per GET.
 
Ich habe nix im nachhinein hinzugefügt :-)

Aber mir ist grade aufgefallen, das da ohnehin noch ein Syntax-Fehler drin ist. Der content-Block wird nicht Semikolon abgeschlossen.

Zusammenfassend gesagt: Er kann das HTML so übernehmen wie er es hatte, und hätte seine if-condition dementsprechend auf $_REQUEST['action'] oder $_GET['action'] prüfen müssen, oder aber er macht es gleich korrekt und fügt die Elemente ins Form hinzu. Dann enstehen auch keine Irrtümer bezüglich des Arrays, den er prüfen muss. Und $_REQUEST ist ohnehin böse! ;-)

Grüße

Edit: Natürlich muss das Semikolon am Ende des Scripts noch verschwinden.
 
Zurück