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-Key: 29834

Url: https://administrator.de/contentid/29834

Printed on: April 19, 2024 at 15:04 o'clock

Member: Schrottie
Schrottie Apr 06, 2006 at 06:55:24 (UTC)
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
Mitglied: 25768
25768 Apr 06, 2006 at 11:26:52 (UTC)
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
Member: Dani
Dani Apr 06, 2006 at 11:34:45 (UTC)
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
Member: Freak2k
Freak2k Apr 06, 2006 at 18:39:25 (UTC)
Goto Top
das dürfte wohl etwas einfacher...

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