Erik B. Skrevet 14. august 2006 Del Skrevet 14. august 2006 (endret) 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 14. august 2006 av erixz Lenke til kommentar
luser32 Skrevet 14. august 2006 Del Skrevet 14. august 2006 Så på den 1min så skal ikke garantere noe, menne legg til empty og $ foran passget: if (empty($brukerget) || empty($passget)) { Lenke til kommentar
Erik B. Skrevet 14. august 2006 Forfatter Del Skrevet 14. august 2006 (endret) 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 14. august 2006 av erixz Lenke til kommentar
AlecTBM Skrevet 14. august 2006 Del Skrevet 14. august 2006 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
Erik B. Skrevet 14. august 2006 Forfatter Del Skrevet 14. august 2006 Luser32 hadde rett han. Hadde aldri trodd det, men hadde faktisk det. Noen som kan hjelpe meg med sessionsaken? Lenke til kommentar
kjey Skrevet 14. august 2006 Del Skrevet 14. august 2006 (endret) 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 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 14. august 2006 av kjey Lenke til kommentar
Martin A. Skrevet 14. august 2006 Del Skrevet 14. august 2006 (endret) session_destroy(); bruker man for å slette sessionen EDIT: Og unset() fungerer sikkert like bra. Endret 14. august 2006 av M4rTiN Lenke til kommentar
AlecTBM Skrevet 14. august 2006 Del Skrevet 14. august 2006 ja unset['navn på session']; Lenke til kommentar
Erik B. Skrevet 23. august 2006 Forfatter Del Skrevet 23. august 2006 (endret) 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 - OG HER ER SCRIPTET! - Problemet er altså at: Brukeren må logge inn to ganger før session oppdages. Takk for hjelp! Endret 23. august 2006 av erixz Lenke til kommentar
Martin A. Skrevet 24. august 2006 Del Skrevet 24. august 2006 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
Peter Skrevet 24. august 2006 Del Skrevet 24. august 2006 (endret) 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 24. august 2006 av Nazgul Lenke til kommentar
Martin A. Skrevet 24. august 2006 Del Skrevet 24. august 2006 (endret) 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 24. august 2006 av M4rTiN Lenke til kommentar
Erik B. Skrevet 24. august 2006 Forfatter Del Skrevet 24. august 2006 Finnes det en koden som gjør slik at vis submit knapp er trykket, så blir siden oppdatert to ganger eller noe? Lenke til kommentar
Peter Skrevet 24. august 2006 Del Skrevet 24. august 2006 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
Erik B. Skrevet 24. august 2006 Forfatter Del Skrevet 24. august 2006 Fordi jeg må refreshe siden etter at jeg har logget inn for at sessionen skal bli registrert hos netleseren. En automatisk oppdatering ved riktig innlogging ville løst problemet. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå