Gå til innhold

Utvikling av passordscript


Anbefalte innlegg

Hei, er nå kommet et stykke på vei med passordscriptet mitt.

Nå skal jeg gjøre slik at dersom ikke det blir fylt ut innhold i Brukernavn og passord feltene, får man opp beskjeden "*Du må fylle ut alle feltene over!"

Dette fungerer fint.

Men dette ødelegger for resten av koden.

 

Når du skal logge inn, får du meldingen om at "Du må fylle ut alle feltene over" i steden for " Du er nå logget inn osv..."

 

HER ER EN DEMO AV SCRIPTET!

 

Brukernavn: demo

Passord: demo

 

Her er koden:

<?php
//Administrer brukere
$bruker['erixz'] = 'skjult9991';
$bruker['gjest'] = 'gjest';
$demo['demo'] = 'demo';

//Variabler som innholder informasjon som ble skrevet av bruker
$trykk=$_POST['submit'];
$brukerget=$_POST['bruker'];
$passget=$_POST['pass'];
$glemt=$_POST['brukerget'];

//Funksjon som lager former og knapper
function alt () {
echo "<form id='form1' name='form1' method='post' action=''>
 <table width='348' border='0'>
   <tr>
<td width='68'><label for='textarea'>Brukernavn:</label></td>
   <td width'270'><input name='bruker' type='text' id='bruker' value='' size='28' /></td>
   </tr>
   <tr>
     <td><label for='textarea'>Passord:</label></td>
     <td><input name='pass' type='password' id='pass' value='' size='28' /></td>
   </tr>
   <tr>
     <td><label for='Submit'></label></td>
     <td><input type='submit' name='submit' value='Logg inn' id='submit' />
       <a href='#'>
       <label for='Submit'></label>
       <input type='submit' name='glemt' value='Glemt passord?' id='glemt' />
     </a> </td>
   </tr>
 </table>
</form>";
}
//Funksjonen skrives ut osv... Her noe er feil. 
alt();
if (isset($trykk)){
if (empty($brukerget) || (passget)) {
echo "<div class='rod'>* Du må fylle inn både brukernavn og passord! <br /><br /></class>";
}
else{
//Dette skjer om riktig passord og brukernavn er skrevet inn:
if ($bruker[$brukerget]==$passget) {
echo "<h2>Du har skrevet gyldig brukernavn og passord, du er nå logget inn.";
}
//Og dette skjer om det er feil:
else {
echo "<div class='rod'>";
echo "<h2> Brukernavn eller passord er feil </h2><br /> Du har skrevet et ugyldig brukernavn eller passord. Prøv igjen.";
echo "<br /><br/>";
echo "</div>";
}
}
}
else {
echo "$feilmelding";
}
$glemt=$_POST['glemt'];
if (isset($glemt)) {
echo "Funksjon foreløbig ikke tilgjengelig!";
}
?>

 

Det er sikkert en haug med andre feil her og.

 

Håper dere hjelper meg litt :)

Endret av erixz
Lenke til kommentar
Videoannonse
Annonse

Jepp. Det funket.

 

Nå lurer jeg på hvordan jeg kan bruke sessions slik at

en session startes når man logges inn. Og kan avsluttes ved å trykke på en logg ut link?

 

EDIT: Her er koden nå:

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

<?php
//Administrer brukere
$bruker['erixz'] = 'SENSURi';
$bruker['gjest'] = 'gjest';
$demo['demo'] = 'demo';

$erixz="[email protected]";

$trykk=$_POST['submit'];
$brukerget=$_POST['bruker'];
$passget=$_POST['pass'];
$glemt=$_POST['brukerget'];
//funksjoner
function alt () {
echo "<form id='form1' name='form1' method='post' action=''>
 <table width='348' border='0'>
   <tr>
<td width='68'><label for='textarea'>Brukernavn:</label></td>
   <td width'270'><input name='bruker' type='text' id='bruker' value='' size='28' /></td>
   </tr>
   <tr>
     <td><label for='textarea'>Passord:</label></td>
     <td><input name='pass' type='password' id='pass' value='' size='28' /></td>
   </tr>
   <tr>
     <td><label for='Submit'></label></td>
     <td><input type='submit' name='submit' value='Logg inn' id='submit' />
       <a href='#'>
       <label for='Submit'></label>
       <input type='submit' name='glemt' value='Glemt passord?' id='glemt' />
     </a> </td>
   </tr>
 </table>
</form>";
}
function ok() {
echo "Hei, du ble logget inn uten problemer. <br />";
echo "Du kan nå lese litt om dette scriptet <br />";
echo "<br /> Dette scriptet er laget for at jeg i fremtiden skal ha et vel-fungerende <br /> passordscript til å beskytte ";
echo "informasjon som ikke hvem som helst kan få tilgang til. Jeg vil utvikle scriptet slik at man kan registrere seg ";
echo "selv, skal også legge til en md5-kryptering for ekstra sikkerhet.";
echo "<br /> Jeg vil også legge til en session funksjon som gjør det mulig å logge ut.<br />";
echo "<br /> Mvh, Erik aka. Erixz";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?php if(isset($trykk)) {echo "Innlogging for $brukerget"; } else { echo "Logg deg inn!"; } ?></title>
<link rel="stylesheet" type="text/css"
href="style.css" />
</head>

<body>
<div id="content">

<?php
if (empty($trykk)) {
echo "<h2>Logg inn</h2>";
alt();
}
else {
if (isset($trykk)){
if (empty($brukerget) || empty($passget)) {
echo "<h2>Logg inn</h2>";
alt();

echo "<div class='rod'>* Du må fylle inn både brukernavn og passord! <br /><br /></class>";
}
else{
//Dette skjer om riktig passord og brukernavn er skrevet inn:
if ($bruker[$brukerget]==$passget) {
echo "<h2>Suksess!</h2>";
ok();
}
//Og dette skjer om det er feil:
else {
echo "<h2>Logg inn</h2>";
alt();
echo "<div class='rod'>";
echo "Brukernavn og/eller passord er feil <br /> Du har skrevet et ugyldig brukernavn eller passord. Prøv igjen.";
echo "<br /><br/>";
echo "</div>";
}
}
}
else {
}
//Else avsluttes
$glemt=$_POST['glemt'];
if (isset($glemt)) {
echo "Funksjon foreløbig ikke tilgjengelig!";
}
}
?>
</div>

</body>
</html>

[/code]

Endret av erixz
Lenke til kommentar

luser32: Den e nok feil du.

 

erixz:

 

Fjern funksjonen.

skriv det heller sånn:

?>
<form id='form1' name='form1' method='post' action=''>
<table width='348' border='0'>
  <tr>
<td width='68'><label for='textarea'>Brukernavn:</label></td>
  <td width'270'><input name='bruker' type='text' id='bruker' value='' size='28' /></td>
  </tr>
  <tr>
    <td><label for='textarea'>Passord:</label></td>
    <td><input name='pass' type='password' id='pass' value='' size='28' /></td>
  </tr>
  <tr>
    <td><label for='Submit'></label></td>
    <td><input type='submit' name='submit' value='Logg inn' id='submit' />
      <a href='#'>
      <label for='Submit'></label>
      <input type='submit' name='glemt' value='Glemt passord?' id='glemt' />
    </a> </td>
  </tr>
</table>
</form>
<?php

 

if (empty($brukerget) || (passget)) {

skal skrives:

if (empty($brukerget) || ($passget)) {

 

echo "<div class='rod'>* Du må fylle inn både brukernavn og passord! <br /><br /></class>";

det skal ikke stå </class> men </div>

Jeg anbefaler å bruker span til å farge tekst, ikke div.

 

<span class="rod">

 

 

og når kommer denne tingen fram?

 

$glemt=$_POST['glemt'];

if (isset($glemt)) {

echo "Funksjon foreløbig ikke tilgjengelig!";

}

 

er sikkert noen flere men men

Lenke til kommentar

Hvis personen klarer å logge seg inn starter denne kodesnutten:

$_SESSION['innlogget'] = true;

Så kan du legge denne koden over alt det beskyttede innholdet:

if(!isset($_SESSION['innlogget'])) {
 echo "Du er ikke innlogget!";
 exit;
}

Her er logg ut koden:

if(isset($_SESSION['innlogget'])) {
 unset($_SESSION['innlogget']);
}

Tror det skal fungere :hmm:

 

PS: Husk at session_start(); må ligge over alle sidene som er i sammenheng med en session, det inkluderer at du må ha den der hvor logg inn kodene ligger. session_start(); MÅ ligge øverst i dokumentet!

Endret av kjey
Lenke til kommentar
  • 2 uker senere...

Jeg er nå et godt stykke på vei!

Jeg har også fått til Session-biten, men har et problem:

 

Når man logger inn, må man skrive inn brukernavn og passord to ganger for at nettleseren skal oppdage at session er startet, her er koden:

 

 

admin.php:

<html><head><title> Logg inn - Demo </title>
<link rel="stylesheet" style="css/txt" 
a href="style.css">
</head>
<body> 
<?php


@session_start();
include("config.php");
//Loggut
if (isset($loggut)) {
unset($_SESSION['innlogget']);
$melding="Du er nå logget ut";
}

//Sjekker om session er startet eller ikke
if (isset($_SESSION['innlogget'])) {
innlogget();
}




//blabla...
if (!isset($_SESSION['innlogget']) || (!isset($trykk))) {
login();
}
//Skjer dersom submit blir trykket...
if (isset($trykk)) {

if ($bruker[$brukerget]==$passget) {
$_SESSION['innlogget']=TRUE;
}
}
echo $melding;

echo "<div class='rod'><h3> Dette er en forenklet versjon av scriptet, men session funksjon er lagt til <br /> du må logge inn to ganger for at session blir oppfattet, hjelp?</class></h3>";


?>


 

config.php

<?php
//CONFIG FILEN

//Funksjoner ... 



function innlogget () {
echo "Du er innlogget";
echo "<br /><br />";
echo "<form id='loggu' name='loggu' method='post' action=''>";
echo "<input type='submit' name='loggu' value='Logg ut!' id='loggu' />";
}


function login() {
echo "<form id='form1' name='form1' method='post' action=''>
 <table width='348' border='0'>
   <tr>
<td width='68'><label for='textarea'>Brukernavn:</label></td>
   <td width'270'><input name='bruker' type='text' id='bruker' value='' size='28' /></td>
   </tr>
   <tr>
     <td><label for='textarea'>Passord:</label></td>
     <td><input name='pass' type='password' id='pass' value='' size='28' /></td>
   </tr>
   <tr>
     <td><label for='Submit'></label></td>
     <td><input type='submit' name='submit' value='Logg inn' id='submit' />
       <a href='#'>
       <label for='Submit'></label>
       <input type='submit' name='glemt' value='Glemt passord?' id='glemt' />
     </a> </td>
   </tr>
 </table>
</form>";

}




//Administrer brukere
$bruker['erixz'] = 'sensur';
$bruker['gjest'] = 'gjest';
$demo['demo'] = 'demo';

//Andre variabler
$trykk=$_POST['submit'];
$loggut=$_POST['loggu'];

 

Logg inn med:

 

demo

demo

 

Du kan også logge inn uten passord siden så mangen funksjoner er fjernet i eksempelet :p

 

- OG HER ER SCRIPTET! -

 

Problemet er altså at:

Brukeren må logge inn to ganger før session oppdages.

 

Takk for hjelp!

Endret av erixz
Lenke til kommentar

admin.php

 

Her gjør du noe fantastisk. Du fjerner en kritisk feilmelding til session_start.

Hvorfor gjør du det?

"Men hva skal de ha å si?" sier kanskje du. Jeg vet ikke hvor mange ganger dette er nevnt, men du kan ikke printe en header etter at output er kjørt. Derfor må slike ting _ALLTID_ stå over annen output(echo, print etc).

Lenke til kommentar

Jeg tror jeg er ganske trøtt, men det du sier nå gir meg ingen mening.

(Nei, det er ikke ment bitchy på noen som helst måte)

Slik jeg leser det (i forenklet stand) så sier du:

"Ikke fjern feilmeldingen for du kan ikke printe header etter at det har vært output"

 

Altså en selvmotsigelse?

 

Normalt er jeg imot å undertrykke feilmeldinger, men den eneste feilmeldingen session_start gir er E_NOTICE, og det uten at det er noe fare.

Mitt forslag er at du tester om session_start har blitt kjørt tidligere, istedenfor å undertrykke feilmeldingen.

Dette kan gjøres ved å sjekke at session_id() returnerer en tom streng ("").

// session_id() returnerer ikke-tom streng dersom session_start() har blitt kjørt tidligere
if(strcmp(session_id(), "")  == 0) 
session_start();

Endret av Nazgul
Lenke til kommentar
Jeg tror jeg er ganske trøtt, men det du sier nå gir meg ingen mening.

(Nei, det er ikke ment bitchy på noen som helst måte)

Slik jeg leser det (i forenklet stand) så sier du:

"Ikke fjern feilmeldingen for du kan ikke printe header etter at det har vært output"

 

Altså en selvmotsigelse?

 

Normalt er jeg imot å undertrykke feilmeldinger, men den eneste feilmeldingen session_start gir er E_NOTICE, og det uten at det er noe fare.

Mitt forslag er at du tester om session_start har blitt kjørt tidligere, istedenfor å undertrykke feilmeldingen.

Dette kan gjøres ved å sjekke at session_id() returnerer en tom streng ("").

// session_id() returnerer ikke-tom streng dersom session_start() har blitt kjørt tidligere
if(strcmp(session_id(), "")  == 0) 
session_start();

6732973[/snapback]

Når du sier det, så er jeg enig. Men session_start() sender vel en header, og en header vil ikke bli sendt når output allerede er startet. Så hvorfor ikke flytte session_start opp på toppen?

 

Er også enig i bruken av @. Sikkert fint noen plasser, men som regel så finner man alltid måter å lage sin egen feilmelding om det er nødvendig.

 

Hadde sammen problemet som erixz når jeg lagde et enkelt loginscript. Men husker søren ikke hvordan jeg løste det.

 

Her er hvertfall scriptet jeg hadde

 

 

<?php
$brukernavn                     = "martin";
$passord                = "345g545345g";

$LoggetInn = isset($_SESSION['LoggetInn']) ? true : false;

$bruker = $_POST['bruker'];
$pass = $_POST['pass'];
       
if ($bruker == $brukernavn && md5($pass) == $passord)
{
       $_SESSION['LoggedIn'] = true;
       $LoggetInn = true;
}
else
{
       $LoggetInn = false;
}

if ($LoggetInn)
{
echo "<p>Du er for øyeblikket logget inn.";
}
else
{
echo <<< end
 <form method="post" />
   Brukernavn:</td><td><input name='bruker' type='text' /><br />
   Passord:     <input name='pass' type='password' /><br />
   <input type='submit' value='Login' />
 </span>
 </form>
 
 <p>Du må logge inn!</p>
end;
}
?>

 

 

Endret av M4rTiN
Lenke til kommentar
Finnes det en koden som gjør slik at vis submit knapp er trykket, så blir siden oppdatert to ganger eller noe?

6735996[/snapback]

Hva skal du med det?

Det er mange måter å få til dette på.

Enten sender du brukeren videre til en annen side, som igjen sender brukeren tilbake.

Eller så kan du f.ejs, bruke header() med refresh-parameter.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...