Avatar billede hrole Mester
23. august 2009 - 22:40 Der er 11 kommentarer og
1 løsning

Problem med sessions

Hvorfor sendes ikke videre til test2.php, men bliver på test.php, ingen fejlmeddelelse:

<?php
ob_start();
session_start();
?>

<?php
if (isset($_POST['submitted'])) {

    require_once('Connect.php');

    if (!empty($_POST['email'])) {
        $e = $_POST['email'];
    } else {
        echo '<p>Du glemte at indtaste e-mailadresse.</p>';
        $e = FALSE;
    }
   
    if (!empty($_POST['kode'])) {
        $k = $_POST['kode'];
    } else {
        $k = FALSE;
        echo '<p>Du glemte at indtaste kodeord.</p>';
    }
   
    if ($e && $k) {
   
        $query = "SELECT Bruger_id, Fornavn FROM brugere WHERE (Email='$e' AND Kode=SHA('$k')) AND Aktiveringskode IS NULL";
        $result = mysql_query ($query) or trigger_error("Query: $query\n<br />MySQL Error: " . mysql_error());

        if (@mysql_num_rows($result) == 1) {
           
            $row = mysql_fetch_array ($result, MYSQL_NUM);
            mysql_free_result($result);
            mysql_close();
            $_SESSION['Fornavn'] = $row[1];
            $_SESSION['Bruger_id'] = $row[0];
           
            $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);

            if ((substr($url, -1) == '/') OR (substr($url, -1) == '\\') ) {
                $url = substr ($url, 0, -1);
            }
            $url .= '/test2.php';

            ob_end_clean();
            header("Location: $url");
            exit();
               
        } else {
        echo '<p>Fejl i indtastning.</p>';
        }
       
    } else {
        echo '<p>Prøv venligst igen.</p>';       
    }
   
    mysql_close();

}
?>

<h1>Login</h1>
<div><form action="test.php" method="post">
    <fieldset>
    <p><b>Email:</b> <input type="text" name="email" id="email" size="20" maxlength="40" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /></p>
    <p><b>Kodeord:</b> <input type="password" name="kode" id="kode" size="20" maxlength="20" /></p>
    <input type="submit" name="submit" value=" Login " />
    <input type="hidden" name="submitted" value="TRUE" />
    </fieldset>
</form></div>

<?php
if (isset($_SESSION['Bruger_id']) AND (substr($_SERVER['PHP_SELF'], -10) != 'logout.php')) {
    echo '<a href="logout.php">Logout</a><br />
<a href="change_password.php">Change Password</a><br />
';
} else {
    echo '    <a href="register.php">Register</a><br />
<a href="login.php">Login</a><br />
<a href="forgot_password.php">Forgot Password</a><br />
';
}
?>

<?php
ob_flush();
?>
Avatar billede eXcluzive Nybegynder
24. august 2009 - 00:34 #1
har du også
session_start();
på den anden side?
Avatar billede hrole Mester
24. august 2009 - 08:02 #2
ja, jeg skulle selfølgelig have sendt koden med. Den kommer her: test2.php:

<?php
session_start();
echo 'Velkommen';
if (isset($_SESSION['first_name'])) {
    echo ", {$_SESSION['first_name']}!";
}
?>
Avatar billede mbm2016 Nybegynder
24. august 2009 - 11:34 #3
For det første kunne jeg rigtig godt tænke mig at vide hvor dit script overhovedet kommer til? Når den f.eks at skrive "Du glemte at indtaste et kodeord" når du glemmer at gøre det :)

Tjek også om du har stavet Connect.php ordentligt og om filen overhoved eksisterer?

På din test.php side så prøv at skrive:
ob_end_flush(); i stedet for ob_flush();

Prøv også at erstatte alle dine isset på sessioner med den "bare" session. Her er et eksempel på hvordan det skal se ud når du tjekker om en session eksisterer:
if($_SESSION['Bruger_id'])
{
// Gør noget
}

Husk også at tjekke om dine session navne er helt præcise da sessioner er case sensitive, dvs. der er altså forskel på store og små bogstaver.

Men hvis alt dette overhoved ikke hjalp, så prøv bare at erstatte din test.php side med:
---------------------------------------------------------------
<?php
ob_start();
session_start();
?>

<?php
if (isset($_POST['submitted']))
{

    require_once('Connect.php'); // Tjek om siden eksisterer

    if (!empty($_POST['email']))
    {
        $e = $_POST['email'];
    } else {
        echo '<p>Du glemte at indtaste e-mailadresse.</p>';
        $e = FALSE;
    }
   
    if (!empty($_POST['kode']))
    {
        $k = $_POST['kode'];
    } else {
        $k = FALSE;
        echo '<p>Du glemte at indtaste kodeord.</p>';
    }
   
    if ($e && $k) {
   
        $query = "SELECT Bruger_id, Fornavn FROM brugere WHERE (Email='".$e."' AND Kode=SHA('".$k."')) AND Aktiveringskode IS NULL"; // Har rettet nogle gåseøjne
        $result = mysql_query ($query) or trigger_error("Query: ".$query."\n<br />MySQL Error: " . mysql_error());

        if (mysql_num_rows($result) == 1) // Har fjernet snabel a'et
        {
           
            $row = mysql_fetch_array ($result, MYSQL_NUM);
            mysql_free_result($result);
            mysql_close();
            $_SESSION['Fornavn'] = $row[1];
            $_SESSION['Bruger_id'] = $row[0];
           

            ob_end_clean();
            header("Location: test2.php");
               
        } else {
        echo '<p>Fejl i indtastning.</p>';
        }
       
    } else {
        echo '<p>Prøv venligst igen.</p>';       
    }
   
    mysql_close();

}
?>

<h1>Login</h1>
<div><form action="test.php" method="post">
    <fieldset>
    <p><b>Email:</b> <input type="text" name="email" id="email" size="20" maxlength="40" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /></p>
    <p><b>Kodeord:</b> <input type="password" name="kode" id="kode" size="20" maxlength="20" /></p>
    <input type="submit" name="submit" value=" Login " />
    <input type="hidden" name="submitted" value="TRUE" />
    </fieldset>
</form></div>

<?php
if ($_SESSION['Bruger_id'] && substr($_SERVER['PHP_SELF'], -10) != 'logout.php')
{
    echo '<a href="logout.php">Logout</a><br />
<a href="change_password.php">Change Password</a><br />
';
} else {
    echo '    <a href="register.php">Register</a><br />
<a href="login.php">Login</a><br />
<a href="forgot_password.php">Forgot Password</a><br />
';
}
?>

<?php
ob_end_flush();
?>

-------------------------------------------------------------


Og din test2.php med:
-------------------------------------------------------------
<?php
session_start();
echo 'Velkommen';
if ($_SESSION['first_name'])
{
    echo ", {".$_SESSION['first_name']."}!";
}
?>
-------------------------------------------------------------
Avatar billede hrole Mester
24. august 2009 - 13:17 #4
Hej - tak for dine grundige forslag.

Efter indtastning af gyldig email og kode får jeg blot en blank side - vel at mærke test.php-siden. Korrekt fejlmeddelelse kommer ved manglende email eller kode, og der kommer ingen fejlmeddelse ifm. query og mysql.

Connect.php er stavet korrekt og eksisterer.

ob_flush(); eller fjernelse af isset ved sessionerne hjalp ikke - stadig blank skærm.

Jeg kan se jeg i test2.php havde skrevet first_name i stedet for Fornavn, det er rettet, men stadig blank skærm.

Har forsøgt at prøve med dine scripts, men stadig blank skærm.

Jeg tror fejlen må være i:
        if (@mysql_num_rows($result) == 1) {
           
            $row = mysql_fetch_array ($result, MYSQL_NUM);
            mysql_free_result($result);
            mysql_close();
            $_SESSION['Fornavn'] = $row[1];
            $_SESSION['Bruger_id'] = $row[0];
           
            $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);

            if ((substr($url, -1) == '/') OR (substr($url, -1) == '\\') ) {
                $url = substr ($url, 0, -1);
            }
            $url .= '/test2.php';

            ob_end_clean();
            header("Location: $url");
            exit();

Men hvor?
Avatar billede hrole Mester
24. august 2009 - 17:31 #5
Kan jeg have lavet en fejl i opsætningen af databasen?
Avatar billede eXcluzive Nybegynder
24. august 2009 - 17:50 #6
forstår ikke hvorfor på test2.php vil du at den skal echo $_SESSION['first_name'] det er ingen stede session hedder det, eller det bare mig, måske skal den hedde $_SESSION['Fornavn']?
men ellers prøv og test om den overføre sådan en simpelt session.

session_start();
$_SESSION["test"]="min test";

og på  den anden

session_start();
echo $_SESSION["test"];
virker det? så det ikke noget galt med session, tjek alle navne.
Avatar billede hrole Mester
24. august 2009 - 21:20 #7
#6 det er korrekt det er en fejl med first_name/Fornavn, se min post #4.

Overførslen af sessions virker.
Avatar billede eXcluzive Nybegynder
24. august 2009 - 23:50 #8
er det ikke sådan det skal stå så?     
$row = mysql_fetch_array ($result, MYSQL_NUM);

            $_SESSION['Fornavn'] = $row[1];
            $_SESSION['Bruger_id'] = $row[0];
            mysql_free_result($result);
            mysql_close();
Avatar billede hrole Mester
25. august 2009 - 07:49 #9
stadig blank skærm desværre
Avatar billede hrole Mester
25. august 2009 - 14:11 #10
Jeg har nu forsøgt følgende:
1. logge ind på test.php, hvilket giver blank skærm.
2. taste url'en til test2.php i browseren, hvorved der står "Velkommen, hrole!", præcis som der skulle.

Dette bestyrker mig i at der er fejl i:
        if (@mysql_num_rows($result) == 1) {
           
            $row = mysql_fetch_array ($result, MYSQL_NUM);
            mysql_free_result($result);
            mysql_close();
            $_SESSION['Fornavn'] = $row[1];
            $_SESSION['Bruger_id'] = $row[0];
           
            $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);

            if ((substr($url, -1) == '/') OR (substr($url, -1) == '\\') ) {
                $url = substr ($url, 0, -1);
            }
            $url .= '/test2.php';

            ob_end_clean();
            header("Location: $url");
            exit();

sikkert i delen som danner url'en. Men jeg kan ikke gennemskue hvor, men konstatere at url'en efter indlogning stadig er test.php.
Avatar billede hrole Mester
25. august 2009 - 20:35 #11
Jeg har nu prøvet at skrive al koden igen i nye filer - og det virker! Meget mystisk, men mange tak for jeres tid.
Avatar billede hrole Mester
25. januar 2010 - 13:14 #12
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester