register_globals

Alles, was PHP betrifft, kann hier besprochen werden.

register_globals

Postby ds80 » 08. August 2008 17:25

Hallo. Ich will meine Website umstellen auf register_globals = off und brauche da mal Hilfe, da ich es nicht hinbekomme. Würde mich freuen wenn man mir eine kleine Starhilfe geben könnte.

Aktuell sieht es so aus (Beispiel).

Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>123</title>
</head>
<body>
<table class="table" border="0" cellpadding="2" cellspacing="0" summary="">
<tr class="hauptt" valign="top">
   <td style="width:200px;" class="line">
<table class="me" cellpadding="2" cellspacing="0" summary="">
<tr>
   <td class="menu" style="font-weight:bold;">Index</td>
</tr>
<tr>
   <td>
      <a href="index.php" <?php if ( $id == m0 ) { echo 'class="activelink"'; } ?>>Startseite</a><br />
      <a href="index.php?id=m1" <?php if ( $id == m1 ) { echo 'class="link"'; } ?>>M1</a><br />
      <a href="index.php?id=m2" <?php if ( $id == m2 ) { echo 'class="link"'; } ?>>M2</a><br />
   </td>
</tr>
<tr>
   <td>
<?
   include("$id.php");
?>
   </td>
</tr>
</table>
<br />
</body>
</html>


Die angeklickten Links öffnen aktuell alle im "include", was auch so sein soll.

Was muss ich nun ändern, damit es mit register_globals off klappt. Je einfacher, desto besser, da zig Seiten geändert werden müssen.

Danke für die Hilfe!
ds80
 
Posts: 16
Joined: 06. April 2008 17:30

Postby Xardas der Dunkle » 08. August 2008 17:32

Code: Select all
      <a href="index.php" <?php if ( $id == m0 ) { echo 'class="activelink"'; } ?>>Startseite</a><br />
      <a href="index.php?id=m1" <?php if ( $id == m1 ) { echo 'class="link"'; } ?>>M1</a><br />
      <a href="index.php?id=m2" <?php if ( $id == m2 ) { echo 'class="link"'; } ?>>M2</a><br />


Erstmal gehören alle Strings in Anführungszeichen, das hat jetzt nix mit register_globals zu tun, aber es ist trotzdem wichtig.
D.h. aus: m1 wird 'm1' bzw. "m1", wobei ich persönlich ersteres bevorzuge.

Zum register_globals, du musst einfach alle GET-Variablen durch: $_GET['name-der-variable'] ersetzen, d.h. aus $id wird $_GET['id']. Für POST nimmst du einfach $_POST und für Cookies $_COOKIE.

mfG
Last edited by Xardas der Dunkle on 09. August 2008 15:31, edited 1 time in total.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby ds80 » 08. August 2008 17:51

Zum register_globals, du musst einfach alle GET-Variablen durch: $_GET['name-der-variable'] ersetzen, d.h. aus $id wird $_GET['id']. Für POST nimmst du einfach $_POST und für Cookies $_COOKIE.


Könntest Du mir das mal anhand des oberen Beispieles zeigen? Ich steige da noch nicht ganz hinter.

Ergänzend sollte man noch erwähnen, dass der Inhalt der jeweiligen Links eine eigene Datei ist. Sprich m0 soll den Inhalt der Datei m0.php einfügen in die Tabelle.

OK habe es. Könnte höchstens bei der Suchabfrage noch Ärger geben, aber darum kümmer ich mich später.
ds80
 
Posts: 16
Joined: 06. April 2008 17:30

Postby glitzi85 » 09. August 2008 12:48

Zusätzliche Erklärung zum Post von Xardas:

D.h. aus: m1 wird 'm1' bzw. "m1", wobei ich versöhnlich ersteres bevorzuge.

Auch ich bevorzuge die erste Variante, doch es gibt einen kleinen aber feinen Unterschied zwischen den zwei Varianten. Hier das entsprechende Beispiel:

Code: Select all
<?php
$foo = 10;
echo "1) Ich möchte $foo Äpfel bestellen";
echo '2) Ich möchte $foo Äpfel bestellen';
?>


Die Ausgabe von PHP würde so aussehen:
    1) Ich möchte 10 Äpfel bestellen
    2) Ich möchte $foo Äpfel bestellen

Hintergrund ist ganz einfach der, dass der String zwischen zwei doppelten Anführungszeichen von PHP ausgewertet wird und eventuell dazwischen vorkommende Variablen durch ihre entsprechenden Werte ersetzt werden. Dies geschieht bei einfachen Anführungszeichen nicht. Dazu wäre für das obige Beispiel z.B. folgender Code notwendig:

Code: Select all
echo '3) Ich möchte '.$foo.' Äpfel bestellen';


Speziell bei Ausgaben in denen überhaupt keine Variablen vorkommen sollte die Variante mit einfachen Anführungszeichen verwendet werden, da diese einfach schneller ist. Ist ja auch logisch, PHP muss nicht erst den ganzen Inhalt parsen, sondern schickt das Teil einfach in den Ausgbepuffer. Kommen jedoch sehr viele Variablen in's Spiel, kann es auch recht schnell unübersichtlich werden. Ich persönlich verwende immer die Variante mit den einfachen Anführungszeichen, es spricht jedoch nichts dagegen die andere Variante zu verwenden. Welche Variante bei verwendung von Variablen schneller ist hab ich noch nicht getestet, müsste ich vielleicht mal machen...

Noch was: Auch Steuerzeichen gehören zu der Kategorie Variablen. Wenn du also reine Textausgabe hast (KEIN html) und du möchtest einen Zeilenumbruch machen (\n), dann MUSS dieser innerhalb von doppelten Anführungszeichen stehen, da dieser sonst nicht ausgewertet wird. Beispiel:

Code: Select all
<?php
header("Content-type: text/plain");
echo 'Foo\n';
echo "Bar\n";
echo 'Foo\n';
?>


Ausgabe von PHP:

    Foo\nBar
    Foo\n


Nur im zweiten Echo wird das \n durch einen Zeilenumbruch ersetzt, in den anderen zwei wird es einfach nur ausgegeben.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim


Return to PHP

Who is online

Users browsing this forum: No registered users and 13 guests