WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   redundante links als inaktiv setzen (http://www.wcm.at/forum/showthread.php?t=200127)

jak 02.10.2006 19:07

Bei mir funktioniert es so:
Code:

foreach($menue as $key => $val){
      if ($key == $_GET['geladene_seite']) {
        //aktuelle Seite, kein Link
        echo $val['title']."
\n";
      } else {
        //Link
        echo ''.$val['title'].''."
\n";
        //andere Methode:
        echo ''.$val['title'].''."
\n";
      }
    }

//irgendwann nachher das include:
include($menue[$_GET['geladene_seite']]['file']);

jak

wallhall 03.10.2006 11:57

hallo @jak,

verstehe nicht warum es bei dir, nicht aber bei mir funktionert.

die ersten fehler die gekommen sind:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING

na gut, ein wenig gegoogelt und dann die syntax bei mir verändert:
foreach($menue as $key => $val){
if ($key == $_GET['geladene_seite']) {
echo "<td align=\"center\" bgcolor=\"#00ff00\">'".$val['title']."'</td>";
} else {
echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'".$val['path']."'\">'".$val['title']."'</a></td>";
}
}

das hätte dann auch soweit geklappt, nur kommt nun diese:
Notice: Undefined index: geladene_seite in C:\Programme\xampp\htdocs\index.php on line 62

die zeile 62: if ($key == $_GET['geladene_seite']) {

wenn ich trotzdem einen link anklicke wird die seite nicht gefunden
-> ich nehme an es liegt an den anführungszeichen im array 'path'


also keine ahnung was ich machen kann, damit es so läuft wie ich es mir vorstelle.

hilfst du mir noch einmal :D :D

jak 03.10.2006 13:00

Nur zur Erklärung (Vielleicht weißt du das eh schon):
In PHP kann man Strings auf zwei Arten angeben: In doppelten (") oder einfachen(') Hochkommas. Der Unterschied besteht darin, daß bei doppelten Hochkommas Variablen ausgewertet werden:
$myvar = 'Hallo';
echo 'Ich sage: $myvar';
echo "Ich sage: $myvar";
Ausgabe:
Ich sage: $myvar
Ich sage: Hallo

Die Notice bekommst du, wenn du zum ersten mal die Seite aufrufst (daher kein ?geladene_seite=...). Wenn dich das stört kannst du es durch:
if (isset($_GET['geladene_seite']) && ($key == $_GET['geladene_seite'])) {
ersetzen.

Zu deinem eigentlichen Problem kann ich dir leider nichts sagen. Eventuell Hochkommas im Text die nicht maskiert sind?

Wenn du nichts findest kannst du ja nochmal deinen Code posten.

jak

jak

wallhall 03.10.2006 14:18

das mit dem einfachen oder doppelten hochkomma wusste ich nicht, muss ich übersehen haben. aber danke für die info!
ich werde mir das ganze nochmal in aller ruhe angucken und vielleicht finde ich den fehler.

danke und

wallhall 03.10.2006 16:17

[code]
<?php
$menue = array(
'neues' => array(
'title' => 'Neuigkeiten',
'file' => 'neues.php',
'path' => 'index.php?geladene_seite=neues'
),
'altes' => array(
'title' => 'Altigkeiten',
'file' => 'altes.html',
'path' => 'index.php?geladene_seite=altes'
),
'ausflug_weiten' => array(
'title' => 'Ausflug nach Weiten',
'file' => 'weiten/weiten.php',
'path' => 'index.php?geladene_seite=ausflug_weiten'
),
'fam_' => array(
'title' => 'Familie ',
'file' => 'fam_.html',
'path' => 'index.php?geladene_seite=fam_'
),
);

echo "<table width=\"100%\">\n";
echo "<tr>\n";
foreach($menue as $key => $val){
if ($key == $_GET['geladene_seite']) {
echo "<td align=\"center\" bgcolor=\"#00ff00\">'".$val['title']."'</td>";
} else {
echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'".$val['path']."'\">'".$val['title']."'</a></td>";
}
}
echo " </tr>\n";
echo " </table>\n";
echo "</br>\n";
if(isset($_GET['geladene_seite']) AND ($key == $_GET['geladene_seite'])) {
include($menue[$_GET['geladene_seite']]['file']);
} else {
include $menue['fam_']['file'];
}

?>

das einzige was funktioniert ist die letze include nach dem else, in der schleife werden komischerweise die links alle mit hockkomma dargestellt und beim anklicken wird die seite nicht geladen -> wenn ich die hochkommas aus der adressleiste lösche aber schon

ist das ein problem des arrays oder vom auslesen des arrays?

:heul:

T.dot 03.10.2006 16:44

Das er Anführungszeichen ausgibt ist klar, nachdem du sie ja auch im Sourcecode stehen hast ;)

siehe hier:
PHP-Code:

foreach($menue as $key => $val)
{
  if (
$key == $_GET['geladene_seite']) 
  {
    echo 
"<td align=\"center\" bgcolor=\"#00ff00\">'".
      
$val['title']."'</td>";
  } 
  else 
  {
    echo 
"<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'"
      
$val['path']."'\">'".$val['title']."'</a></td>";
  }


die Zeile:
PHP-Code:

echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'".$val['path']."'\">'".
$val['title']."'</a></td>"

müsste eigentlich so aussehen:
PHP-Code:

echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"" $val['path'] . "\">" 
$val['title'] . "</a></td>"

Wenn du uns sagst, wozu du die einfachen Anführunsgzeichen gemacht hast, kann man vl. klären wieso man sie nicht braucht ;)

mfg Thomas

ps: Für alle, die sich intensiver mit PHP auseinandersetzen und größere Seiten planen, würd ich eine Template Enginge wie Smarty empfehlen.

wallhall 03.10.2006 17:01

@t.dot, wenn ich erklären könnte warum ich diese einfachen hochkommas habe, hätte ich sie vermutlich gar nicht :lol:

also hab ich mir selbst ein riesenei gelegt, auch net schlecht :rolleyes:

gut, ich werde es einfach einmal rauslöschen und testen ....

wallhall 03.10.2006 20:54

*seufz*
also die links werden jetzt korrekt dargestellt - das passt zum glück

PHP-Code:

foreach($menue as $key => $val) {
    if (
$key == $_GET['geladene_seite']) {
    echo 
"<td align=\"center\" bgcolor=\"#00ff00\">" $val['title'] . "</td>";
    } else {
        echo 
"<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"" $val['path'] . "\">" $val['title'] . "</a></td>";
    }


aber ich kann keine seiten laden. die erste seite im array und die letzte seite im array wird geladen, die restlichen nicht (bleibt auf dem stand der ersten seite)

PHP-Code:

  if(isset($_GET['geladene_seite']) && ($key == $_GET['geladene_seite'])) {
    include(
$menue[$_GET['geladene_seite']]['file']);
} else {
    include (
$menue['neues']['file']);


und ich gib es zu, ich bin noch nicht so der profi ;) ;)

wallhall 04.10.2006 10:13

PHP-Code:

if(isset($_GET['geladene_seite']) && ($key == $_GET['geladene_seite'])) { 

nach dem and, der vergleich ($key == $_GET['geladene_seite'])) war die ursache.
aber wie bekomme ich nun die notice-fm weg?

aber sonst funktioniert alles, daher ein danke :bier: an @jak und @t.dot


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag