Avatar billede kyppo Nybegynder
03. september 2003 - 22:53 Der er 44 kommentarer

Opret & Login m. cookies

Hey! Jeg har 2 problemer med mit brugersystem. Første er med min opret.php og oprettet.php .. Det hele virker, BORTSET FRA ÉN TING! Brugernavn, som ellers burde være det mest simple? Når man opretter en bruger, så bliver brugernavnet ikke det man vælger, men mit: KyPPo .. HJÆLP!

Først og fremmest kan I se opret.php :

---------

<html>
<head>
<title>Opret bruger</title>
</head>
<body>
<center>
Dette er ganske enkelt min venne-klub, som du kan blive medlem af :o)
<br><br>
<form action="oprettet.php" method="post">
Ønskede brugernavn:
<br><input type="text" name="brugernavn">
<br>Email:
<br><input type="text" name="email">
<br>Alder:
<br><input type="text" name="alder">
<br>Hjemmeside:
<br><input type="text" name="hjemmeside" value="http://">
<br>MSN:
<br><input type="text" name="msn">
<br>ICQ:
<br><input type="text" name="icq">
<br>Password:
<br><input type="password" name="password">
<br>Profil:
<br><textarea name="profil" cols="20" rows="10"></textarea>
<br><br><input type="submit" value="-- Opret Bruger --" name="submit">
</form>

</center>

</body>
</html>

---------

Det er jo ikke noget specielt avanceret, så jeg hopper jer straks over til oprettet.php:

---------

<?php

$db = mysql_connect("localhost", "kyppo", "mitpassword");

mysql_select_db("kyppo",$db);

$sql = "INSERT INTO users (brugernavn, email, alder, hjemmeside, msn, icq, password, profil, oprettet) VALUES ('$brugernavn','$email','$alder','$hjemmeside','$msn', '$icq', '$password','$profil',now())";

$result = mysql_query($sql);

?>

<html>
<head>
<meta HTTP-EQUIV="REFRESH" CONTENT="5; URL=http://www.kyppo.frac.dk/index2.php">
<title>Du er nu oprettet! :o)</title>
</head>
<body>
<font face="Arial" size="3"><center>Tillykke, du er nu oprettet :D Du kommer til forsiden :o)</center></font>

</body>
</html>

---------

Kan I se problemet der? Jeg kan ikke.. Vi hopper over til login.php:

---------

<form method="POST" action="index2.php">
Name:<input type="text" name="brugernavn"><br />
Password: <input type="password" name="password"><br />
<input type="submit" name="submit" value="Login">
</form>

---------

Kort og godt.. Så kommer vi til det problematiske: Jeg sender brugeren til index2.php, hvor menuen opdateres, alt efter auth_level, altså om han er alm. bruger, co-admin, eller administrator.. Det virker oxo, bortset fra, at når jeg går ind på en anden side, viser den kun den normale menu, og ikke de "ekstra funktioner" i menuen.. Jeg ved at det er pga. mine cookies, at den ikke husker dem.. Kan I hjælpe mig? Her er koden, til mine cookies, osv:

---------

<?php



if ($submit) {
   
    $db = mysql_connect("localhost", "kyppo", "mitpassword");
    mysql_select_db("kyppo", $db);
$sql = "
SELECT auth_level
FROM users
WHERE brugernavn = '$brugernavn'
AND password = '$password'
";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $auth_level = $row["auth_level"];
    }
            setcookie('brugernavn', $_POST['brugernavn'], (time()+2592000), '/', '', 0);
        setcookie('auth_level', $_POST['auth_level'], (time()+2592000), '/', '', 0);
        ?>
   
   

              <?
              $_COOKIE["auth_level"];
             
              if ($auth_level == "2") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }
             
             
              elseif ($auth_level == "3") {
             
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>
            <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin2'>Head-Admin</a></BIG></STRONG><BR>";
              }
             
              ?>

          <?php

// close the script

}
?>

---------

Det var alt.. Jeg håber seriøst der er nogen der kan hjælpe mig, for det her er ved at tage livet af mig!! På forhånd mange mange tusind tak :o)
Avatar billede pissed_squirrel Nybegynder
03. september 2003 - 22:58 #1
Du bruger ikke $brugernavn til noget andet end din reg side vel ??

Ellers kunne det jo være det var det der gav nogle problemer
Avatar billede exp Juniormester
03. september 2003 - 23:00 #2
også min første tanke...
Avatar billede hmortensen Nybegynder
03. september 2003 - 23:01 #3
Det kan ikke være noget med den cookie som indeholder dit brugernavn, som den ik helt fatter ikke slette, og så erstatter den variabel ?
Avatar billede detox Nybegynder
03. september 2003 - 23:08 #4
Hvor indsætter du 'auth_level' i din database, eller er det sådan at den har en default value? For jeg kan ikke lige se, hvor det sker.
Hvad gør det her?;

?>
   
   

              <?
              $_COOKIE["auth_level"];
Avatar billede kyppo Nybegynder
04. september 2003 - 12:17 #5
<?
              $_COOKIE["auth_level"];

Den gør ikke noget, det var et forsøg fra min side, om at få den til at huske de cookies.. Har bare ikke fået slettet den endnu.

Og jo, $brugernavn bruger jeg jo i min SQL-sætning, øverst på den kode, fra index2.php:

<?php



if ($submit) {
   
    $db = mysql_connect("localhost", "kyppo", "mitpassword");
    mysql_select_db("kyppo", $db);
$sql = "
SELECT auth_level
FROM users
WHERE brugernavn = '$brugernavn'
AND password = '$password'
";

Men anyways, jeg tænkte også på, at den cookie der bliver lavet, indeholder brugernavnet, og så misforstår den noget. For hvis man opretter 2 brugere, på samme computer, så er det, at den kyler det samme navn op.. Kan jeg ikke lave noget, så den kun kan ha én gange samme IP på min database?
Avatar billede kyppo Nybegynder
04. september 2003 - 12:18 #6
auth_level er aller-nederst i min database, og den har en default værdi på '1' , da det er alm. brugerniveau.. Så kommer level 2 og 3: co-admin og administrator.. Kan det ha noget med det, at gøre?
Avatar billede detox Nybegynder
04. september 2003 - 12:38 #7
Jamen du indsætter da heller ikke ip? men hvis du vil undgå dubletter kan du lave feltet unikt. Du kunne jo lave noget debugging ved at prøve at udskrive nogle variabler for at se om de indeholder det du forventer. Fx denne her:

$result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        $auth_level = $row["auth_level"];
    }

Som du i øvrigt bør ændre, da den jo kun skal give en række som resulltat. Fx til noget lig:

$result = mysql_query($sql);
    if (mysql_num_rows($result) == 1) {
        $auth_level = mysql_result($result,0);
    }
Avatar billede kyppo Nybegynder
04. september 2003 - 12:47 #8
Sådan, nu virker min opret.php og oprettet.php .. Simpelt.. ændre tekstfeltet "brugernavn" til "username" .. og det samme med oprettet.php at ændre value $brugernavn til $username .. Nu mangler jeg bare det sidste :D
Avatar billede detox Nybegynder
04. september 2003 - 12:50 #9
Ja, det har osse drillet mig med register_globals sat. Så gælder det om at være påpasselig med variabelnavne så de ikke overskriver hinanden.
Avatar billede kyppo Nybegynder
04. september 2003 - 13:00 #10
Er der nogen forslag på, hvordan jeg rent faktisk får den til at HUSKE de cookies, på de andre sider oxo?
Avatar billede detox Nybegynder
04. september 2003 - 13:51 #11
Ja, det skulle den da gerne gøre, for så vidt brugeren har aktiveret brugen af cookies.
Avatar billede kyppo Nybegynder
04. september 2003 - 14:09 #12
Oki.. Men det gør den ikke, og jeg har aktiveret brugen af cookies.. mener jeg da nok ? Hm.. nej, det har vist ikke noget med, om cookies er sat til, eller ej, at gøre.. For jeg har prøvet at sætte min cookie-sikkerheds ting ned på minimum.. der sker stadig ikke noget =/
Avatar billede detox Nybegynder
04. september 2003 - 14:24 #13
Og hvordan prøver du så at hente indholdet af dine cookies? Noget helt andet du skal være opmærksom på at dine brugere ret let kan ændre i deres cookies, så de selv kan bestemme deres 'auth_level'. Hvis jeg var dig vil jeg nøjes med at gemme brugernavnet i cookies og så hente authlevel fra databasen og fx ligge i en session.
Avatar billede kyppo Nybegynder
04. september 2003 - 14:33 #14
Øhhhh, ok.. nu kommer noob'en frem i mig, for jeg fattede minus af hvad du lige sagde????
Avatar billede detox Nybegynder
04. september 2003 - 14:45 #15
Ok, det jeg mener er, når folk besøger din side tjekker du om $_COOKIE['bruger'] er sat. Hvis ikke beder du folk logge ind på normal vis. Hvis den er sat, henter du 'auth_level' i din database ud fra $_COOKIE['bruger']. Du kan jo så lægge 'auth_level' i en session variabel. På den måde undgår du at brugeren går ind og fifler med sin cookie og sætter en anden 'auth_level'.
Avatar billede kyppo Nybegynder
04. september 2003 - 14:48 #16
Ohh, se, nu må jeg jo ud og lede på nettet :D Jeg håber virkelig google.com tar sig sammen, for alt andet jeg har fundet indtil videre, har virkelig været elendigt !
Avatar billede detox Nybegynder
04. september 2003 - 14:52 #17
Nu ved jeg jo ikke om du har erfaring i brug af sessions, men det er faktisk ret simpelt. Jeg vil endda mene det er lettere end cookies. Du skal bare sørge for at du har session_start() stående øverst på alle dine sider. Så kan du sætte en session variabel med:
$_SESSION['auth_level'] = 1;
og derefter bruge den på alle dine sider som en hvilken som helst anden variabel. Fx:
if ($_SESSION['auth_level'] == 1) {
  //brugeren har status som alm. bruger.
}
Avatar billede kyppo Nybegynder
04. september 2003 - 14:53 #18
Whoa ! Ja, det har du ret i.. Det er jo egentlig ret simpelt ! Jeg har meget lidt, til absolut ingen erfaring indefor sessions og cookies.. er faktisk først lige begyndt at pusle lidt med det for nyligt..
Avatar billede kyppo Nybegynder
04. september 2003 - 14:58 #19
Hm.. Nå.. det sys nok ikk.. Den vil ikke gøre som jeg vil ha.. Faktisk er der ingen forandring overhovedet =/
Avatar billede detox Nybegynder
04. september 2003 - 15:08 #20
Hvordan ser dit script ud nu?
Avatar billede kyppo Nybegynder
04. september 2003 - 15:10 #21
Aller-øverst har jeg det her:

-----

<?
ob_start();
session_start();
session_register('auth_level');
$_SESSION['auth_level'] = 1;
$_SESSION['auth_level'] = 2;
$_SESSION['auth_level'] = 3;
?>

-----

Og så nede ved menuen, hvor ændringerne skal forekomme, har jeg det her:

-----

                          <?php




   
    $db = mysql_connect("localhost", "kyppo", "mitpassword");
    mysql_select_db("kyppo", $db);
$sql = "
SELECT auth_level
FROM users
WHERE brugernavn = '$brugernavn'
AND password = '$password'
";

$result = mysql_query($sql);
    if (mysql_num_rows($result) == 1) {
        $auth_level = mysql_result($result,0); 
       



            setcookie('brugernavn', $_POST['brugernavn'], (time()+2592000), '/', '', 0);
           
        ?>

              <?
              if ($_SESSION['auth_level'] == "1") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>";
              }
             
              elseif ($_SESSION['auth_level'] == "2") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>
              <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }
             
             
              elseif ($_SESSION['auth_level'] == "3") {
             
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>
              <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }
             
              ?>

          <?php

// close the script

}
?>

-----

Og helt i bunden, flusher jeg min output buffer med <? ob_end_flush(); ?>
Avatar billede detox Nybegynder
04. september 2003 - 15:24 #22
Du skal ikke bruge session_register() og dette:
$_SESSION['auth_level'] = 1;
$_SESSION['auth_level'] = 2;
$_SESSION['auth_level'] = 3;
gør bare at du overskriver $_SESSION['auth_level'] og den ender med at blive 3.
Det jeg mener du skal gøre er noget i den her stil:

session_start();
if (isset($_SESSION['auth_level']{
  //bruger er logget på
}elseif (isset($_COOKIE['brugernavn'])) {
  // Hent 'auth_level' fra din database ud fra cookie brugernavnet
  $_SESSION['auth_level'] = //værdi fra database
}else{
  //log brugeren ind på normal vis og sæt $_COOKIE['brugernavn'] og $_SESSION['auth_level']
}
Avatar billede kyppo Nybegynder
04. september 2003 - 15:31 #23
Jeg får en fejl..

Parse error: parse error, unexpected '}' in /web/www/frac/users/kyppo/index2.php on line 6

For jeg går ud fra at den skal stå i toppen? Det er faktisk ligemeget hvor jeg smider den hen, så får jeg den fejl.. Line 6 er den linie her:

}elseif (isset($_COOKIE['brugernavn'])) {
Avatar billede detox Nybegynder
04. september 2003 - 15:33 #24
Der mangler da osse nogle parenteser her:

if (isset($_SESSION['auth_level'])) {
Avatar billede kyppo Nybegynder
04. september 2003 - 15:43 #25
Yup, så langt, så godt.. Nu siger den fejl et andet sted:

} else {

der.. Kan dog ikke se, hva der sku være galt der??? Fejlen er den samme som før..
Avatar billede detox Nybegynder
04. september 2003 - 15:45 #26
Husker du at afslutte dine linier med: ; ?
Avatar billede kyppo Nybegynder
04. september 2003 - 15:48 #27
Jada.. Kan du se fejlen?

-----

session_start();
if (isset($_SESSION['auth_level'])) {
  //bruger er logget på
}elseif (isset($_COOKIE['brugernavn'])) {
  // Hent 'auth_level' fra din database ud fra cookie brugernavnet
  $_SESSION['auth_level'] =
} else {
Avatar billede detox Nybegynder
04. september 2003 - 15:56 #28
Ja, du er nød til reelt at hente 'auth_level' fra din database:

session_start();
if (isset($_SESSION['auth_level'])) {
  //bruger er logget på
}elseif (isset($_COOKIE['brugernavn'])) {
$db = mysql_connect("localhost", "kyppo", "mitpassword");
    mysql_select_db("kyppo", $db);
$sql = "SELECT auth_level FROM users WHERE brugernavn = '".$_COOKIE['brugernavn']."'";
$result = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($result) == 1) {
      $auth_level = mysql_result($result,0); 
      $_SESSION['auth_level'] = $auth_level;
    }
} else {
Avatar billede kyppo Nybegynder
04. september 2003 - 16:05 #29
Yeyeye..! Closing up on target. Ingen fejl mere, nu viser den bare ikke, at man er logget ind, dvs. man logger ind, men de ekstrafunktioner bliver ikke vist i menuen..
Avatar billede kyppo Nybegynder
04. september 2003 - 16:07 #30
Vent lidt, jeg laver lige hurtigt en co-admin bruger, så du selv kan se det.. det bliver:

brugernavn : coadmin
password: coadmin
Avatar billede detox Nybegynder
04. september 2003 - 16:18 #31
Ja, man logger da fint ind. Og der kommer et link frem med: 'nyheds-admin' selvom den ikke kan finde siden der linkes til. Men hvis der mangler nogle funktioner i menuen, må du ind og kigge på din menustruktur.
Avatar billede kyppo Nybegynder
04. september 2003 - 16:22 #32
<?
session_start();
if (isset($_SESSION['auth_level'])) {
  //bruger er logget på
}elseif (isset($_COOKIE['brugernavn'])) {
$db = mysql_connect("localhost", "kyppo", "mitpassword");
    mysql_select_db("kyppo", $db);
$sql = "SELECT auth_level FROM users WHERE brugernavn = '".$_COOKIE['brugernavn']."'";
$result = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($result) == 1) {
      $auth_level = mysql_result($result,0); 
      $_SESSION['auth_level'] = $auth_level;
    }
else {
           
              if ($_SESSION['auth_level'] == "1") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>";
              }
             
              elseif ($_SESSION['auth_level'] == "2") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>
              <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }
             
             
              elseif ($_SESSION['auth_level'] == "3") {
             
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>
              <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }
}



             
              ?>

          <?php

// close the script

}
?>

-----

Det er hele mit script til de ekstra funktioner
Avatar billede detox Nybegynder
04. september 2003 - 16:37 #33
Ja, det er en lidt dum måde at gøre det på. Det forhindrer jo ikke at man kan tilgå admin siden direkte ved at indtaste:
http://www.kyppo.frac.dk/index2.php?page=admin direkte i adresselinien. Så du skal have et ekstra tjek på denne side for at undgå dette.

Her er lidt mere henad hvordan jeg tænker du kunne gøre:

<?
session_start();
if (isset($_SESSION['auth_level'])) {
           
              if ($_SESSION['auth_level'] == "1") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>";
              }
             
              elseif ($_SESSION['auth_level'] == "2") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>
              <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }

              elseif ($_SESSION['auth_level'] == "3") {
              echo "<STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Hurlumhej'>Hurlumhej</a></BIG></STRONG><BR>
              <STRONG><BIG><LI><font face='Verdana' size='1'><a href='index2.php?page=Admin'>Admin</a></BIG></STRONG><BR>";
              }
}elseif (isset($_COOKIE['brugernavn'])) {
$db = mysql_connect("localhost", "kyppo", "mitpassword");
    mysql_select_db("kyppo", $db);
$sql = "SELECT auth_level FROM users WHERE brugernavn = '".$_COOKIE['brugernavn']."'";
$result = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($result) == 1) {
      $_SESSION['auth_level'] = mysql_result($result,0);
    }
}else{
    //Brugeren er ikke logget ind, send bruger til login
}
?>
Avatar billede kyppo Nybegynder
04. september 2003 - 16:38 #34
Nej nej, det har jeg skam allerede ordnet :D Det er kun menuen jeg skal ha til at virke..
Avatar billede kyppo Nybegynder
04. september 2003 - 16:45 #35
Ehm, on second thought, det var måske en ganske fin idé ..
Avatar billede detox Nybegynder
04. september 2003 - 16:48 #36
Ja ok, men du ser vel forskellen i rækkefølgen. Anyway, med hensyn til menuen er jeg ikke sikker på, hvad problemet er. Du laver jo et ekstra link, så vidt jeg kan se. Netop derfor tror jeg du skal kigge på rækkefølgen. Osse fordi er sessionen sat er der ingen grund til at den tjekker andet.
Avatar billede kyppo Nybegynder
04. september 2003 - 17:03 #37
Yes... Nu virker det ! Bortset fra én lille-bitte bagatel: Man skal trykke opdater 2 gange, efter at have logget ind, for at man kan se det.. Altså, hvis man bliver på forsiden efter det ;)
Avatar billede detox Nybegynder
04. september 2003 - 17:11 #38
Ok, løsningen er nok at lave selve login på en anden side og derefter redirecte til forsiden efter at $_SESSION['auth_level'] er sat.
Avatar billede kyppo Nybegynder
04. september 2003 - 17:13 #39
Det ku være en god idé .. Må jeg lige prøve inden jeg hopper i seng med noget mundgodt og Indiana Jones :D By the way.. Har du nogen former for Messenger?
Avatar billede detox Nybegynder
04. september 2003 - 17:17 #40
Jo: sveegaard@hotmail.com (så vidt jeg husker!)
Avatar billede kyppo Nybegynder
04. september 2003 - 17:22 #41
Nice nok. Prøver lige at tilføje dig engang ;)

Koden til at tjekke om password- og brugernavn-felterne er tomme, er den ikke sådan her:

-----

if(!$password == "" && $brugernavn == "")
echo "Du skal udfylde felterne!";

-----
Avatar billede detox Nybegynder
04. september 2003 - 17:28 #42
Næ, du skal nok ikke have ! med:

if($password == "" || $brugernavn == "") echo "Du skal udfylde felterne!";
Avatar billede kyppo Nybegynder
04. september 2003 - 17:33 #43
Hmm... Kan ikke påstå at det virker *G* Nok fordi jeg har det forkerte med i loggedin.php .. Hmmm....
Avatar billede kyppo Nybegynder
05. september 2003 - 15:13 #44
Nu virker loggedin.php NÆSTEN.. bortset fra at man oxo skal trykke Opdater 2 gange før man blir viderstillet =/
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