if-else-Problem login

andrassberlin

Grünschnabel
Hallo,

ich habe folgendes Problem und weiß nicht mehr weiter...

auf meiner homepage habe ich einige seiten, die nur bestimmten usern zugänglich sein sollen. Hat sich ein user einmal eingeloggt, so kann er während seiner Sitzung sämtliche -- auch geschützte Seiten -- öffnen. Auf jeder Seite habe ich daher in einem iframe ein loginscript:

login.php:
PHP:
     <?php
     // Session starten
     session_start ();
     
     $loginFormAction = $_SERVER['PHP_SELF'];
     if (isset($accesscheck)) {
       $GLOBALS['PrevUrl'] = $accesscheck;
       session_register('PrevUrl');
     }
     
     // Datenbankverbindung aufbauen
     $connectionid = mysql_connect ("localhost", "root", "");
     if (!mysql_select_db ("LoginSystem", $connectionid))
     {
       die ("Keine Verbindung zur Datenbank");
     }
     
     $sql = "SELECT ".
     	"Id, Nachname ".
       "FROM ".
     	"benutzerdaten ".
       "WHERE ".
     	"(Nickname like '".$_REQUEST["name"]."') AND ".
     	"(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
     $result = mysql_query ($sql);
     
     if (mysql_num_rows ($result) > 0)
     {
       // Benutzerdaten in ein Array auslesen.
       $data = mysql_fetch_array ($result);
     
       // Sessionvariablen erstellen und registrieren
       $_SESSION["user_id"] = $data["Id"];
       $_SESSION["user_nachname"] = $data["Nachname"];
     
       header ("Location: intern.php");
     }
     else
     {
       header ("Location: formular.php?fehler=1");
     }
     ?>

nachdem login wird intern.php aufgerufen:
PHP:
     <link rel="stylesheet" type="text/css" media='screen' href="../html/style.css" />
     
     <style type="text/css">
     <!--
     table
     {
     font-size:100%;
     width:98%;
     font-weight: normal;
     border-spacing: 0px 0px;
     }
     
     img {
     	   border: 0px solid #326B5A;
     	 }
     -->
     </style>
     </head>
     <body>
     <div id="box_right">
       <div id='frame'>
     	<div align="left">
     
 			<form action="../php/login.php" method="post" id="login">
     		<table border="0" cellpadding="1" cellspacing="0" width="168">
     			<tbody><tr>
 		 	<td bgcolor="#D1EEEA"><img src="../imgs/login.gif" border="0" height="23" width="168"><br>
 		 	<table bgcolor="white" border="0" cellpadding="4" cellspacing="0" width="168">
 					<tbody><tr>
 		 			<td colspan="2"><span><font color="#707070">BenutzerId: <?php echo $_SESSION["user_id"]; ?><br>
 			 		 		 				 Nachname: <?php echo $_SESSION["user_nachname"]; ?></font></span></td>
 					</tr>
     
     			</tbody>
     				 </table>
 		<table bgcolor="white" border="0" cellpadding="3" cellspacing="0" width="168">
     				<tbody>
     			   <tr>
 				 <td width="60"><br></td>
 		 	 <td><div align="right"><a href="logout.php"><img src="../imgs/logout_bt.gif" alt="Ausloggen" border="0" height="21" vspace="4" width="67">&nbsp;</a></div></td>
     			   </tr>
 						 </tbody>
     				 </table>
     				 </table>
     		 </div>
     	</div>
     </div>
     </body>
     </html>

bzw formular.php:
PHP:
    <?php session_start (); ?>
    <html>
    <head>
      <title>Login</title>
    
    <link rel="stylesheet" type="text/css" media='screen' href="../html/style.css" />
    
    <style type="text/css">
    <!--
    table
    {
    font-size:100%;
    width:98%;
    font-weight: normal;
    border-spacing: 0px 0px;
    }
    
    img {
    	   border: 0px solid #326B5A;
    	 }
    -->
    </style>
    
    </head>
    
    <body <font color="#FF0000"></font>
    <div id="error">
       <div id='frame'>
    	  <?php
    	   if (isset ($_REQUEST["fehler"]))
    	   {
    	   echo "Die Zugangsdaten waren ungültig.";
    	   }
    	  ?>
       </div>
    </div>
    <div id="box_right">
      <div id='frame'>
    	 <div align="left">
    
 			<form action="../php/login.php" method="post" id="login">
    		<table border="0" cellpadding="1" cellspacing="0" width="168">
    			<tbody><tr>
 		 	<td bgcolor="#D1EEEA"><img src="../imgs/login.gif" border="0" height="23" width="168"><br>
 		 	<table bgcolor="white" border="0" cellpadding="4" cellspacing="0" width="168">
 					<tbody><tr>
 		 			<td colspan="2"><span><font color="#707070">Bitte loggen Sie sich hier mit Ihrem Benutzernamen und Kennwort ein ...</font></span></td>
 					</tr>
    
    				</tbody></table>
 		 	<table bgcolor="white" border="0" cellpadding="3" cellspacing="0" width="168">
 		 		 		 	<tbody><tr>
 		 			<td valign="top" width="60"><span>&nbsp;<b>Name</b></span></td>
 		 		 <td><div align="right"><input class="wst_input" name="name" size="8" type="text"></div></td>
 					</tr>
 					<tr>
 		 			<td valign="top" width="60"><span>&nbsp;<b>Passwort</b></span></td>
    
 		 		 <td><div align="right"><input class="wst_input" name="pwd" size="8" type="password"></div></td>
 					</tr>
 					<tr>
 		 			<td width="60"><br></td>
 		 		 <td><div align="right"><input src="../imgs/login_bt.gif" alt="Einloggen" title="Einloggen" border="0" height="21" type="image" vspace="4" width="67"></div></td>
 					</tr>
    
    				</tbody></table>
 		 	<img src="../imgs/trenner.gif" border="0" height="9" width="165"><br>
 		 	<table bgcolor="white" border="0" cellpadding="4" cellspacing="0" width="168">
 					<tbody><tr>
 		 			<td colspan="2"><span>Haben Sie noch keinen Benutzernamen?
 		 			Dann können Sie <b><a target="_top" href="./getpass.php">hier </a></b> ihr Passwort anfordern.</span></td>
 					</tr>
 				</tbody></table></td>
    			</tr>
    
    		</tbody></table>
    		</form>
    		  </div>
    	 </div>
      </div>
    </body>
    </html>


Der Vollständigkeit halber hier die Datei checkuser.php:
PHP:
     <?php
     session_start ();
     if (!isset ($_SESSION["user_id"]))
     {
       header ("Location: formular.php");
     }
     ?>

Da auf jeder Seite die Datei login.php vorkommt (damit man sich auf jeder Seite einloggen kann) möchte ich nun eine Abfrage realisieren, mit der entschiednen wird ob die login.php im iFrame verwendet wird, also der user noch nicht eingeloggt ist, oder ob formular.php verwendet wird falls der user bereits eingeloggt ist.
Leider habe ich keine Ahnung wie ich das umsetzen soll. Bitte helft mir, ich verzweifle langsam. Ist denn meine Idee eigentlich umständlich, und falls ja, geht das ncoh simpler?

Vielen Dank schon mal im Voraus,

Andreas
 
Zuletzt bearbeitet:
An der Stelle wo Du das iFrame definierst musst Du Ueberpruefen ob die UserID in der Session steht und kannst anhand dessen entscheiden was dargestellt werden soll.
 
Guten morgen...

wie sieht die denn aus, bin nicht der Experte in php. Anscheinend habe ich mich da auch etwas übernommen mit. Also ich stelle mir das so vor:

PHP:
  <?php
   		  if($_SESSION['user_id']) {
   			 header ('Location: ./home/php/intern.php');
   		  } else {
   			 header ('Location: ./home/php/formular.php');
   		  }
    ?>

aber das dunktioniert nicht. Anscheinend habe ich einige Syntaxfehler gemacht. Kann mir bitte noch jemand helfen? Danke schonmal...

Andreas
 
Zuletzt bearbeitet:
Wenn ich das richtig verstehe, willst du das Login Formular einblenden wenn der User nicht eingelogged ist und ausblenden, wenn er eingelogged ist.
PHP:
if(isset($_SESSION['user_id'])) {
   // Formular anzeigen
} else {
   echo "Sie sind eingelogged!";
}
 
Also wenn ich den php-code:

PHP:
   <?php
 			 if($_SESSION['user_id']) {
 				header ('Location: ./home/php/intern.php');
 			 } else {
 				header ('Location: ./home/php/formular.php');
 			 }
 	?>
einbinde, bekomme ich diese Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at C:\apache\xampp\htdocs\AKTUELL\header.php:9) in C:\apache\xampp\htdocs\AKTUELL\home\index.html on line 20

In Zeile 20(index.html) steht:
PHP:
header ('Location: formular.php');

Wenn ich diesen Code einbinde:
PHP:
if(isset($_SESSION['user_id'])) { 
   // Formular anzeigen 
} else { 
   echo "Sie sind eingelogged!"; 
}
dann erhalte ich auch wenn ich nicht eingeloggt bin: Sie sind eingelogged!

Und ja, auf der Seite habe ich
PHP:
session_start();
stehen. Wo liegt der Fehler?

Andreas
 
du darfst vor header keine Ausgabe machen. Probiers mal so:
PHP:
<?php
     ob_start();
             if($_SESSION['user_id']) {
                header ('Location: ./home/php/intern.php');
             } else {
                header ('Location: ./home/php/formular.php');
             }
     flush();
    ?>
dann müsste es eigentlich gehen.
 
Hi fanste,

hab Deinen Post jetzt mal umgesetzt, jedoch ohne Erfolg.

Code:
Warning: Cannot modify header information - headers already sent by (output started at C:\apache\xampp\htdocs\AKTUELL\header.php:9) in C:\apache\xampp\htdocs\AKTUELL\home\index.html on line 21

Mein seite setzt sich so zusammen:

index.php (wird als erstes aufgerufen)
PHP:
<?
    if(ereg("http",$site)) { die("Keine externen Seiten erlaubt"); }
    if(ereg("www",$site)) { die("Keine externen Seiten erlaubt"); }
    if(ereg("://",$site)) { die("Keine externen Seiten erlaubt"); }
    if(ereg("uname",$site)) { die("Keine externen Seiten erlaubt"); }
    include("header.php");
    if(!$site) { $site = "home/index.html"; }
    include("$site");
    include("footer.php");
   ?>

in header.php wird lediglich das menu und ein counter dargestellt.

index.html:
PHP:
<!-- CONTENT -->
   <div id='content'>
   		 <h2> Willkommen auf B.A.H. - online!</h2>
   
   	  <div class="welcome">
 		 <p> Die 1987 gegründete B.A.H. ist ein Zusammenschluss selbstständiger Landesverbände. Eigenständige und starke Landesverbände können die Interessen der Mitglieder vor Ort am besten vertreten.</p>
   
 		 <p>Die B.A.H. organisiert den Informationsaustausch zwischen den Landesverbänden und vertritt die gemeinsam abgestimmten Ziele auf Bundesebene gegenüber Kranken- und Pflegekassen, Politik und Behörden. </p>
 		 <p><img border="1" bordercolor="#326B5A" src="./home/imgs/Haende.jpg" align="right"></p>
   
   	  </div>
   	  </div>  <!-- end content -->
   
   	  <div id='box_right'>
   	   <!-- LOG IN -->
   		<?php
   	 ob_start();
   			 if($_SESSION['user_id']) {
   			    header ('Location: ./home/php/intern.php');
   			 } else {
   			    header ('Location: ./home/php/formular.php');
   			 }
   	 flush();
   	?>
 		 <iframe scrolling="no" align="left" frameborder="0" width="180" height="250" src="./home/php/login.php"></iframe>
   	   <!-- end LOGIN -->
   
   </div>
sieht so aus.

und zu guter letzt wird die footer.php einbezogen:
PHP:
   <!-- FOOTER -->
 <div id='footer'>&copy; Copyright 2005, <a href="mailto:andreasworch@web.de">Andreas Worch</a> All rights reserved.
      </div> <!-- end FOOTER -->
   
   </div> <!--end CONTAINER -->
    </div>

Die index.html wird über das menue mit anderen html-seiten ausgetauscht. und jedesmal soll entschieden werden, ob der user bereits angemeldet ist oder nicht.
Was muss ich ändern?

Kann ich hier im Forum zum besseren Verständnis eigentlich Verzeichnisse hochladen?


Andreas
 
Zuletzt bearbeitet:
schreib die index.htm mal um. du machst da ja trotzdem schon eine ausgabe. in HTML. schreib mal am Anfang der seite
PHP:
<?
ob_start();
?>
//HTML CODE
<?php
if($_SESSION['user_id']) {
header ('Location: ./home/php/intern.php');
} else {
header ('Location: ./home/php/formular.php');
}
 
?>
//HTML CODE
<?
flush();
?>

wenn das auch nicht klappt schreib den HTML Code mal als echo in der code. also
PHP:
<?
ob_start();
echo "HTML CODE";
usw...
if($_SESSION['user_id']) {
header ('Location: ./home/php/intern.php');
} else {
header ('Location: ./home/php/formular.php');
}
echo "HTML CODE";
flush();
?>

vll klappts so! Wenn auch dass nicht klappt, kannst du immernoch das header durch einen meta refresh ersetzen.
Wobei ich gerade sehe, dass du die Seite includest. Allerdings schon vor der index.htm.
Dadurch wird auch wieder eine Ausgabe gemacht, z.b. durch das menü. Ich glaube, in dem Fall ist der meta refresh die bessere Lösung.
 
Zuletzt bearbeitet:
Zurück