Avatar billede mystart Nybegynder
03. august 2001 - 14:16 Der er 9 kommentarer og
1 løsning

Session problem - HJÆLP!

Ja, den vil ikke gemme session, den kommer ikke med nogen fejl, så session understøttes, og filen hedder da også .php4... jeg bruger nogenlunde samme script et andet sted, og der virker det fint...

<?
if($mode == \'newuserok\') {
    header(\"location:login.php4\");
    $pass = md5($pass1);
    $link = mysql_connect(\"host\",\"user\",\"pass\");
    mysql_select_db(\"acra\",$link);
    mysql_query(\"INSERT INTO users (id,navn,alder,pass,adresse,city,postnr,profil,username) values (\'\',\'$navn\',\'$alder\',\'$pass\',\'$adresse\',\'$city\',\'$postnr\',\'$profil\',\'$user\')\");
} elseif($mode == \'login\' && $action == \'ok\') {
    session_start();
    session_register(\"user\");
    session_register(\"userid\");
    print(\'<meta http-equiv=\"refresh\" content=\"1;URL=login.php4\">\');
} elseif($mode == \'login\' && $action == \'check\') {
    $l = mysql_connect(\"host\",\"user\",\"pass\");
    mysql_select_db(\"acra\",$l);
    $q = mysql_query(\"SELECT * FROM users WHERE username = \'$user\'\");
    $r = mysql_fetch_array($q);
    if ($r[pass] == md5($pass)) {
        $userid = $r[id];
        session_start();
        session_register(\"user\");
        session_register(\"userid\");
        header(\"location:?mode=login&action=ok\");
    }
}
?>
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML>
<HEAD>
<LINK REL=\"stylesheet\" HREF=\"comstyles.css\" TYPE=\"text/css\">
</HEAD>

<BODY>
<?
if($mode == \'login\' && $action == \'check\') {
    if ($r[pass] != $pass) {
?>
Your username or password is worng. Try again.<br>
<FORM METHOD=POST ACTION=\"?mode=login&action=check\">
<INPUT TYPE=\"text\" NAME=\"user\" style=\"width:200px;\"><br>
<INPUT TYPE=\"password\" name=\"pass\" style=\"width:200px;\"><br>
<INPUT TYPE=\"submit\" value=\"Login\" style=\"width:200px;\">
</FORM>
<?
    }
}

if(!$mode) {
    print(\"<center>\");
    if($user) {
        print(\"<div class=\\\"head\\\">You are now logged in as $user. Use the menu on the top to navigate around the Community of TechnoToilet.</div>\");
    } else {
        print(\"<div class=\\\"head\\\">You are not logged in.</div><div class=\\\"main\\\"><a href=\\\"?mode=login\\\">Click here to login.</a><br><a href=\\\"?mode=newuser\\\">New user? Click here.</a></div>\");
    }
    print(\"</center>\");
} elseif($mode == \'login\' && !$action) {
?>
<div class=\"head\">Login</div><div class=\"main\">
<FORM METHOD=POST ACTION=\"?mode=login&action=check\">
<INPUT TYPE=\"text\" NAME=\"user\" style=\"width:200px;\"><br>
<INPUT TYPE=\"password\" name=\"pass\" style=\"width:200px;\"><br>
<INPUT TYPE=\"submit\" value=\"Login\" style=\"width:200px;\">
</div>
</FORM>
<?
} elseif ($mode == \'newuser\') {
?>
<TABLE cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"text-align:left;\"><TR><TD>
<form action=\"?mode=checknewuser\" method=\"post\">
<font class=\"text\">
Your name *<br><INPUT TYPE=\"text\" NAME=\"navn\" size=\"27\"><br>
Choose a username *<br><INPUT TYPE=\"text\" NAME=\"user\" size=\"27\"><br>
Password *<br><INPUT TYPE=\"password\" NAME=\"pass1\" size=\"27\"><br>
Password again *<br><INPUT TYPE=\"password\" NAME=\"pass2\" size=\"27\"><p>
Adress<br><INPUT TYPE=\"text\" NAME=\"adresse\" size=\"27\"><br>
Postal code and city<br><INPUT TYPE=\"text\" NAME=\"postnr\" size=\"4\" maxlength=\"4\">&nbsp;
<INPUT TYPE=\"text\" NAME=\"city\" size=\"25\" class=\"text\"><br>
Age *<br><INPUT TYPE=\"text\" NAME=\"alder\" size=\"3\" maxlength=\"3\"><br>
Description *<br><TEXTAREA NAME=\"profil\" ROWS=\"5\" COLS=\"23\"></TEXTAREA><br>
<INPUT TYPE=\"submit\" NAME=\"submit\" value=\"next >>\"><br>
Fields marked with a * <i>have to</i> be filled.</font>
</form>
</TD></TR></TABLE>
<?
} elseif ($mode == \'checknewuser\') {
    if((!$navn) || (!$user) || (!$pass1) || (!$alder) || (!$profil)) {
        $alert = \"You have to fill every field marked with a *.\";
        $nextmode = \"checknewuser\";
    } elseif($pass1 != $pass2) {
        $alert = \"Check your passwords.\";
        $nextmode = \"checknewuser\";
    } else {
        $alert = \"You are now about to complete the registration as user of the CoTT - Community of TechnoToilet, check the following informations again for failures.\";
        $nextmode = \"newuserok\";
    }
    $indhold = \"<TABLE cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" style=\\\"text-align:left;\\\">\\n<TR><TD>\\n<font class=\\\"red\\\">\";
    $indhold .= $alert;
    $indhold .= \"</font>\\n\";
    $indhold .= \"<br><form action=\\\"?mode=\";
    $indhold .= $nextmode;
    $indhold .= \"\\\" method=\\\"post\\\">\\n\";
    $indhold .= \"Your name *<br><INPUT TYPE=\\\"text\\\" NAME=\\\"navn\\\" size=\\\"27\\\" value=\\\"$navn\\\">\\n<br>\";
    $indhold .= \"Choose a username *<br><INPUT TYPE=\\\"text\\\" NAME=\\\"user\\\" size=\\\"27\\\" value=\\\"$user\\\"><br>\";
    $indhold .= \"Password *<br><INPUT TYPE=\\\"password\\\" NAME=\\\"pass1\\\" size=\\\"27\\\" value=\\\"$pass1\\\">\\n<br>\";
    $indhold .= \"Password again *<br><INPUT TYPE=\\\"password\\\" NAME=\\\"pass2\\\" size=\\\"27\\\" value=\\\"$pass2\\\"><p>\";
    $indhold .= \"Adress<br><INPUT TYPE=\\\"text\\\" NAME=\\\"adresse\\\" size=\\\"27\\\" value=\\\"$adresse\\\"><br>\";
    $indhold .= \"Postal code and city<br><INPUT TYPE=\\\"text\\\" NAME=\\\"postnr\\\" size=\\\"4\\\" value=\\\"$postnr\\\" maxlength=\\\"4\\\">&nbsp;<INPUT TYPE=\\\"text\\\" NAME=\\\"city\\\" size=\\\"25\\\" value=\\\"$city\\\"><br>\";
    $indhold .= \"Age *<br><INPUT TYPE=\\\"text\\\" NAME=\\\"alder\\\" size=\\\"3\\\" maxlength=\\\"3\\\" value=\\\"$alder\\\"><br>\";
    $indhold .= \"Description *<br><TEXTAREA NAME=\\\"profil\\\" ROWS=\\\"5\\\" COLS=\\\"23\\\">$profil</TEXTAREA><br>\";
    $indhold .= \"<INPUT TYPE=\\\"submit\\\" NAME=\\\"submit\\\" value=\\\"next >>\\\"><br></font>\";
    $indhold .= \"Fields marked with a * <i>have to</i> be filled.</form></TD></TR></TABLE>\\n\";
    print(\"$indhold\");
}
?>
</BODY>
</HTML>
Avatar billede jasber Nybegynder
03. august 2001 - 14:32 #1
Mit bedste bud på hvorfor det ikke virker er at du skal registrere session variablerne før end du tildeler dem en værdi (er der nogen der gider rette mig hvis jeg tager fejl?).

Prøv dette istedet:
} elseif($mode == \'login\' &&......
.
.
.
  session_start();
  session_register(\"user\");
  session_register(\"userid\");
  $userid = $r[id];
.
.
.
Avatar billede mystart Nybegynder
03. august 2001 - 14:35 #2
det har jeg da også!
Avatar billede razmuz_dk Nybegynder
03. august 2001 - 15:24 #3
tsk tsk - aldrig session_start FØR register! :o]
Avatar billede mystart Nybegynder
03. august 2001 - 16:40 #4
hmm... men det har virket et andet sted! prøver lige at bytte det om!
Avatar billede mystart Nybegynder
03. august 2001 - 16:47 #5
Grrr... det hjalp ik...
Avatar billede jasber Nybegynder
03. august 2001 - 17:37 #6
razmuz.dk>> og hvorfor så ikke det? det er da ellers den måde (med session_start() først) det står på i bøger, tutorials osv.
Avatar billede razmuz_dk Nybegynder
03. august 2001 - 18:03 #7
Dum bog, der er ingen grund til at session_start\'e før du registere!! - det tager bare unødvendig kraft på serveren!
Avatar billede jd Nybegynder
03. august 2001 - 18:10 #8
razmuz.dk:> Det er da noget vrøvl. session_start() sender en header. Som bekendt må headere ikke sendes efter andet output, og eftersom man tit registrerer variabler i brugerens sessions _efter_ der er sendt output, bliver man nødt til at starte med session_start() manuelt, hvis altså ikke session_auto_start er slået til.

- Jonas
Avatar billede jd Nybegynder
03. august 2001 - 18:15 #9
jasber:> Da du nu ligefrem opfordrer til at blive rettet, klarer vi da den i en håndevending :))

Variablerne skal naturligvis have deres værdi inden de registreres. Ellers vil værdien ikke blive gemt. Eks:

$test = \'flaf\';
session_register(\'test\'); // Når siden refreshes vil $HTTP_SESSION_VARS[\'test\'] indeholde \'flaf\'

session_register(\'test\'); // Når siden refreshed vil $HTTP_SESSION_VARS[\'test\'] være tom
$test = \'flaf\'; // variablen $test vil naturligvis have værdien \'flaf\' resten af dette script (med mindre du manuelt unsetter den), men værdien vil ikke være tilgængelig på næste side.

- Jonas
Avatar billede mystart Nybegynder
06. august 2001 - 14:34 #10
hmm, fed diskution :) men jeg har fundet problemet, der manglede en session_start()
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

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