Seite 1 von 2

$PHP_SELF Variable in eingebundener php-Seite

Verfasst: 16.02.2005 14:30
von REincarnation
Moinsen,

ich habe eine extra Seite in mein phpBB v2.0.11 eingebunden. Es soll ein einfacher Marketingrechner werden. Die Seite sieht bisher so aus...

Code: Alles auswählen

<?php 
//Benötigte Dateien und Variablen von phpBB 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 


//Session auslesen und Benutzer-Informationen laden 
$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 

//Dieser Block kann weggelassen werden, wenn du nur den die Userdaten brauchst und auf den phpBB-Header verzichen möchtest 
$page_title = 'CvR Onlinemarketing'; 
include($phpbb_root_path . 'includes/page_header.'.$phpEx); 

// Config
$klick = "0.258620689";
$anzahl = $_POST['anzahl'];
// Formel
$ergebnis = number_format($klick*$anzahl/100*116,2,",",".");
?>
<table width="100%" cellspacing="1" cellpadding="4" border="0" align="center" class="nav">
  <tr>
    <td class="nav" align="left" valign="middle"><a href="index.php">CVR & ML Board Foren-&Uuml;bersicht</a></td>
  </tr>
</table>

<br>
<table width="100%" border="0" cellpadding="2" cellspacing="1" class="forumline">
  <tr>
    <th height="25" colspan="2" nowrap="nowrap">CvR Onlinemarketing </th>
  </tr>
  <tr>
    <td class="row"><p><br>
	<table width="90%" border="0" cellpadding="0" cellspacing="0" align="center">
	  <tr>
	    <td>
      Werben Sie auf unseren Seiten und unterst&uuml;tzen Sie uns als Verein in unserer Arbeit. Mit einer durchschnittlichen Besucherzahl von 11.500 Visits pro Monat erreichen Sie ein breitgef&auml;chertes Publikum. Ausf&uuml;hrliche Statistiken und individuell angepasste Pakete erm&ouml;glichen Ihnen so einen umfassenden &Uuml;berblick. </p>
<p>  Nutzen Sie dazu doch einfach unseren Marketingrechner.</p>
<form method="post" action="<? echo $PHP_SELF ?>" onSubmit="return chkFormular()" name="Formular">
		  <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
        	<tr valign="middle">
        	  <td height="30" colspan="2"><strong>Rechnen Sie ihr individuelles Angebot... </strong></td>
       	    </tr>
        	<tr>
          	  <td>Klicks pro Monat: </td>
          	  <td align="right"><input type="text" name="anzahl" value="<? echo $anzahl; ?>" style="text-align:right;"></td>
        	</tr>
        	<tr align="right">
        	  <td height="30" colspan="2" valign="middle"><input type="submit" name="submit" value="Berechnen"></td>
       	    </tr>
      	  </table>
</form>

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
  	<td>
<?php
if ($submit) {
	echo '<table width="500" border="0" cellpadding="0" cellspacing="0" align="center">
			<tr>
			  <td width="200"><b>Monatlicher Betrag:</b></td>
			  <td align="right" width="300"><b>' . $ergebnis . ' €</b></td>
			</tr>
			<tr>
			  <td colspan="2"><br><font color="red" size="1">Das vorstehende Angebot ist unverbindlich und freibleibend. Der Endbetrag versteht sich inklusive 16% Mehrwertsteuer.</font></td>
			</tr>
		  </table>';
} else {
	echo '';
}
?>
	</td>
  </tr>
</table>

<p>Auf Wunsch erstellen wir Ihnen auch ein passendes Banner f&uuml;r Ihre Kampagne. Sprechen Sie uns an.</p>
<p>Email: XXX</p>
<p>&nbsp;</p>
		  </td>
  	  	</tr>
	  </table>
	</td>
  </tr>
</table>

<?php
//Footer - nur dann weglassen, wenn du auch den Header weglässt 
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
?>
Ohne die phpbb-Angaben funktioniert das Script. Nur wenn ich es eingebunden und hochgeladen habe, erscheint keine if-Bedingung ($submit). Könnt ihr mir auf die Sprünge helfen, wo mein Fehler liegt?

Verfasst: 16.02.2005 15:21
von Blutgerinsel
  1. Man prüft die Existenz einer Variablen mit isset();
    $submit existiert nur bei register_globals on was "aus" sein muss.
  2. Man verwendet das PHPBB Environment wenn man darin etwas einbindet daher muss man auch.....$HTTP_POST_VARS['submit'] und $HTTP_SERVER_VARS['PHP_SELF']
    verwenden.................da $_POST etc. entfernt wird durch das Environment
  3. Was soll das darstellen ein Zahlenformat was als String angesehen wird ? $klick = "0.258620689";
  4. Warum steht HTML in einem template basierenden Board im Code ?
  5. Debugging?

Verfasst: 16.02.2005 17:28
von REincarnation
Erstmal danke. Nur übersteigt das fürs Erste mein phpbb-Verständnis. Nicht jeder ist Profi - sonst wären wir nicht hier. Kannstu mir das mit dem Environment genauer erklären?

Verfasst: 16.02.2005 18:31
von Blutgerinsel
REincarnation hat geschrieben:Erstmal danke. Nur übersteigt das fürs Erste mein phpbb-Verständnis. Nicht jeder ist Profi - sonst wären wir nicht hier. Kannstu mir das mit dem Environment genauer erklären?
In der common.php vom PHPBB werden diverse Sicherheitseinstellungen die in PHP möglich sind simuliert, da dies möglicherweise falls man sich auf irgendwelche Pseudo Admin Konfigurationen naiv stützt zum Supergau führen könnte. Daher werden u.A. registierte Variabeln entfernt und bestehende Superglobale Array wie $_POST kopiert und $HTTP_POST_VARS zugewiesen. Weil $_POST ist u.A. erst seit ca. PHP 4.1.0 eingeführt worden.

Um die unterschiedlichen PHP Versionen in ihren Eigenheiten zu unterstützen gibt es u.A. dieses Environment....

Verfasst: 16.02.2005 22:24
von REincarnation
Ah alles klar...gut. Gut dann weiß ich schon wieder mehr. Nur ich verstehe dennoch nicht, wie ich das nun auf meine Seite anwenden kann. ich bin leider noch nicht so bewandert in php und habe mir das bisher nur durch lesen mit Mühe und Not angeeignet. Wie ich jetzt festgestellt habe nichtmal auf dem neuesten Stand bzgl. register_globals. Das mit der Variable prüfen durch isset() habe ich umgesetzt. Nur der Rest macht noch Schwierigkeiten.

Verfasst: 17.02.2005 00:02
von Blutgerinsel
Jeder fängt mal klein aber was hast du für Probleme noch? :wink:

Verfasst: 17.02.2005 11:24
von REincarnation
Ehrlich gesagt verstehe ich immernoch nicht wie ich die Variablen verwenden muss. Muss ich dann noch Änderungen in der common.php vornehmen? Könntest du mir sonst mal eine Codestelle für mich posten, wie es eingebaut werden muss? Normalerweise versuche ich sowas selbst hinzukriegen, aber ich habs gestern versucht und nichts gebacken bekommen.

Verfasst: 17.02.2005 12:48
von Blutgerinsel
mach mal ein

Code: Alles auswählen

echo "<pre>";
print_r($HTTP_POST_VARS);
echo "</pre>";
Auch solltest du $PHP_SELF durch $HTTP_SERVER_VARS['PHP_SELF'] ersetzen......

Am besten Kontrollierst du im Browserquelltext ob das Formular an die richtige Datei indem Fall an sich selbst geschickt wird.....

BTW: Du solltest dennoch die Template Engine verwenden, man sieht hier z.B. genau das unübersichtlich wird....

Verfasst: 17.02.2005 13:13
von REincarnation
Also ich habe es nun geschafft, dass das Formular an sich selbst sendet. Nur leider funktioniert die if( isset($submit)) Funktion noch nicht. Das Ergebnis wird nicht angezeigt.

Ich habe mal meine Datei verlinkt: marketing.php.txt

Mit dem Templatesystem wollte ich das auch noch versuchen. Nur wollte ich das Script erstmal zum laufen bekommen. Danach versuche ich es anzupassen.

Verfasst: 17.02.2005 14:46
von Blutgerinsel
Du solltest schon aus if (isset($submit)) auch ein

Code: Alles auswählen

if( isset($HTTP_POST_VARS['submit']) )
machen :D

BTW: Die Verzweigung danach

Code: Alles auswählen

else {
echo '';
}
ist denke ich sinnfrei... :wink: