Avatar billede cyfer Nybegynder
27. januar 2003 - 19:47 Der er 24 kommentarer og
1 løsning

Login, ik helt som det skal være :)

^derfor vil jeg gerne have et skrædersyget^ :)

Okay... Hør her:
Alle mine sider laver jeg i toppen disse includes aller øverst:

<?php
include("../hto/includes/top.php");
include("../hto/includes/menu.php");
?>

OKay....
Jeg skal bruge et login system som benytter sessions... Det skal tjekke i databasen MEMBERS hvor brugernavn=nick og passsword=password

Der hvor mit problem opstår er fordi jeg i menu.php vil have loginformen der skal se sådan her ud hvis man ikke er logged ind:

<center>
                        <form action="http://cyfer.1go.dk/hto/loginsystem/login.php" method="post">
          Username:
          <input type="text" name="uid" size="20" style="border-style: solid; border-width: 1">
          <br>
          Password:
          <input type="password" name="pwd" size="20" style="border-style: solid; border-width: 1">
          <br>
          <br>
          <input type="submit" value="Login" style="border-style: solid; border-width: 1">
          </form>
          </center>

Når man så er logged ind skal den skiftes ud med:

<center>
Logged as: '.$userdata[nick].'
</center>


Userdata er selvfølgelig den variabel som kommer fra den person som er logged ind.


Alt dette har jeg prøvet i et stykke tid til at få til at virke, men uden held, så jeg skal have en gennemgang af i hvilke filer jeg skal lægge koden osv.

Altså på alle sider skal man kunne se man er logged ind...

ICQ: 36946323
MSN: cyfer_offer@hotmail.com
Avatar billede totaliorden Nybegynder
27. januar 2003 - 19:49 #1
Lav en cookie, og så er det problem løst
Avatar billede cyfer Nybegynder
27. januar 2003 - 20:13 #2
Kommentar ignoreret.
Seriøse svar modtages gerne.

Vil gerne have en fuld løsning, hvis det kan lade sig gøre.
Er sikker på nogle af jer PHP hajer derude snildt kan lave dette på 10 min :)
Avatar billede totaliorden Nybegynder
27. januar 2003 - 20:30 #3
Spørgsmål ignoreret.
Hjælper ikke folk der ikke vil prøve en løsning.

Dit tab, ikke mit
Avatar billede doing Nybegynder
27. januar 2003 - 20:50 #4
Jeg har noget, du måske kan bruge.

Det består af to små php kodestumper. Her er den første:

<!-- session.php - top -->
<?
echo "<table height=20><tr><td>";
if (!isset($_SESSION['exp_bruger'])) { ?>
  <form action="/inc/login.php" method="post" name="loginform">
    <input name="cmd" type="hidden" value="login">
    <input name="req" type="hidden" value="<? echo $REQUEST_URI; ?>">
    <p>
      Brugernavn: <input maxLength="16" name="login" size="10" value="<? echo $_COOKIE["login"]; ?>">
      Adgangskode: <input maxLength="16" name="pass" size="10" type="password" value="<?echo $_COOKIE["pass"]; ?>">
      <input name="submit" src="/img/login.gif" type="image" value="Login" width="45" height="15" alt="Udfyld brugernavn og adgangskode, og klik så hér" border="0" align="absmiddle">
    </p>
  </form>
<? }
else { ?>
<form action="/inc/login.php" method="post" name="loginform">
    <input name="cmd" type="hidden" value="logout">
    Logget på som: <b><? echo $exp_bruger; ?></b>
    <input name="submit" src="/img/log-af.gif" type="image" value="Logout" width="45" height="15" border="0" align=absmiddle>
    Brugerniveau: <b><?echo $exp_niveau; ?></b>
</form>
<? } ?>
</td></tr></table>
<!-- session.php - bund -->

Filen session.php includer du på alle sider hvor enten loginboks eller teksten "Logget ind som ---- med brugerniveau ----" skal vises.

Her er så den næste - den kaldes af form'en i session.php:

<!-- login.php - bund -->
<?
session_start();
require_once("$DOCUMENT_ROOT/inc/db_init.php"); // åbner MySQL databasen

function godkend ($user, $password) {
  $qry="SELECT ID, statuskode, bruger, adgangskode, niveau,
  fornavn, efternavn, email
  FROM brugere
  WHERE bruger='$user'";
  $query = mysql_query("$qry" );
  $resultat="0002"; // indtil andet er bevist: brugernavn ikke fundet
  while($brugerdata = mysql_fetch_array($query)){
    extract($brugerdata);
    if ($adgangskode==$password) {
      $resultat="0000"; // login godkendt
      $_SESSION['exp_bruger']=$bruger;
      $_SESSION['exp_niveau']=$niveau;
      $_SESSION['exp_fornavn']=$fornavn;
      $_SESSION['exp_efternavn']=$efternavn;
      $_SESSION['exp_email']=$email;
    }
    else
      $resultat="0001"; // adgangskode forkert
  }
  return $resultat;
}

if ($_POST["cmd"]=="login") {
  $godkend=godkend($login,$pass);
  if ($godkend=="0000") {
    if ($_POST["cookie"]=="1"){
      setcookie ("login", $login, Time()+3600*24*60);
      setcookie ("pass", $pass, Time()+3600*24*60);
    }
    else {
      setcookie ("login", "", Time()-3600);
      setcookie ("pass", "", Time()-3600);
    }
    $header="Location: $HTTP_REFERER";
    header($header);
  }
  else {
    echo "Fejlkode: [$godkend]<br><br>";
    echo "<a href=\"$HTTP_REFERER\">Tilbage</a>";
  }
}
else {
  setcookie ("login", "", Time()-3600);
  setcookie ("pass", "", Time()-3600);
  session_destroy();
  $header="Location: $HTTP_REFERER";
  header($header);
}
?>
<!-- login.php - bund -->

Det er da rimeligt enkelt - og kan gøres endnu enklere hvis du vil fjerne faciliteten med at gemme login i en cookie i et par måneder.

Jeg bruger selv et ligenende script, og det virker ganske udmærket. Brugerniveau kan du bruge til hvadsomhelst - f.eks. 1=alm bruger, 2=superbruger og 3=administrator med alle rettigheder

"Learning by Doing"
Avatar billede doing Nybegynder
27. januar 2003 - 20:55 #5
Godt nok står det i en kommentar, men bare for en ordens skyld - databasen skal jo lige åbnes (jeg gør det i et lille include - der er jo sikkert andre dele af dine programmer der skal trække på samme database).

Jeg har ikke brugt samme tabel- og variabelnavne som du gjorde i dine eksempler, men det er vist til at gennemskue hvordan det er bygget op - så kan du jo bare omdøbe efter behov ;o)

doing!
Avatar billede cyfer Nybegynder
27. januar 2003 - 21:37 #6
Vil du være sød at fjerne det med cookies?
Avatar billede doing Nybegynder
27. januar 2003 - 22:43 #7
Så lad gå da - med en lille fejlrettelse og uden småkager ser det således ud:

<!-- login.php - top -->
<?
session_start();
require_once("$DOCUMENT_ROOT/inc/db_init.php"); // åbner MySQL databasen

function godkend ($user, $password) {
  $qry="SELECT ID, statuskode, bruger, adgangskode, niveau,
  fornavn, efternavn, email
  FROM brugere
  WHERE bruger='$user'";
  $query = mysql_query("$qry" );
  $resultat="0002"; // indtil andet er bevist: brugernavn ikke fundet
  while($brugerdata = mysql_fetch_array($query)){
    extract($brugerdata);
    if ($adgangskode==$password) {
      $resultat="0000"; // login godkendt
      $_SESSION['exp_bruger']=$bruger;
      $_SESSION['exp_niveau']=$niveau;
      $_SESSION['exp_fornavn']=$fornavn;
      $_SESSION['exp_efternavn']=$efternavn;
      $_SESSION['exp_email']=$email;
    }
    else
      $resultat="0001"; // adgangskode forkert
  }
  return $resultat;
}

if ($_POST["cmd"]=="login") {
  $godkend=godkend($login,$pass);
  if ($godkend=="0000") {
    $header="Location: $HTTP_REFERER";
    header($header);
  }
  else {
    echo "Fejlkode: [$godkend]<br><br>";
    echo "<a href=\"$HTTP_REFERER\">Tilbage</a>";
  }
}
else {
  session_destroy();
  $header="Location: $HTTP_REFERER";
  header($header);
}
?>
<!-- login.php - bund -->

og:

<!-- session.php - top -->
<?
session_start();
echo "<table height=20><tr><td>";
if (!isset($_SESSION['exp_bruger'])) { ?>
  <form action="/inc/login.php" method="post" name="loginform">
    <input name="cmd" type="hidden" value="login">
    <input name="req" type="hidden" value="<? echo $REQUEST_URI; ?>">
    <p>
      Brugernavn: <input maxLength="16" name="login" size="10">
      Adgangskode: <input maxLength="16" name="pass" size="10" type="password">
      <input name="submit" src="/img/login.gif" type="image" value="Login" width="45" height="15" alt="Udfyld brugernavn og adgangskode, og klik så hér" border="0" align="absmiddle">
    </p>
  </form>
<? }
else { ?>
<form action="/inc/login.php" method="post" name="loginform">
    <input name="cmd" type="hidden" value="logout">
    Logget på som: <b><? echo $exp_bruger; ?></b>
    <input name="submit" src="/img/log-af.gif" type="image" value="Logout" width="45" height="15" border="0" align=absmiddle>
    Brugerniveau: <b><?echo $exp_niveau; ?></b>
</form>
<? } ?>
</td></tr></table>
<!-- session.php - bund -->

doing!
Avatar billede cyfer Nybegynder
28. januar 2003 - 16:49 #8
Og så lige en sidste ting....
Hvor skal de to forskellige filer placeres ?

Skal login.php i min top.php  eller hva ?
Avatar billede cyfer Nybegynder
28. januar 2003 - 16:53 #9
Som jeg har prøvet at samle det nu skriver den :

Warning: Cannot send session cookie - headers already sent by (output started at /var/www/hotels/1go/cyfer/html/login.php:2) in /var/www/hotels/1go/cyfer/html/login.php on line 3

Warning: Cannot send session cache limiter - headers already sent (output started at /var/www/hotels/1go/cyfer/html/login.php:2) in /var/www/hotels/1go/cyfer/html/login.php on line 3

Warning: Cannot add header information - headers already sent by (output started at /var/www/hotels/1go/cyfer/html/login.php:2) in /var/www/hotels/1go/cyfer/html/login.php on line 40

Warning: Cannot send session cookie - headers already sent by (output started at /var/www/hotels/1go/cyfer/html/login.php:2) in /var/www/hotels/1go/cyfer/html/session.php on line 3

Warning: Cannot send session cache limiter - headers already sent (output started at /var/www/hotels/1go/cyfer/html/login.php:2) in /var/www/hotels/1go/cyfer/html/session.php on line 3
Avatar billede doing Nybegynder
28. januar 2003 - 17:04 #10
login.php er et selvstændigt lille program, som blot kaldes når en bruger forsøger at logge på (eller af).

session.php skal du sørge for at include på alle sider, men vel at mærke der hvor du vil ha' din login-boks.

Det hele går galt fordi jeg har placeret en "session_start();" øverst i session.php - det var nok ikke helt gennemtænkt. session_start(); skal nemlig forekomme før der har været noget output overhovedet. Derfor er det smartest hvis du flytter session_start(); fra session.php og i stedet placerer den allerøverst på alle sider hvir du vil bruge login-boksen.

session.start() sikrer at du kan aflæse variablerne $exp_bruger (med login-navnet), $exp_fornavn (med brugerens fornavn) o.s.v.
Avatar billede cyfer Nybegynder
28. januar 2003 - 17:22 #11
Hvad har jeg gjort galt når jeg logger ind og den skriver

Fejlkode: [0001]
Avatar billede doing Nybegynder
28. januar 2003 - 17:27 #12
}
    else
      $resultat="0001"; // adgangskode forkert

Så har du prøvet at logge på med en bruger-id og adgangskode som ikke passer sammen. Det ser ud til at du har tastet et bruger-id som findes i din tabel, men at adgangskoden ikke stemmer...
Avatar billede cyfer Nybegynder
28. januar 2003 - 17:40 #13
Tror det er her fejlen ligger:

function godkend ($user, $password) {
  $qry="SELECT ID, nick, password
  FROM members
WHERE bruger='$user'";


Jeg har prøvet at lave:
function godkend ($user, $password) {
og
WHERE bruger='$user'";

om til:
function godkend ($nick, $password) {
og
  WHERE login='$nick'";


Men tror jeg har ufyldt det forkert.....
Tabellen hedder members
Loginnavnet er i db NICK
Password er i db PASSWORD
Avatar billede doing Nybegynder
28. januar 2003 - 17:45 #14
Så må det jo blive noget i retning af:

function godkend ($user, $password) {
  $qry="SELECT nick, password
  FROM members
  WHERE nick='$user'";
Avatar billede cyfer Nybegynder
28. januar 2003 - 17:46 #15
Skal der ikke være det der med ID ?
Jeg har en id i min database
Avatar billede doing Nybegynder
28. januar 2003 - 17:49 #16
:o) - jo ID må da gerne være med, hvis du har noget at bruge den til. Men i mit eksempel bruges den ikke til noget, og så er der jo egentlig ikke grund til at indlæse den...
Avatar billede cyfer Nybegynder
28. januar 2003 - 17:52 #17
HMmm..
Strange...
Den laver stadig Fejlkode: [0001]
Noget andet må være galt.. Da det ikke er det user og password jeg bruger der er forkert
Avatar billede cyfer Nybegynder
28. januar 2003 - 18:02 #18
mmmm....
Kontakt mig lige på et af disse

icq @ 36946323
msn @ cyfer_offer@hotmail.com
Avatar billede cyfer Nybegynder
28. januar 2003 - 18:02 #19
Så poster vi løsningen her bagefter!
Avatar billede doing Nybegynder
28. januar 2003 - 18:04 #20
Først har jeg valgt at omdøbe det password som brugeren har tastet til "userpass" - blot for at undgå at feltet i funktionen hedder det samme som feltet fra databasen - ellers er de jo svære at sammenligne.

Dernæst vil jeg foreslå dig at lægge lidt "debug" linier ind:

function godkend ($user, $userpass) {
  $qry="SELECT nick, password
  FROM members
  WHERE nick='$user'";
  $query = mysql_query("$qry" );
  ECHO "qry: [$qry]<br>"; // DEBUG!!
  $resultat="0002"; // indtil andet er bevist: brugernavn ikke fundet
  while($brugerdata = mysql_fetch_array($query)){
    extract($brugerdata);
    ECHO "bruger: [$nick] - tastet: [$userpass] - i databasen: [$password]<br>"; // DEBUG!!
    if ($password==$userpass) {
Avatar billede doing Nybegynder
28. januar 2003 - 18:05 #21
går offline et par timer - kontakter dig evt. på msn senere...
Avatar billede cyfer Nybegynder
28. januar 2003 - 18:43 #22
Hmmm...
En ting jeg nu måske mistænker for at være gal, kan være min db.php som jeg:
require_once("db/db.php");

Hvad skal der helt præcist stå i den ?:
Avatar billede doing Nybegynder
28. januar 2003 - 20:25 #23
f.eks. noget i retning af:

$db = mysql_connect("localhost","cyfer_db","adgangskode");
mysql_select_db("cyfer?db", $db);

Hvad får du ud af ECHO'erne jeg foreslog tidligere?
Avatar billede cyfer Nybegynder
28. januar 2003 - 20:57 #24
Dette:

qry: [SELECT nick, password FROM members WHERE nick='']
Fejlkode: [0002]

Tilbage
Avatar billede cyfer Nybegynder
30. januar 2003 - 16:18 #25
uha da det er bare dejligt :)

many thx for help.
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