XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Problem mit login. (http://xhtmlforum.de/showthread.php?t=57803)

rs-web 22.07.2009 14:14

Problem mit login.
 
Hallo zusammen,
ich habe auf unter dem Menü ein Login Feld. Ich wollte mit folgendem code bewirken, dass wenn man eingeloggt ist der Text: "sie sind eingeloggt" erscheint und wenn man nicht eingeloggt ist soll das einlogg feld erscheinen. Aber irgendwo ist der Wurm drinnen:
PHP-Code:

<div id="login">

<?php
if (!isset ($_SESSION["user_id"]))
{
  echo (
"Sie sind eingeloggt.");
<
input type="submit" value="Logout">
}


?>
<?php
session_start 
();
if ((
session_is_registered ("user_eingeloggt")) AND ($user_eingeloggt)) {
  (echo &
#8222;Du bist eingeloggt“)
} else {
 <
form action="../login/login.php" method="post">
  
Name:&nbsp <input type="text" name="name" size=15"><br>
  Kennwort: <input type="
password" name="pwd" size="15"><br>
  <input type="
submit" value="Login">
<form action="
../login/logout.php" method="post">

  
}
?>






</div>


inta 22.07.2009 14:33

Dir fehlen eindeutig die Grundlagen, diese kannst du z.B. hier nachlesen:
Quakenet/#php Tutorial - de - Grundlagen

Hier im Forum finden sich aber auch noch ein paar weitere Links dazu.

rs-web 22.07.2009 15:28

Ja ok ich habs jetzt wie folgt:
PHP-Code:

<div id="login">
<?php

if (isset($_SESSION['user_id'])){

echo 
"Du bist eingelloggt";
} else{
echo 
"Bitte einloggen";


}
?>






</div>


aber wie füge ich jetzt noch das formulafeld ein?!
LG rs-web

David 22.07.2009 16:00

In dem Codebeispiel in deinem ersten Post, rufst du die Sessionvariablen ab, bevor die Session gestartet wurde. Afaik geht das nicht, wenn die Session nicht automatisch startet. Ein Formularfeld fügst du genauso wie anderen HTML-Code ein, entweder über Befehle wie echo() oder print() oder in dem du es als Text außerhalb der PHP-Tags schreibst. Wie inta schon sagte, mach dich mit den Grundlagen vertraut und dann schau dir folgendes Tutorial an, welches ein Sessionbasiertes Loginsystem anschaulich erklärt:
[PHP] Ein sessionbasiertes Loginsystem - Developer's Guide

Das mit den Grundlagen ist schon deshalb wichtig, damit du dir nicht unnötigerweise Sicherheitslücken in dein System schreibst.

rs-web 22.07.2009 16:15

Ich hab deinen Rat befolgt aber es via include gemacht:
PHP-Code:

<div id="login">
<?php

if (isset($_SESSION['user_id'])){

echo 
"Du bist eingelloggt";
} else{
include
"../login/feld.php"
?>
}





</div>

wenn ich anstatt include echo hab geht es..
LG rs-web

David 22.07.2009 17:19

Include und echo bzw. print sind zwei völlig verschiedene Sachen, also kann man das nicht irgendwie durch das jeweils andere ersetzen.

rs-web 22.07.2009 19:15

ja ok ich habe jetzt das turtorial ausprobiert und ein neues login gemacht!
aber jetzt ist folgendes:
PHP-Code:

WarningCannot modify header information headers already sent by (output started at /var/www/web38/html/login/config.inc.php:7in /var/www/web38/html/login/validateLogin.inc.php on line 47 

natürlcih hab ich erst gesucht und gegoogelt, und herraus gefunden, dass es an den leerzeichen liegt, aber an welchen?!

PHP-Code:

<?php

session_start
();

// Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden.
if( isset($_POST['username'], $_POST['passwort'])
AND
strcmp(trim($_POST['username']),'') != 0
AND
strcmp(trim($_POST['username']),'') != ) {


// Einbinden der Konfigurationsdatei
include_once 'config.inc.php';

// Erstellen der Verbindung zur MySQL-Datenbank
if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
die( 
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
}

if( !
mysql_select_db$_config['database'], $connection ) ) {
die ( 
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
MySQL-Error: <br />' 
mysql_error() );
}


// SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob
// diese Kombination von Usernamen und Passwort überhaupt existiert und
// zweitens bei Existenz Userinformationen auszulesen
$sql "SELECT
_id,
_anzahlLogins
FROM
archiv_login
WHERE
_username = '" 
trim($_POST['username']) . "'
AND
_passwort = '" 
md5(trim($_POST['passwort'])) . "'";

$res mysql_query($sql) or die( 'Error[SELECT|User]: <br />
<pre>' 
$sql '</pre>
<br />
MySQL-Error: ' 
mysql_error() );

// Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt.
// In allen anderen Fällen wird er zurück zum Loginformular geleitet.
if( mysql_num_rows($res) != ) {
header('Location:loginfehler.html');
exit();
}
else {
// Der Schlüssel 'loggedIn' erhält den Wert 'true'. So kann überprüft später werden,
// ob der User eingeloggt ist oder nicht.
$_SESSION['loggedIn'] = true;

// Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt
$user mysql_fetch_object($res);
$_SESSION['anzahlLogins'] = $user->_anzahlLogins;
$_SESSION['id'] = $user->_id;

// Aktualisierung des Anzahl der Logins
$sql 'UPDATE
archiv_login
SET
_anzahlLogins = _anzahlLogins + 1
WHERE
_id = ' 
$user->_id;

mysql_query($sql) or die( 'Error[UPDATE|User]: <br />
<pre>' 
$sql '</pre>
<br />
MySQL-Error: ' 
mysql_error() );

// Der Login war erfolgreich und der User wird zur Startseite des
// passwortgeschützen Bereichs weitergeleitet
header('Location:geheim.php');
exit();
}

}
else {
header('Location:loginformular.html');
exit();
}

?>


rs-web 22.07.2009 20:29

An alle die auch das Problem habe:
geht ans ende des php scripts und drückt 2-3 Mal die enf Taste....;)
LG rs-web

rs-web 22.07.2009 21:08

Ok ich habs so emacht wie du geasgt hast aber etz kommt wieder ne fehlermeldung:
PHP-Code:

<div id="login">
     <?php

    session_start
();

    if( !
$_SESSION['loggedIn'] ) { 
        echo 
"Du bist eigeloggt!";
    }
else{
post"<form action="../login/validateLogin.inc.php" method="post">

         <input type="
text" name="username"> 
         <input type="
password" name="passwort">

         <input type="
submit" name="login" value="Einloggen">

     </form>"
;
}
?> 






</div>


Dani@okraina 23.07.2009 01:34

session_start() muss aufgerufen werden, bevor irrgendeine ausgabe an den browser versendet wird. Steht aber auch in der Manual PHP: session_start - Manual unter Anmerkung


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

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2021, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2020