dani
Goto Top

PHP - Globale Variable verändert sich selber

Guten Morgen,

ich habe gerade einen Administrationsbereich kontrolliert. Dieser ist in PHP geschrieben. Soweit geht auch alles. Bloß bei der Benutzerverwaltung sah ich was außergewöhliches. Wir arbeiten hier mit globalen Variablen (betrifft nur Intranet!!).

Ich habe eine normale Seite. Dort habe ich einen Link.
echo "<a href='modules.php?modul=test&user=$row->benutzer>TEST'</a>";  

Der Benutzername wird vorher aus einer Tabelle (MySQL) herausgeholt. Der Benutzername ist gleich dem Windowslogonname(z.B. DOMÄNE\BENUTZERNAME ->sollte nur einen Backslash sein). Wenn ich nun den IE oder Firefox öffne und nur über den Link fahre, steht unten in der Statusleiste alles korrekt drinne:

http://www.www.de/modules.php?modul=test&user=TEST\geht.nicht //<b>(hier auch nur 1 Backslash!!!)</b>

Klicke ich nun auf den Link, komme ich auf eine neue Seite. Dort gebe nur die Variable $user aus:
echo $user;

Ergebnis:
TEST\\geht.nicht //<b>Hier sind es 2 Backslashe!!</b>

Jetzt stellt sich bei mir die Frage, wo her der 2. Backslash kommt. Ich ändere ja nichts an der Variable. Kann mir von euch jemand sagen woher das kommt und wie das Problem beseitigen kann.


Gruß
Dani

Content-ID: 29834

Url: https://administrator.de/forum/php-globale-variable-veraendert-sich-selber-29834.html

Ausgedruckt am: 16.02.2025 um 21:02 Uhr

Schrottie
Schrottie 06.04.2006 um 08:55:24 Uhr
Goto Top
in PHP wird der \ dafür sorgen das gesonderte Befehle ausgeführt werden aber auch um andere auserkraft zu setzten so bewirkt \$test das nicht der Inhalt von $test ausgegeben wird sonder der name $test. So musst du ja auch für " in einem echo-Satzt ja auch mit einem \ beginnen.

Worauf ich aber hinaus will ist, dass die verdopplung des \ als schutzfunktion gilt, da ja normalerweise das \ vor einem Sonderbefehl steht.

ICh hoffe man kein mein wirsches Zeug lesen. Ist halt noch früh *g*

Wie du das Problem jetzt lösen kannst weis ich nicht. Das einzige was mir spontaneinfält, was abernicht astrein ist, ändere das \ durch einanderes Sonderzeichen oder besser 2 und ersetzte sie auf der nächsten seite, vor dem weiterverarbeiten, durch ein \

Schrottie
25768
25768 06.04.2006 um 13:26:52 Uhr
Goto Top
Hallo,

ja PHP escaped den \ durch einen weiteren \ . Danach gibt er jedoch alle 2 aus.
Aus dem Stegreif heraus, fällt mir gerade keine Lösung zum eigentlichen Problem ein.

Jedoch könntest du die PHP String Funktionen benutzen :
http://de2.php.net/manual/de/function.str-replace.php
also

str_replace("\\","\",$username);

Und danach eben ausgeben

Gruß
Andi
Dani
Dani 06.04.2006 um 13:34:45 Uhr
Goto Top
Hi hier 2,
Des ist mir schon bewusst, dass es so dargestellt wird. Mit der str_replace Funktion habe ichs ai schon probiert. Aber irgendwie sind es immer mehr geworden -> Backslashes!!!

Ich habe es nun so gemacht, dass der Backslash durch §§ ersetzt werden. Danke @all.


Gruß
Dani
Freak2k
Freak2k 06.04.2006 um 20:39:25 Uhr
Goto Top
das dürfte wohl etwas einfacher...

echo '<a href="modules.php?modul=test&user=',$row->benutzer,'">TEST</a>';