php inlog systeem probleem

Status
Niet open voor verdere reacties.

whisper380

Terugkerende gebruiker
Lid geworden
12 jan 2009
Berichten
1.247
hey medehelpmijers.

ik heb een probleem met een inlog script.
Ik zal bij het begin beginnen:
Wat werkt er:
- Inlogpagina
- Registreren
- Gegevens worden in database gezet

wat werkt er niet:
- Beveiligde pagina

Ik heb dus een beveiligde pagina maar hier kan ik dus niet opkomen.
het script van deze pagina:
PHP:
<?php
if (!isset($_SESSION["username"])){
    $tekst = "<h2>U bent nog niet aangemeld.</h2>
           U kunt <a href=\"login.php\">hier inloggen</a> of<br>
           U kunt zich <a href=\"register.php\">hier registreren</a>";
    echo($tekst);
}else{?>
<h2>Welkom</h2>
a: <?php echo($_SESSION["username"]);?><br>
w: <?php echo($_SESSION["wachtwoord"]);?><br>
<?php
}
?>
ik denk dat hij de session niet kan registreren om een of andere reden.
ik heb dit script gevonden in een boek: basiscurses php 5.

Om het inloggen af te handelen heb ik deze pagina. (hierin word de sessie gestart):
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 
<?php
session_start(); //sesie beginnen
// controleren of pagina correct is aangeroepen.
if (!empty($_POST)){
    include("connect.php");
    $query = "SELECT * FROM users
           WHERE email='" . $_POST["email"] ."'
           AND wachtwoord='". $_POST["wachtwoord"]. "'";
    $result = mysql_query($query) or die (mysql_error());
    
    if (mysql_num_rows($result) > 0) {
        // e-mailadres gevonden, registreer gegevens in session
        $username = $_POST["email"];
        $wachtwoord = $_POST["wachtwoord"];
        session_register("username");
        session_register("wachtwoord");

        // doorsturen naar beveiligde pagina
        header("Location: beveiligd.php");
        exit();
}else{
    // geen e-mailadres gevonden, of ongeldig wachtwoord.
    $tekst = "U hebt geen geldige combinatie van e-mailadres en wachtwoord
             opgegeven. Maak een keuze: <br>
    <a href=\"login.php\">Opnieuw inloggen</a><br>
    <a href=\"register.php\">Hier registreren</a><br>";
    die($tekst);
}
}else{
    // pagina was incorrect aangeroepen, direct doorsturen naar login.php
    header("Location: login.php");
}
?>
        
<html>
<head>
       <title>Login afhandelen</title>
</head>
<body>

</body>
</html>
Wat heb ik fout gedaan ik kom er na 2 uur puzzelen niet uit.
(ps ben beginner)
Alvast bedankt voor de moeite die jullie moeten doen om me te helpen.:thumb:
 
Je moet session_start() aanroepen op álle pagina's waar je gebruik wilt maken van $_SESSION, niet alleen als je er nieuwe waardes aan toe kent.

Dat betekent dus dat je ook je beveiligde pagina moet beginnen met session_start(), zodat je de waarde van de variabele kunt controleren :)
 
heb nu het volgende:
PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<?php session_start(); ?>
<html>
<head>
<title>Whisper380-computerhulp - Home</title>
</head>
<body>
<?php
if (!isset($_SESSION["username"])){
    $tekst = "<h2>U bent nog niet aangemeld.</h2>
           U kunt <a href=\"login.php\">hier inloggen</a> of<br>
           U kunt zich <a href=\"register.php\">hier registreren</a>";
    echo($tekst);
}else{?>
<h2>Welkom</h2>
a: <?php echo($_SESSION["username"]);?><br>
w: <?php echo($_SESSION["wachtwoord"]);?><br>
<?php
}
?>
</body>
</html>
Na het inloggen krijg je dus te zien dat je niet bent aangemeld. hoe moet ik dit oplossen?
 
session_start moet voor alle output, je mag geen html versturen voor je het aanroept. (Dus ook geen doctype)

Als je em een regel hoger zet werkt het waarschijnlijk beter. En als je error_reporting aanzet krijg je dit soort dingen ook te zien ;)

Op de eerste regel van elk script:
PHP:
<?php error_reporting( E_ALL ); ?>
 
ziet er nu zo uit:
PHP:
<?php error_reporting( E_ALL ); ?>
<?php session_start(); ?>
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Whisper380-computerhulp - Home</title>
</head>
<body>
<?php
if (!isset($_SESSION["username"])){
    $tekst = "<h2>U bent nog niet aangemeld.</h2>
           U kunt <a href=\"login.php\">hier inloggen</a> of<br>
           U kunt zich <a href=\"register.php\">hier registreren</a>";
    echo($tekst);
}else{?>
<h2>Welkom</h2>
a: <?php echo($_SESSION["username"]);?><br>
w: <?php echo($_SESSION["wachtwoord"]);?><br>
<?php
}
?>
</body>
</html>
Maar nog steeds niet aangemeld.
 
Je moet op de aanmeld pagina hetzelfde doen (error_reporting & session_start bovenaan)

En ik zou session_register niet meer gebruiken maar gewoon direct $_SESSION['username'] bijv aanspreken, want de register functie wordt eruit gehaald.
 
zet anders van al je scripts eens de eerste 10 regels online.
en van je inloge script misschien ff helemaal. In een van de scripts start je niet met session_start()
 
dit snap ik niet :eek:

Wat snap je er niet aan? ;) Je moet gewoon op je inlog-pagina hetzelfde doen als je op je ingelogd-pagina gedaan hebt; session_start() en error_reporting( E_ALL ) helemaal bovenaan zetten, nog boven de doctype. Als ze namelijk daar niet staan, dan werken ze niet.

En je gebruikt nu dit:
PHP:
$var = "data";
session_register( "var" );

Maar dat wordt afgeraden en je moet dat tegenwoordig zo doen:
PHP:
$_SESSION['var'] = "data";

Omdat ze die andere functie gaan verwijderen in een komende versie van PHP.
 
zal vanavond al mijn bestanden eens posten als bijlage. want ik snap er nu helemaal niks meer van. ben een beginnende phper en heb er blijkbaar nog niet veel verstand van.
 
Volgens mij komt het erop neer dat de heren zeggen dat er geen enkele tekens behalve commentaar en <?php voor session_start mogen staan. En dat het anders fitaal faalt.
 
Heb alle bestanden bijgevoegd. Als iemand de oplossing kan vinden wil je mij die dan goed en duidelijk uitleggen. Als beginnende PHP er kom je de nodige dingen tegen die best lastig zijn.
Bestanden:
Bekijk bijlage root.zip
 
In inlog2 gaat het fout:

Jij doet dit:
Code:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 

<?php
session_start(); //sesie beginnen
// controleren of pagina correct is aangeroepen.
if (!empty($_POST)){

En het moet zijn dit:
Code:
<?php
session_start(); //sesie beginnen ?>

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 

<?php
// controleren of pagina correct is aangeroepen.
if (!empty($_POST)){

Met de simpele reden dat er gaan andere code html, css, php of wat dan ook voor de opracht sessions start mag staan. (commentaar en <?php - zijn uitgezonderd)

EDIT: in beveiligd doe je het overigens nog steeds
 
Ik en dit zal aan mij liggen, heb de volgende manier van een session maken nog nooit gezien,

PHP:
        // e-mailadres gevonden, registreer gegevens in session
        $username = $_POST["email"];
        $wachtwoord = $_POST["wachtwoord"];
        session_register("username");
        session_register("wachtwoord");

Probeer het eens zo:
PHP:
        // e-mailadres gevonden, registreer gegevens in session
        $username = $_POST["email"];
        $wachtwoord = $_POST["wachtwoord"];
        $_SESSION["username"] = $username;
        $_SESSION["wachtwoord"] = $wachtwoord;

Overigens moet je je afvragen waar je een sessie wachtwoord voor nodig hebt.

Overigens is dit een wat meer gebruikte manier van het maken van een php script:
PHP:
<?php session_start(); //sesie beginnen  
// controleren of pagina correct is aangeroepen.
if (!empty($_POST)){
    include("connect.php");
    $query = "SELECT * FROM users
           WHERE email='" . $_POST["email"] ."'
           AND wachtwoord='". $_POST["wachtwoord"]. "'";
    $result = mysql_query($query) or die (mysql_error());
    
    if (mysql_num_rows($result) > 0) {
        // e-mailadres gevonden, registreer gegevens in session
        $username = $_POST["email"];
        $wachtwoord = $_POST["wachtwoord"];
        session_register("username");
        session_register("wachtwoord");

        // doorsturen naar beveiligde pagina
        header("Location: beveiligd.php");
        exit();
}else{
    // geen e-mailadres gevonden, of ongeldig wachtwoord.
    $tekst = "U hebt geen geldige combinatie van e-mailadres en wachtwoord
             opgegeven. Maak een keuze: <br>
    <a href=\"login.php\">Opnieuw inloggen</a><br>
    <a href=\"register.php\">Hier registreren</a><br>";
    die($tekst);
}
}else{
    // pagina was incorrect aangeroepen, direct doorsturen naar login.php
    header("Location: login.php");
}

//Doorsturen naar de pagina waar die heen moet als die correct is ingelogd:
header ("location: WAARDIEHEENMOET.IETS");

?>

Ik heb het uit mn hoofd getypt, syntaxfouten zijn dus inbegrepen.
 
Laatst bewerkt:
Ik had dit script uit een boek.

maar je oplossing werkt!

heb dit geprobeerd en hij werkt:

// e-mailadres gevonden, registreer gegevens in session
$username = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION["username"] = $username;
$_SESSION["wachtwoord"] = $wachtwoord;

heel erg bedankt mensen jullie hebben deze leek(in php dan) weer wat geleerd:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan