Seite 1 von 2

Verfasst: 21.08.2004 04:04
von Furion
Hallo nochmal, :(

ich hab ein erneutes Problem wo ich nicht richtig weiß wo ich ansetzen soll, hoffe jemand hier kann mir dabei helfen.

hiermal ein kleine fereinfachte "Spielerrei": (das Script liegt direkt im root vom Forum)

Code: Alles auswählen

<?php
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

if ($test==1){
    echo("<a href='$PHP_SELF?test=0'>Test auf 0 setzen</a>");
}

if ($test==0){
    echo("<a href='$PHP_SELF?test=1'>Test auf 1 setzen</a>");
}
?>
Das ganze sollte abwechselt 2 Links anzeigen. Je nachdem welchen Wert die Variable $test hat kommt einer der beiden links - anfürsich nix kompliziertes. ;)

Das seltsame dabei is nur das er das nicht macht. Er macht das erst wenn ich die include-common.php Zeile rausnehme - WARUM? Ich kapier das net. :(

PS: Es ist egal wie ich die Variable nenne - immer das gleiche.

Verfasst: 21.08.2004 05:24
von andreasOymann
probier mal

Code: Alles auswählen

<?php 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

$test = $HTTP_POST_VARS['test'];

if ($test==1){ 
    echo("<a href='$PHP_SELF?test=0'>Test auf 0 setzen</a>"); 
} 

if ($test==0){ 
    echo("<a href='$PHP_SELF?test=1'>Test auf 1 setzen</a>"); 
} 
?>

Verfasst: 21.08.2004 11:44
von Furion
andreasOymann hat geschrieben:probier mal

Code: Alles auswählen

<?php 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

$test = $HTTP_POST_VARS['test'];

if ($test==1){ 
    echo("<a href='$PHP_SELF?test=0'>Test auf 0 setzen</a>"); 
} 

if ($test==0){ 
    echo("<a href='$PHP_SELF?test=1'>Test auf 1 setzen</a>"); 
} 
?>
Mh, scheint nicht zu funktionieren. :(

Er Zeigt "Test auf 1 setzen" an und wenn man auf den Link klickt dann steht oben in der leiste dann ".../test.php?test=1". Dann steht weiterhin der Link "Test auf 1 setzen" da und nix mehr geht.

PS: Woher weiß das board eigentlich wie der table_prefix lautet - wo ist der hinterlegt?

EDIT: Das funktioniert - weiß zwar noch nicht genau warum aber es funktioniert (kannst du mir das erklären?). :D

Code: Alles auswählen

<?php 
define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

$test= (!empty($HTTP_POST_VARS['test'])) ? $HTTP_POST_VARS['test'] : $HTTP_GET_VARS['test'];

if ($test==1){ 
    echo("<p><a href='$PHP_SELF?test=0'>Test auf 0 setzen #</a>"); 
} 

if ($test==0){ 
    echo("<p><a href='$PHP_SELF?test=1'>Test auf 1 setzen #</a>"); 
} 
?>
Danke für die Hilfe. :)

Verfasst: 21.08.2004 13:00
von Mungo
Warum es nur mit $HTTP_POST_VARS bzw. $HTTP_GET_VARS funktioniert, kannst du hier nachlesen:
KB:115

Das Prefix steht in der config.php.

Verfasst: 21.08.2004 14:56
von DSB
Furion hat geschrieben: EDIT: Das funktioniert - weiß zwar noch nicht genau warum aber es funktioniert (kannst du mir das erklären?). :D

Code: Alles auswählen

<?php 
$test= (!empty($HTTP_POST_VARS['test'])) ? $HTTP_POST_VARS['test'] : $HTTP_GET_VARS['test'];
?>
Früher bei register_globals=on war jede Variable, die über GET oder POST übergeben wurde, automatisch direkt mit ihrem Namen ansprechbar.
Bei register_globals=off muss man die Variablen erst aus dem Bereich "herausziehen", damit man im Script damit arbeiten kann.

Es gibt also 3 Namensbereiche: den globalen im Script, die POST-Umgebung und die GET-Umgebung.

Bei einem link wie <a href="index.php?test=5"> handelt es sich um die Übergabe per GET-Methode, das heißt, dass nach einem Klick auf den Link die Variable $test mit dem Wert 5 in der Get-Umgebung existiert.
Es gibt aber keine Variable test in der Post-Umgebung und auch keine im globalen Scriptbereich.
Im Script muss man das überprüfen:

Code: Alles auswählen

if (isset($_GET["test"])) $test=$_GET["test"];
und genau das macht die Zeile:

Code: Alles auswählen

$test= (!empty($HTTP_POST_VARS['test'])) ? $HTTP_POST_VARS['test'] : $HTTP_GET_VARS['test']; 
auf deutsch heißt das:
Wenn es die Variable "test" in der POST-Umgebung gibt, dann weise der globalen Variablen "test" den Wert zu, ansonsten nimm den Wert aus der GET-Umgebung.

Ich hoffe, meine Erklärung hat etwas geholfen.
:grin:

Verfasst: 21.08.2004 20:00
von Furion
Früher bei register_globals=on war jede Variable, die über GET oder POST übergeben wurde, automatisch direkt mit ihrem Namen ansprechbar.
Bei register_globals=off muss man die Variablen erst aus dem Bereich "herausziehen", damit man im Script damit arbeiten kann.

Es gibt also 3 Namensbereiche: den globalen im Script, die POST-Umgebung und die GET-Umgebung.

Bei einem link wie <a href="index.php?test=5"> handelt es sich um die Übergabe per GET-Methode, das heißt, dass nach einem Klick auf den Link die Variable $test mit dem Wert 5 in der Get-Umgebung existiert.
Es gibt aber keine Variable test in der Post-Umgebung und auch keine im globalen Scriptbereich.
Im Script muss man das überprüfen:

Code: Alles auswählen

if (isset($_GET["test"])) $test=$_GET["test"];
und genau das macht die Zeile:

Code: Alles auswählen

$test= (!empty($HTTP_POST_VARS['test'])) ? $HTTP_POST_VARS['test'] : $HTTP_GET_VARS['test']; 
auf deutsch heißt das:
Wenn es die Variable "test" in der POST-Umgebung gibt, dann weise der globalen Variablen "test" den Wert zu, ansonsten nimm den Wert aus der GET-Umgebung.

Ich hoffe, meine Erklärung hat etwas geholfen.
:grin:
Alles klar, hab es verstanden :) - danke schön - man lernt nie aus. ;)

Verfasst: 21.08.2004 20:05
von Furion
Eine Frage hab ich noch (ich hoffe ich nerv' nicht :oops: ) - ein Problem wo ich derzeit nicht weiterkomme ...

- und zwar der bbcode-parser

Den Parser für die Smilys konntich ohne große Probleme bei mir einbauen, aber wie geht das bei dem bbcode-parser? Das will bei mir nicht so ganz funktionieren.

Rausgefunden habe ich das ich dazu die bbcode.php im include Verzeichnis brauche. Von dort brauch ich die Funktion "bbencode_second_pass" (brauch ich sonst noch etwas?). Wenn ich das bei mir einbaue kommt die Fehlermeldung:"Fatal error: Call to a member function on a non-object in c:\programme\apache group\apache\htdocs\local\forum\includes\bbcode.php on line 46"

Ich übergebe der oben stehenden Funktion den zu parsenden Text und die bbcode_uid (wozu is die eigentlich gut?).

Verfasst: 21.08.2004 20:38
von DSB
Furion hat geschrieben:Wenn ich das bei mir einbaue kommt die Fehlermeldung:"Fatal error: Call to a member function on a non-object in c:\programme\apache group\apache\htdocs\local\forum\includes\bbcode.php on line 46"
Entschuldige wenn ich es so hart ausdrücke, aber wenn Dir diese Fehlermeldung und die Bezeichnung UID nichts sagt, dann musst Du Dich in punkto objektorientierter Programmierung in PHP und Datenbankanbindung (MySql) noch um einiges schlauer machen.

Die Funktionen sind gut kommentiert und da sollte man sich schon zurechtfinden können - vorausgesetzt man kann nachvollziehen, was da gerade passiert.
Programmtechnisch geht es da schon richtig ans Eingemachte und das kann man nicht mal eben in einem Thread erklären. Sorry. :oops:

Verfasst: 21.08.2004 20:52
von Furion
DSB hat geschrieben:
Furion hat geschrieben:Wenn ich das bei mir einbaue kommt die Fehlermeldung:"Fatal error: Call to a member function on a non-object in c:\programme\apache group\apache\htdocs\local\forum\includes\bbcode.php on line 46"
Entschuldige wenn ich es so hart ausdrücke, aber wenn Dir diese Fehlermeldung und die Bezeichnung UID nichts sagt, dann musst Du Dich in punkto objektorientierter Programmierung in PHP und Datenbankanbindung (MySql) noch um einiges schlauer machen.

Die Funktionen sind gut kommentiert und da sollte man sich schon zurechtfinden können - vorausgesetzt man kann nachvollziehen, was da gerade passiert.
Programmtechnisch geht es da schon richtig ans Eingemachte und das kann man nicht mal eben in einem Thread erklären. Sorry. :oops:
UID wird UserID heißen ... danach war aber nicht gefragt ... ich bin halt nur Einsteiger was parsen abetrifft ... in php & mysql würde ich sagen bin ich Fortgeschrittener.

Entschuldige wenn ich es so hart ausdrücke -> das Forum is doch glaube für Fragen da, wenn man nicht weiterkommt. ;)

Verfasst: 21.08.2004 20:57
von DSB
Ich denke, dass UID eher für unified IDentifier steht, aber egal.
Dann lass mal sehen, was bei Dir in Zeile 46 steht.
Bei mir ist das eine Kommentarzeile (habe aber auch Minerva :-) )