server erkennt pfade nicht

montagmorgen

Grünschnabel
moin,

folgendes problem mit einer php-navigation:
server erkennt php - checkt auch die rollovers - aber bei klick läde er nicht die entsprechende inc-datei.

das script funktionierte auf meinem server ohne probleme (und auf ner menge anderer auch) nur bei strato zickt es rum.

ich hab wirklich keine ahnung, woran es liegen könnte und wäre echt dankbar für hilfe!
 
Da hilft am besten nur der Code an entsprechender Stelle.
Die Rollovers haben mit PHP nix zu tun, da das Clientseitig passiert, via PHP kannst du hächstens den entsprechenden Content generieren.

Du hast im Script sicherlich eine Kontrollstruktur die per Link übergebene Werte ausgibt.
Hier am besten mal ein var_dump() entsrpechender Variable machen, die ausgewertet wird um ein include zu machen.
Aber am besten hilft hier wie gesagt ein bisschen Quellcode.
 
mein geliebtes script:

PHP:
<?php
if(!$nav) $nav = "home";

$down_home					= "";
$down_unternehmen			= "";
$down_consulting			= "";
$down_referenz				= "";
$down_service				= "";
$down_kontakt				= "";
$down_impressum				= "";

$down_nav				= "down_".$nav;
$$down_nav				= "-down";

$title_text				= array (	"unternehmen"		=> "unser profil", 
									"consulting"		=> "consulting",
									"referenz"			=> "referenzen",
									"service"			=> "service",
									"kontakt"			=> "tel., fax., adresse, e-mail",
									"impressum"			=> "rechtliches");
	
	function rollover_script($name) { 
	global $nav; 
	global $title_text; 
	if($nav!=$name) { 
		print "href=\"index.php?nav=$name\" 
		title=\"$title_text[$name]\" 
		onMouseOver=\"Bildwechsel('$name',Over_$name)\" 
		onMouseOut=\"Bildwechsel('$name',Normal_$name)\""; 
	} 
}								
?>

der link zu seite:
http://nic-gmbh.de/home/index2.php
 
Zuletzt bearbeitet:
Naja ohne es böse zu meinen, lieben würde ich dieses Sript allein schon wegen register globals nicht. Was da durchaus sein kann das es auif deinem Test-System an ist, auf dem Zielrechner aber nicht.
Kannst du via phpinfo() am einfachsten rausfinden.
Allerdings würde ich auf diesen schlechten Stil verzichten und GET / POST Daten über die superglobalen Arrays $_GET, $_POST oder $_REQUEST (kombiniert $_GET, $_POST etc anhand der in der php.ini angegebenen Reihenfolge) auslesen.
beispiel für $nav.... $nav = $_GET['nav']
Da ich kein Fan von diesem hin und herkopieren bin, einfach direkt mit $_GET['nav'] arbeiten.
Soviel erstmal dazu.

Eine Frage wo tauch denn das else für dein if auf, wenn $nav gesetzt ist?
Schöner wäre ein array, in dem alle gültigen Werte für nav drin stehen. Dann kannst du auch gleich mitprüfen, ob überhaupt ein gültiger Wertt übergeben würde.
z.B. so
PHP:
$navs = array('home','bereich2'....);
if( !@in_array($_GET['nav'],$navs) )
     $_GET['nav'] = 'home';

nun bleibt auch noch die Frage offen wo in dem script die includes denn gemacht werden.
 
die includes kommen mit
PHP:
<?php include "$nav.inc" ?>
in die mitte der tabelle; die aufrufe dafür stehen bei den navi-grafiken:

HTML:
<a <?php rollover_script("unternehmen") ?>><img src="navi/untern<?=$down_unternehmen?>.gif" name="unternehmen" alt="" border="0"></a>

ich muss dazu sagen, dass ich von php leider sehr wenig ahnung hab. beschäftige mich damit noch nicht wirklich lange. sorry. :-)

also dass was du oben schreibst kann ich von der idee her nachvollziehen, aber ich wüsste nicht wo ich was zu ändern hätte...

ich denke mir auch mal, dass das script nicht wirklich sauber geschrieben ist. ein programmierer, der mal ne zeit lang bei uns im büro saß hat mir hier und da mal geholfen aber ich lerne halt wie gesagt noch.

danke übrigens fürs schnelle antworten
 
ganz einfach, alle Werte die irgendwie "von aussen" ins script kommen wie erwähnt über $_GET, $_POST oder $_REQUEST ansprechen.
d.h. am beispiel der url index.php?param1=wert1&param2=wert2
dass du param1 mit $_GET['param1'] usw. ausliest.
Gleiches analog für navi.

Des weiteren ist hier eine Prüfung wie ich es mit in_array vorgeschlagen habe mehr als nur sinnvoll um dein Script ein bisschen sicher zu machen. Sonst könnte man auf einem System ohne Safe_mode quer auf alle Dateien zugreifen z.b. /etc/passwd

Daher dein inc wie folgt aufbauen
PHP:
//if(!$nav) $nav = "home"; ersetzen durch folgendes

//Gültige Werte für nav definieren
 $valid_navs = array('home','kunden','kontakt','...');

//nav prüfen -> im array nicht vorhanden, default definieren
if( !@in_array($_GET['nav'],$valid_navs) )
    $_GET['nav'] = 'home';

//prüfen ob Datei vorhanden
if( !@is_file($_GET['nav'].'.inc') )
    die('Datei zum Einbinden nicht gefunden oder was auch immer');

@require_once($_GET['nav'].'.inc');

Das reicht eigentlich aus. Wenn nav auch via POST z.b. durch ein Formular kommen kann, bietet sich an statt $_GET $_REQUEST zu verwenden.
 
geändert und nun taucht eine fehlermeldung auf:
Parse error: parse error, unexpected T_VARIABLE in /mnt/ja2/01/756/00000001/htdocs/home/index.php on line 12

das script sieht z.z. so aus:

PHP:
<?php
$valid_navs = array('home','unternehmen','consulting','referenz','service','kontakt','impressum'); 

if(!@ in_array ($_GET ['nav' ], $valid_navs)) 
 $_GET ['nav' ] = 'home';   //das ist zeile 12

if(!@ is_file ($_GET ['nav' ]. '.inc')) 
die('Datei nicht gefunden.' ); 

@require_once($_GET ['nav' ]. '.inc'); 

$down_home					= "";
$down_unternehmen			= "";
$down_consulting			       = "";
$down_referenz				= "";
$down_service				= "";
$down_kontakt				= "";
$down_impressum				= "";

$down_nav				= "down_".$nav;
$$down_nav				= "-down";
	
	function rollover_script($name) { 
	global $nav; 
	global $title_text; 
	if($nav!=$name) { 
		print "href=\"index.php?nav=$name\" 
		title=\"$title_text[$name]\" 
		onMouseOver=\"Bildwechsel('$name',Over_$name)\" 
		onMouseOut=\"Bildwechsel('$name',Normal_$name)\""; 
	} 
}								
?>

das sind übrigens die servereinstellungen.
http://www.nic-gmbh.de/test.php
 
Zuletzt bearbeitet:
Was genau ist dnen Line 12? Kann das so leider nicht erkennen wegen eventueller umbrüche in der Screendarstellung...

ansonsten schreib $_GET ['nav' ] mal bitte zusammen also $_GET['nav']
da es zusammengehört. Ob es was ausmacht weiss ich nicht, aber icher ist sicher ;)
 
Did it. Aber die Fehlermeldung bleibt bestehen.

Das script in Zeile 12 ist:
PHP:
$_GET ['nav'] = 'home';

Meinst du denn, dass das navi-Problem generell in dem Script zu finden ist oder eher in den Einstellungen von Stratos?
 
Das kann nur an der Schreibweise mit den unnötigen Leerzeichen zwischen @ und funtktion() als auch der Leerzeichen in $_GET liegen.
Hab den folgenden code gerade getestet und es gab keine Fehler

PHP:
<?php
$valid_navs = array('home','unternehmen','consulting','referenz','service','kontakt','impressum');

if(!@in_array ($_GET['nav'], $valid_navs))
        $_GET['nav'] = 'home';   //das ist zeile 12

if(!@is_file ($_GET['nav'].'.inc'))
        die('Datei nicht gefunden.' );

?>

[root@nexus tmp]# php -l test.php
No syntax errors detected in test.php
[root@nexus tmp]# php test.php
Datei nicht gefunden.[root@nexus tmp]#

Das wäre der Output als läuft es wie es soll...
 
Zurück