Kleine IF - Abfrage - Fehlersuche

Carrear

Erfahrenes Mitglied
Hi,

suche gerade einen Fehler in einer eigentlich ganz einfachen Abfrage. Wenn eine bestimmte $_GET Variable entweder leer ist oder den Wert home hat, dann soll nix passieren, wenn doch, dann soll ein div tag angezeigt werden. Aber es passiert einfach nichts :D Der DIV Tag wird immer angezeigt. Da steht jetzt empty(), ich habe es vorhin aber auch mit isset() versucht. Bestimmt ist es ein ganz dummer Fehler.

PHP:
<?php
if(empty($_GET['p']) || $_GET['p'] = 'home')
{
} else {
  ?>
  <div style="background-color: transparent; float: left; width: 565px;">
  <?php
    $_PAGE=$_GET['p'];
    if($_PAGE=="")
    {
      $_PAGE="main";
    }
    if(file_exists("./inc/$_PAGE.php"))
    {
      include("./inc/$_PAGE.php");
    }
    $_ADMIN=$_GET['admin'];
    if(file_exists("./admin/$_ADMIN.php"))
    {
      include("./admin/$_ADMIN.php");
    }
  ?>
  </div>
  <?php

}
?>
 
Dreh die Abfrage doch einfach um:

PHP:
if(isset($_GET['p']) && $_GET['p'] != 'home')
{
  ?>
  <div style="background-color: transparent; float: left; width: 565px;">
  <?php
    $_PAGE=$_GET['p'];
    if($_PAGE=="")
    {
      $_PAGE="main";
    }
    if(file_exists("./inc/$_PAGE.php"))
    {
      include("./inc/$_PAGE.php");
    }
    $_ADMIN=$_GET['admin'];
    if(file_exists("./admin/$_ADMIN.php"))
    {
      include("./admin/$_ADMIN.php");
    }
  ?>
  </div>
  <?php

}

Man beachte, das kein else mehr vorhanden ist. Ist so ohnehin viel sinnvoller und übersichtler.
 
PHP:
<?php
if($_GET['p'] == "" OR $_GET['p'] == 'home')
{
       echo "";

} else {
  ?>
  <div style="background-color: transparent; float: left; width: 565px;">
  <?php
    $_PAGE=$_GET['p'];
    if($_PAGE=="")
    {
      $_PAGE="main";
    }
    if(file_exists("./inc/$_PAGE.php"))
    {
      include("./inc/$_PAGE.php");
    }
    $_ADMIN=$_GET['admin'];
    if(file_exists("./admin/$_ADMIN.php"))
    {
      include("./admin/$_ADMIN.php");
    }
  ?>
  </div>
  <?php

}
?>

Probier es mal so. Vielleicht klappt das.
 
Okay Leute,

:-( ich habe einfach einen ganz anderen Div Layer in die Abfrage gepackt, und einen komplett anderen beobachtet :D Sorry - aber danke für die Hilfe
 
Ich hab den Code noch mal überflogen. Das innerhalb des Codeblocks ist sehr sinnfrei. Sowohl vor als auch nach meinen Änderungen:

PHP:
    if($_PAGE=="")
    {
      $_PAGE="main";
    }

Diese Abfrage wird niemals true sein. Denn _GET['p'] muss gesetzt sein, darf aber nicht 'home' sein. Das heißt, die "main" Page wird niemals aufgerufen werden, außer, man gibt sie explizit als p-Parameter an.

Wollte ich nur mal angemerkt haben.
 
Ich hab den Code noch mal überflogen. Das innerhalb des Codeblocks ist sehr sinnfrei. Sowohl vor als auch nach meinen Änderungen:

PHP:
    if($_PAGE=="")
    {
      $_PAGE="main";
    }
Diese Abfrage wird niemals true sein. Denn _GET['p'] muss gesetzt sein, darf aber nicht 'home' sein. Das heißt, die "main" Page wird niemals aufgerufen werden, außer, man gibt sie explizit als p-Parameter an.

Wollte ich nur mal angemerkt haben.

Schau nochmal, du hast ein && in die Abfrage gepackt, ich habe ein || darin. Also ergibt meine Anfrage schon True, nämlich immer dann, wenn $_GET['p'] leer oder gleich 'home' ist.

Viele Grüße
 
Ok, noch mal deine Condition:

PHP:
if(empty($_GET['p']) || $_GET['p'] = 'home')
{
} else {

1. $_GET['p'] = 'home' ist keine Prüfung sondern eine Zuweisung. Da das Zuweisen zu Variablen in PHP immer funktionieren sollte (außer bei einem Out-Of-Memory), ist diese Bedingung immer TRUE!

2. Wenn p leer ist, geht es in den ersten Block (nach if) nicht in den else. Folglich wird p im else niemals leer sein.
 
Zurück