Per ?set=id auf eine Seite, klappt aber nicht!

dr-stein

Mitglied
Hallo liebe Forengemeinde,

ich habe auf meiner Seite eine Datenbankabfrage, welche auch Supi funktioniert Wenn ich also nun render.php?set=1 eingebe, komme ich auf die Seite, welche ich angefordert habe. Kein Problem. Nun möchte ich aber auch render.php eingeben und auf render.php?set=1 kommen. also habe ich eine if-Anweinug geschrieben:

PHP:
if ($id=="")
{
Header("Location: render.php?set=1");
}
else
{
echo "<h1>".$row->ueberschrift."</h1>";
echo $row->Text;
}

nun klappt das auch, wenn ich auf render.php?set=1 gehe, aber nicht bei nur render.php

Warum? Der ganze Code hier nochmal:

PHP:
<?php
session_start();

include("l/mysql_connect.php");

$id=$_GET['set'];

$abfrage = "SELECT * FROM sw_homepage_seiten WHERE ID LIKE '$id'";
          $ergebnis = mysql_query($abfrage)
          OR die("Error: $abfrage <br>".mysql_error());
          while($row = mysql_fetch_object($ergebnis))
          {

include("include/variablen.php"); ?>
<!-- Ende Variablen -->




<link rel="SHORTCUT ICON" href="<?php echo "$url"; ?>/images/favicon.ico">
<link rel="STYLESHEET" type="text/css" href="<?php echo "$url"; ?>/css/default.css">
<title><?php echo $row->seitentitel; ?></title>
<!-- Bis hier bitte nichts entfernen -->




<!-- Start
POPUP -->

<!-- Ende
POPUP -->




<!-- Start
Fotobox -->
<script type="text/javascript">
    var GB_ROOT_DIR = "<?php echo "$url"; ?>/js/box/";
</script>
<script type="text/javascript" src="<?php echo "$url"; ?>/js/box/AJS.js"></script>
<script type="text/javascript" src="<?php echo "$url"; ?>/js/box/AJS_fx.js"></script>
<script type="text/javascript" src="<?php echo "$url"; ?>/js/box/gb_scripts.js"></script>
<link href="<?php echo "$url"; ?>/js/box/gb_styles.css" rel="stylesheet" type="text/css" />
<!-- End
Fotobox -->




<!-- Start
Videobox -->
<script type="text/javascript" src="<?php echo "$url"; ?>/js/video/mootools.js"></script>
<script type="text/javascript" src="js/video/swfobject.js"></script>
<script type="text/javascript" src="js/video/videobox.js"></script>
<link rel="stylesheet" href="<?php echo "$url"; ?>/js/video/videobox.css" type="text/css" media="screen" />
<!-- End
Videobox -->




<!-- Start
Header -->
<div id="header"></div>
<!-- End
Header -->





<?php
if ($id=="78926" OR $id=="78927" OR $id=="78928")
{
echo "&nbsp;";
}
else
{
?>
<!-- Start
Navigation -->
<div id="navi"> 
<br><br>
<?php include("include/navigation.html"); ?>
</div>
<!-- Ende
Navigation -->
<? } ?>






<!-- Start
Randbox -->
<?php include("include/randbox.html"); ?>
<!-- Ende
Randbox -->

     

     

<!--Start 
Content -->        
<div id="content"> 
<?php
$user=$_SESSION['username'];

if ($id=="")
{
Header("Location: render.php?set=1");
}
else
{
echo "<h1>".$row->ueberschrift."</h1>";
echo $row->Text;
}

$abfrage1 = "SELECT * FROM sw_portal WHERE username LIKE '$user'";
          $ergebnis1 = mysql_query($abfrage1)
          OR die("Error: $abfrage1 <br>".mysql_error());
          while($row1 = mysql_fetch_object($ergebnis1))
          {

if($row1->admin=="1")
{
echo "<br><br>";
echo "<a href=\"admin/admin_change_662712315.php?set=$id\">Diese Seite ändern</a>";
}

?>
</div>
<!-- End
Content -->




<!-- Start
Footer -->
<!-- Kein footer angegeben. Bitte melden Sie sich im ACP an um dieses zu &auml;ndern. -->
<!-- Ende
Footer -->
<? } ?>
<? } ?>

Lieben Gruß,
Eike
 
Könntest du bitte mit dazu schreiben, wie die Dateien heißen?

BTW: $_GET['set'] einfach zu übernehmen und ungeprüft an die DB zu senden ist mords gefährlich. Wenn das ein INTEGER-Wert sein soll, mach wenigstens

PHP:
$id = intval($_GET['set']);

Ansonsten löscht dir vielleicht jemand deine Datenbank.
 
Du fragst schließlich ab ob $_GET['set'] gleich einem leeren String ist. Wenn du nichts dranhängst wird set ja gar nciht übergeben und initialisiert, entspricht also keinem leeren String.
Schreib zB einfach if(!$_GET['set']) oder in deinem Fall if(!$id) da du es ja zwischengespeichert hast, habs beim ersten mal nciht richtig durchgelesen ;-)
! ist einfach die negierung, also wenn nicht set.
Das funktioniert meines Wissens bei leeren Strings, Zahlen die 0 sind und Variablen die nicht gesetzt sind.
 
Zuletzt bearbeitet:
Hallo,

du möchtest doch Abfragen ob die Variable überhaupt gesetzt ist. Dafür benutzt du am besten die Funktion isset(...). In der gleichen Bedienung kannst du noch überprüfen ob es sich bei der gegebenen Variable, wenn diese auch gegeben ist, um einen Integer Wert handelt.

PHP:
if ( !isset($_GET["set"]) || !is_int( $_GET["set"] )  )
{
  Header("Location: render.php?set=1");
}
else
{
  echo "<h1>".$row->ueberschrift."</h1>";
  echo $row->Text;
}

Link zur Dokumentation:
isset(): http://de3.php.net/manual/de/function.isset.php
is_int(): http://de3.php.net/manual/de/function.is-int.php

Grüße
Manuel F.
 
Zuletzt bearbeitet:
Wenn ich das richtig verstanden habe, ist das Problem, dass auch bei anderen Dateien (ausser render.php) zu render.php?set=1 weitergeleitet wird. Das lässt sich z.B. wie folgt verhindern:

PHP:
if (basename($_SERVER['PHP_SELF']) == 'render.php' && $id == '') header("Location: render.php?set=1");
[...]


(Das else kannst du dir sparen; wenn der if-Zweig eingeschlagen wird, erreicht das Programm gar nie das else.)

Allerdings ist mir nicht klar, woher $id überhaupt kommt und ich denke auch, dass hier ein [phpf]isset[/phpf] wohl angebrachter ist.
 
Warum überhaubt eine weiterleitung?
Du kannst auch einfach die id setzen und fortfahren.

PHP:
$id=$_GET['set'];
$id = $id ? $id : 1;
//oder
if (!$id) $id = 1;
 
@SilentWarrior: Nein, ich möchte dass wenn ich http://www.meine-domain.de/render.php eingebe, die Tabelle mit der ID 1 aufgerufen bekomme. Zur Zeit ist das wie oben ja schon steht, nur möglich wenn ich hinter render.php noch ein ?set=1 eingebe.

@all: Ich programmiere schon seid mehreren Jahren und kann den Fehler einfach nicht verstehen. Denn ich habe bei einer anderen Seite das gleiche gemacht und das funktioniert! Hier also der Code von der anderen Seite:

PHP:
<?php
                              if ($id=="")
                              {
                              $abfrage = "SELECT * FROM ec_seiten WHERE ID LIKE
                              '1'";
                              $ergebnis = mysql_query($abfrage)
                              OR die("Error: $abfrage <br>".mysql_error());  
                              while($row = mysql_fetch_object($ergebnis))
                              {
                              echo $row->Text;
                              }
                              }
                              else
                              {
                              $abfrage = "SELECT * FROM ec_seiten WHERE ID LIKE
                              '$id'";
                              $ergebnis = mysql_query($abfrage)
                              OR die("Error: $abfrage <br>".mysql_error());  
                              while($row = mysql_fetch_object($ergebnis))
                              {
                              echo $row->Text;
                              }
                              }
                              ?>

Nun nochmal der Code von meiner Homepage:

PHP:
if ($id=="")
{
Header("Location: render.php?set=1");
}
else
{
echo "<h1>".$row->ueberschrift."</h1>";
echo $row->Text;
}

Verstehe dass einfach nicht

Lieben Gruß, Eike
 
@yaslaw: Entschuldige, wenn ich jetzt erst auf deinen Post zusprechen komme, aber habe das grad ausprobiert! Vielen Dank, es funktioniert :)

Habe allerdings noch eine Frage:

Ich habe auf der gleichen Datei einen "Adminlink" eingefügt! Das heisst, dass wenn jemand sich anmeldet und in der MySQL-Tabelle in der Spalte Admin eine 1 steht, dann soll der unten einen "Adminlink" bekommen. Das klappt auch, aber nur halb! Ich bin also angemeldet und gehe nun von der Internen Seite auf eine öffentliche Seite (nicht auf render.php?set=1) dann klappt das. Gehe ich dann auf render.php?set=1 klappt das auch, gehe ich aber von der Internen Seite direkt auf die render.php?set=1 klappt das nicht! Habt Ihr da ne Idee?
 
Zurück