Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Zwei Variablen auf gleichheit prüfen...





Frage

Hallo, ich bin fast mit den Nerven am Ende... Das Problem ist bestimmt eine einfache Sache, aber genau das macht mir immer Probleme! Also: Ich lese einen String aus: Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0 [en] Nun möchte ich, dass wenn das Ergebnis "Opera" lautet, (was soweit auch funktioniert- die Variable $brow hat den Wert 'Opera') eine include-Anweisung, oder auch nur eine echo-Meldung ausgegeben wird. Leider läuft das Script immer weiter.. Wahrscheinlich habe ich hier nicht die richtige Schreibweise, oder ich mache hier einen Grundlegenden Fehler?? Was kann ich machen, dass, wenn die '$brow' den Wert 'Opera' enthält, ich auf die opera3.php umleiten kann?? <?php $brow = substr($HTTP_USER_AGENT, -15, -9); echo "$brow<br>"; if ($brow=='Opera'){ include("opera3.php");} else echo "Error"; ?> ================ Auch diese Variante funktioniert leider nicht. <?php $op = "Opera"; $brow = substr($HTTP_USER_AGENT, -15, -9); echo "$brow<br>"; if ($brow==$op) include("opera3.php"); else echo "Error"; ?> Vielen Dank im Voraus!!!! Gruss Frank

Antwort 1 von semi

Siehe Antwort 5

Antwort 2 von Renegade

Warum prüfst du nicht mit eregi("opera",$SERVER['HTTP_USER_AGENT']) den Browser und leitest so auf die jeweilige Seite weiter?

@semi
preg_match basiert auf Perl Regulär Expressions und schluckt im Vergleich zu den String-Operationen 20% mehr an Ressourcen, für ne einfache Weiterleitung braucht man das nicht oder doch?

@Frankie, wenn du auch noch nen bissel mehr an Sicherheit denkst, stellst du im ini-File register_globals auf off und nutzt entweder HTTP_SERVER_VARS["HTTP_USER_AGENT"] um Abwärtskompatibel zu bleiben oder die neue vordefinierte Variable $_SERVER["HTTP_USER_AGENT"] ab Ver. 4.1 (ist eigentlich gar nicht mehr so neu)

Ansonsten kann es mal passieren, das ein kleines böses Skript deine Präsenz lahmlegt, wenn du so File und Datenbankzugriffe umsetzt.


define('OPERA','Opera');

if(eregi(OPERA,$_SERVER['HTTP_USER_AGENT']))
{
    include("opera3.php");
}
else
{
    print "Du musst draussen bleiben";
    exit;
}    


Antwort 3 von Frankie-bs

Hallo,
@Renegade,
das was ich hier gepostet habe ist ja nur ein Teil des ganzen Scripts.
Ich arbeite schon mit 'eregi' und das funktioniert auch ganz gut, aber diese Sache ist etwas besonderes, da man im Opera Browser in den Optionen den UserAgen ändern kann und somit einen Opera als z.B.: MSIE ausgeben kann.
(Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0 [en])
Um auch dass zu erkennen, habe ich diesen Weg versucht, den String von hinten aufzulösen und nur den Wert "Opera", der immer an selber Stelle steht auszulesen.
Das heisst, wenn ich den Opera nun als Mozilla ändere, so wird auch dann "Opera" an 15 Stelle von Hinten ausgegeben...so kann ich erkennen, dass es sich um einen Opera Browser handelt, wo der User den UserAgent geändert hat...

Bleibt trotsdem immer noch das Problem, warum ich die beiden Variablen nicht vergleichen kann????

...if ($brow=='Opera')...
den die Variable '$brow' hat eindeutig den Wert "Opera"!!

Gruss Frank






Antwort 4 von Renegade

ja, wenn der Opera sich als was ausgeben muss, was er nicht ist, hat der natürlich mächtig Komplexe ;-)

In diesem Fall müsstest du jeden User-Agent als MSIE oder Netscape prüfen, falls dies der Fall ist, ist immer noch zu prüfen ob sich dahinter vielleicht nicht doch ein Opera versteckt, die Sache ist zwar auch nicht so ganz sauber, aber immer noch besser als mit substr zu arbeiten.


define ('OPERA','opera');
define ('MSIE','msie');

$USER_AGENT = "(Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0 [en])";
if(eregi(MSIE,$USER_AGENT))
{
     if(eregi(OPERA,$USER_AGENT))
        print 'Opera';
     else
        print 'M$';
}


cu *wink*

Antwort 5 von Frankie-bs


So, Freunde
habt vielen Dank für eure Hilfe...
ich hatte es ja schon vermutet- es war natürlich nur eine Kleinigkeit *rotwerd*

Beim Auslesen der Variable
($brow = substr($HTTP_USER_AGENT, -15, -9);) ist eine Stelle zu viel, dass heißt ein Leehrzeichen!!! *blödsein*

Also habe ich erst mit trim gearbeitet und dann 'substr' richtig ausgezählt..
Alles OK!

Nochmals vielen Dank und weiterhin alles Gute!

Gruss Frank




Antwort 6 von semi

Mach mal

echo "#$brow#";

dann siehst Du ob es 'Opera' ist oder 'Opera ' o.ä.