• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

mobile Version einer Website (Erkennung und Speicherung)

Dass kein Fehler angezeigt wurde lag daran, dass ich in irgendeiner .htaccess die Value "display_errors" auf Oft gesetzt hatte. Nun habe ich das behoben und es wird angezeigt:
PHP-Fehlermeldung schrieb:
Parse error: syntax error, unexpected '$agent' (T_VARIABLE) in /home/u172994640/public_html/developer/mobile-Erkennung.php on line 8

Ich wüsste allerdings auf den ersten Blick nicht, was an der Stelle syntaktisch falsch wäre...

Der PHP-Code ist der von Hikaze in diesem Thread gepostete.
 
Zuletzt bearbeitet:
Dass kein Fehler angezeigt wurde lag daran, dass ich in irgendeiner .htaccess die Value "display_errors" auf Oft gesetzt hatte. Nun habe ich das behoben und es wird angezeigt:


Ich wüsste allerdings auf den ersten Blick nicht, was an der Stelle syntaktisch falsch wäre...

Der PHP-Code ist der von Hikaze in diesem Thread gepostete; hier nochmal ein Link: http://developer.julian-jp.tk/mobile-Erkennung.php

Was hast Du denn über $agent; ?

ansonsten probiere es mit
getSystem($useragent){..}
dann beim aufruf $mobile=getSystem($agent); das der Parameter erst beim aufruf den Wert bekommt
 
Was hast Du denn über $agent; ?

Der Anfang sieht bei mir so aus:
PHP:
<?php

error_reporting(E_ALL);
ini_set("display_errors", "on");
ini_set("display_startup_errors", "on");

$agent = $_SERVER['HTTP_USER_AGENT'];

function getSystem($useragent=$agent) {
    if(preg_match('/[...usw.]
 
PHP:
<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
function getSystem($useragent) {
    if(preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) { 
        return true;
    }
}
$mobile = getSystem($agent);  
// Korrigiert 
if($mobile && $_COOKIE["mobil_back"] === false){
	header("location: angepassteSeite.php");
	$_COOKIE["mobil"] = true;
} else { 
	echo "du bist nicht Mobil"; 
}
if($mobile && $_COOKIE["mobil_back"] === false){
	echo 'Zur <a rel="nofollow" href="DEINESEITE.tld?switch_desktop">Desktop Ansicht</a>wechseln';
}
if($_COOKIE["mobil"] === true && isset($_GET["switch_desktop"])){
	$_COOKIE["mobil"] = false;
	$_COOKIE["mobil_back"] = true;
	header("location: deineDesktopSeite.??");
}
if($_COOKIE["mobil_back"] === true && $mobile){
	echo 'Zur <a rel="nofollow" href="DEINESEITE.tld?switch_mobil">Mobilen Ansicht</a>wechseln';
	if($_COOKIE["mobil_back"] === true && $mobile && isset($_GET["switch_mobil"])){
		$_COOKIE["mobil"] = true;
		$_COOKIE["mobil_back"] = false;
		header("location: angepassteSeite.php");
	} 
}
?>
Sollte nun sicher klappen
 
@Hikaze: Hast du das Skript auf deinem Server schon getestet? Wenn es bei dir funktioniert, dann liegt vielleicht - was ich aber eher nicht glaube - bei mir ein serverseitiges Problem vor. Hang doch einfach mal deine ganze Datei an den Ahang an, dann zieh ich die mal auf meinen Webserver und schau, ob's dann funktioniert...

Edit: Oh, ich hab gerade erst deinen letzten Beitrag grsehnen; warte mal kurz :)
 
Also mit dem neuen Skript werden jetzt mehrere Fehler angezeigt...
EDIT: Die Erkennung funktioniert zumindest, der Rest nicht. In diesem Skript hab ich jetzt mal den gesamten Teil ab "Korrigiert" weggelassen. Wenn du die Seite mobil besuchst, steht dort eine 1, wenn nicht, nicht.
 
Zuletzt bearbeitet:
Der Fehler muss also irgendwo in dem Restteil sein, weil wenn du mal ins gesamte Skript schaust, da stimmt was nicht...
 
Zuletzt bearbeitet:
Die zwei Fehlermeldungen sind leicht weg einfach über die if abfragen einmal $mobil; und $mobil_back; hin schreiben oder auf isset() prüfen.
Normalerweise funktioniert das so ähnlich hatte ich es schon mal verbaut
 
PHP:
$agent = $_SERVER['HTTP_USER_AGENT'];
function getSystem($useragent) {
    if(preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) { 
        return true;
    }
}
$mobile = getSystem($agent);  
// An der If abfrage lag es habe da ein !$mobile gehabt also wenn's false ist wurde geprüft ^^
if($mobile && $_COOKIE["mobil_back"] === false){
	header("location: angepassteSeite.php");
	$_COOKIE["mobil"] = true;
} else { 
	echo "du bist nicht Mobil"; 
}
if($mobile && $_COOKIE["mobil_back"] === false){
	echo 'Zur <a rel="nofollow" href="DEINESEITE.tld?switch_desktop">Desktop Ansicht</a>wechseln';
}
if(isset($_COOKIE["mobil"]) && $_COOKIE["mobil"] === true && isset($_GET["switch_desktop"])){
	$_COOKIE["mobil"] = false;
	$_COOKIE["mobil_back"] = true;
	header("location: deineDesktopSeite.??");
}
if(isset($_COOKIE["mobil_back"]) && $_COOKIE["mobil_back"] === true && $mobile){
	echo 'Zur <a rel="nofollow" href="DEINESEITE.tld?switch_mobil">Mobilen Ansicht</a>wechseln';
	if($_COOKIE["mobil_back"] === true && $mobile && isset($_GET["switch_mobil"])){
		$_COOKIE["mobil"] = true;
		$_COOKIE["mobil_back"] = false;
		header("location: angepassteSeite.php");
	} 
}
so sollte es klappen habe für dich auch den Undefined Index entfernt
 
Also, erst nochmals vielen Dank @hikaze: Klasse, dass du sich selbst auch so intensiv mit dem Skript beschäftigt hast! :D
Fehler treten jetzt keine mehr auf, aber leider wird ein mobiler Browser im Gegensatz zur vorherigen Version nicht mehr erkannt - also es wird immer "Du bist nicht mobil" angezeigt, egal welchen UserAgent man verwendet...
 
Zuletzt bearbeitet:
UPDATE: So, Arbeiten erfolgreich abgeschlossen :D
 
Zuletzt bearbeitet:
So, jetzt stell ich euch mal mein Ergebnis vor. Ich habe jetzt so ziemlich völlig von vorn begonnen. Folgende zwei Dateien werden verwendet:
-eine-Seite.php: Dort ist mittels include() mobil.php mit den Funktionen eingebunden
PHP:
<?

include("mobil.php");

if($_COOKIE['browser'] == "mobil"){

echo'Du verwendet einen mobilen Browser und bist auf der mobilen Version der Website!';
echo "Zur <a href='eine-Seite.php?switch=desktop'> Desktop Ansicht</a>wechseln";
} 

if($_COOKIE['browser'] == "switched-desktop"){
 echo'Du verwendest zwar einen mobilen Browser, hast aber die Desktopversion gewählt!';
echo 'Zurueck zur <a rel="nofollow" href="eine-Seite.php?switch=mobil">Mobilen Ansicht</a>wechseln'; 
}


if($_COOKIE['browser'] == "desktop"){
echo 'Du verwendest einen ganz normalen Desktop-Browser. Zu Testzwecken stelle doch bitte einen mobilen User-Agent ein!'; 
}

?>
-dann noch die Hauptdatei:
PHP:
<?php

//User-Agent herausfinden
$agent = $_SERVER['HTTP_USER_AGENT']; 
function getSystem($useragent) { 
/*
if(preg_match('
##### an dieser Stelle hier im Forum gekürzt, voller Code in Hikazes' Post #####
*/

$mobil = getSystem($agent); 

//Cookie auf mobil setzen, wenn User-Agent mobil
if($mobil == true){ 
setCookie("browser", "mobil", time() + 60 * 60);
}
else{ //andernfalls auf Desktop
setCookie("browser", "desktop", time() + 60 * 60);
}

//wenn Link zu jeweils anderen Version angeklickt
if(isset($_GET["switch"])){ 
     if($_GET['switch'] == 'desktop'){ //wenn mobil und trotzdem Desktop-Version gewünscht
     setCookie("browser", "switched-desktop", time() + 60 * 60);
     }
     if($_GET['switch'] == 'mobil'){ //wenn vorher auf die Desktopversion geschaltet und nun doch wieder mobile Version
     setCookie("browser", "mobil", time() + 60 * 60);
     } 
}

?>

So, das ganze funktioniert jetzt schließlich auch.
Ein Problem gibt es noch: Die Seite muss immer neu geladen werden, bevor die Werte aus dem Cookie übernommen werden. Probiert es aus, man muss immer zweimal auf z.B. "Zur Desktop-Seite wechseln" klicken, bis sich die Seite verändert.

PS: Wenn ihr den Testlink benutzt, verwendet doch bitte so etwas wie den User-Agent-Switcher (Addon für Firefox), damit ihr die Seite testen könnt...
Ich hoffe, das letzte Problem können wir jetzt auch noch beseitigen. Danke schonmal :)
 
Zuletzt bearbeitet:
Das Problem mit dem doppelten Klicken könntest du ev. dadurch lösen, dass du in den if-Abfragen mit dem 'switch' zusätzlich zu dem setCookie noch den entsprechenden Wert in das Superarray $_COOKIE direkt reinschreibst...

PS: die getSystem-Funktion gefällt mir nicht wirklich, da sie keinen Rückgabewert hat, wenn dir RegExp nicht passt. Das wird zwar als falsy gewertet, aber sauber ist das nicht...
 
Das Problem mit dem doppelten Klicken könntest du ev. dadurch lösen, dass du in den if-Abfragen mit dem 'switch' zusätzlich zu dem setCookie noch den entsprechenden Wert in das Superarray $_COOKIE direkt reinschreibst...

Klasse, funktioniert, danke! Ich habe jetzt folgende Zeile noch überall hinzugefügt:
PHP:
if($mobil == true){ //Beispiel
setCookie("browser", "mobil", time() + 60 * 60);
$_COOKIE['browser'] = "mobil"; //ins Array schreiben - neu hinzugefügt!
}
PS: die getSystem-Funktion gefällt mir nicht wirklich, da sie keinen Rückgabewert hat, wenn dir RegExp nicht passt. Das wird zwar als falsy gewertet, aber sauber ist das nicht...

Wie würdest du das lösen? Hättest du einen Vorschlag?
 
Ach ja: Irgendein Mod könnte diesen Thread vllt. freundlicherweise nach "Serverseit. Programmierung" verschieben. Er hatte ja nur am Anfang mit JS zu tun... ;)
 
Zurück
Oben