Avatar billede mmbb Nybegynder
06. oktober 2007 - 15:52 Der er 11 kommentarer

Problemer med at lave en fejlmeddelse

Hej

Jeg har lavet et login på min webside, som fungerer, men jeg vil også gerne have lavet en fejlmeddelse, hvis man taster forkert logind. Nedenfor har jeg den kode, der logger ind og i det næste script, har jeg en fejlmeddelelse, men den kommer frem når der IKKE bliver intastet noget i felterne. Jeg vil kun have den frem, når der bliver tastet forkert.

Kan nogen hjælpe?

<?php session_start();
    require_once("stdlib.php");
   
    if (isset($_SESSION['users'])) {
    header("Location:forsidelogind.php");
   
    }
       
    if (isset($_POST['username']) && strlen($_POST['username']) > 0 &&
    isset($_POST['password']) && strlen($_POST['password']) > 0) {
  $prospect = new Users;
  $prospect->setname($_POST['username']);
  if ($prospect->find() && $prospect->fetch() && $prospect->validpassword($_POST['password'])) {
    $_SESSION['users'] = $prospect->getid();
    header("Location:Webside for logind ");
    exit;
      }
    }
   
?>

<?php
   
    if (!isset($_SESSION['users'])) {
    echo "<p class=style2><b>Der er angivet forkert login </b></p>";
    }

    ?>
Avatar billede nielle Nybegynder
06. oktober 2007 - 16:04 #1
Husk at have session_start() begge steder.
Avatar billede mmbb Nybegynder
06. oktober 2007 - 16:53 #2
De to scrips står på samme php-side, så jeg tror kun, det er nødvendigt, at der står session_start et sted (det andet giver også en fejl - prøvede det lige for en sikkerhedsskyld)
Avatar billede nielle Nybegynder
06. oktober 2007 - 17:21 #3
Ok, jeg læste spørgsmålet som om at det var flere sider.

Umiddelbart tror jeg at problemet ligger her:

    if ($prospect->find() && $prospect->fetch() && $prospect->validpassword($_POST['password'])) {
        $_SESSION['users'] = $prospect->getid();
        header("Location: Webside for logind ");
        exit;
    }

Med den header() sender du jo folk tilbagte til login-siden hvis de har givet de rigtige login oplysninger.

Mon det ikke er bedre med dette?

    if ($prospect->find() && $prospect->fetch() && $prospect->validpassword($_POST['password'])) {
        $_SESSION['users'] = $prospect->getid();
    } else {
        header("Location: Webside for logind ");
        exit;
    }
Avatar billede mmbb Nybegynder
06. oktober 2007 - 17:51 #4
Ja, jeg kan egentlig godt forstå, det kan virke lidt forvirrende :o) Det jeg kalder Webside for logind/forsidelogind.php er den side, jeg videresender folk til, når de har tastet det rigtige kodeord. Så den del af det virker som det skal.

Problemet er at skrive en fejlmeddelse, hvis brugeren taster et forkert logind navn ind.
Avatar billede johan.o Nybegynder
07. oktober 2007 - 00:24 #5
..måske sådan her..

  if (isset($_POST['username']) && strlen($_POST['username']) > 0 && isset($_POST['password']) && strlen($_POST['password']) > 0) {
  $prospect = new Users;
  $prospect->setname($_POST['username']);
  if ($prospect->find() && $prospect->fetch() && $prospect->validpassword($_POST['password'])) {
    $_SESSION['users'] = $prospect->getid();
    header("Location:Webside for logind ");
    exit; }
  else {
    echo "<p class=style2><b>Der er angivet forkert login </b></p>"; }
  }

Mvh. Johan
Avatar billede nielle Nybegynder
07. oktober 2007 - 10:35 #6
Ok, men virker den der da ikke?

Forresten angående din klasse; hvorfor har du ikke også en setpassword()-funktion som virker på samme måde som setname() - det ville gøre din klasse mere veldefineret og du ville kunne forsimple kaldet til validpassword():

if (isset($_POST['username']) && strlen($_POST['username']) > 0 && isset($_POST['password']) && strlen($_POST['password']) > 0) {
    $prospect = new Users;
    $prospect->setname($_POST['username']);
    $prospect->setpassword($_POST['password']);

    if ($prospect->find() && $prospect->fetch() && $prospect->validpassword()) {
        $_SESSION['users'] = $prospect->getid();
        header("Location:Webside for logind ");
        exit;
    } else {
        echo "<p class=style2><b>Der er angivet forkert login </b></p>";
    }
}
Avatar billede mmbb Nybegynder
07. oktober 2007 - 15:06 #7
Tak for gode idéer til hvordan jeg løser problemet. Jeg har tidligere prøvet det med "else", men det virkede ikke helt efter hensigten, fordi jeg vil have vist fejlmeddelelsen et andet sted på siden end der, hvor jeg havde den første del af kode. Nu har jeg fundet ud af, at jeg bare skulle lade
<?php session_start();
    require_once("stdlib.php");
?>
stå øverst og rykke resten af koden så viker det.

Også tak for rådet om at gøre min klasse mere veldefineret - det vil jeg lige kigge på.
Avatar billede nielle Nybegynder
07. oktober 2007 - 16:00 #8
I stedet for at udskrive den med det samme, kan du jo gemme fejlbeskeden i en variabel indtil at du er nået til det sted hvor at den skal indgå i resten af siden.
Avatar billede mmbb Nybegynder
07. oktober 2007 - 16:08 #9
Hmm ja, hvordan gør det? Det andet jeg fik lavet virkede nemlig heller ikke helt godt (gav i hvert fald problemer på en anden side... øv)
Avatar billede nielle Nybegynder
07. oktober 2007 - 16:11 #10
f (isset($_POST['username']) && strlen($_POST['username']) > 0 && isset($_POST['password']) && strlen($_POST['password']) > 0) {
    $prospect = new Users;
    $prospect->setname($_POST['username']);
    $prospect->setpassword($_POST['password']);

    if ($prospect->find() && $prospect->fetch() && $prospect->validpassword()) {
        $_SESSION['users'] = $prospect->getid();
        header("Location:Webside for logind ");
        exit;
    } else {
        $errMsg = "<p class=style2><b>Der er angivet forkert login </b></p>";
    }
}

... og så lidt kode ...
... hvorefter vi kommer til hvor det skal udskrives ...

echo $errMsg;
Avatar billede nielle Nybegynder
16. oktober 2007 - 08:35 #11
Er du kommet vidre med denne her?
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