Gå til innhold

Anbefalte innlegg

Hei!

Jeg brukte kvelden i går på å lage et enkelt php innloggingsystem.

Jeg lurer på om det går bra å blande PHP og HTML.

 

se eksempelet:

 

<?php
require('access.php');
?>
[HER KOMMER HTML KODEN]

 

Dere kan selv se hvordan resultatet ble (har ikke fått lagt til riktig HTML kode i det heletatt, men det virker ser det ut til..)

Passordet til websiden er;

hello

Bendiksverden.net

 

Takk for all hjelp

Endret av BeatThatZ
Lenke til kommentar
Videoannonse
Annonse

Man kan også bruke shorthand som feks:

<?

$title="Den store vevsiden";

?>

<html>

<head>

<title><?=$title?></title>

</head>

<body>

Her er to måter med Echo, du kan også bruke Print :) <br />

Forskjellen på de to nedenfor, er at med double quotes, må du escape med backslash om du har doublequotes i html. Du kan også parse variablene.

<?php

echo '<a href="#">'.$title.'</a><br />';

echo "<a href=\"#\">{$title}</a>";

?>

</body>

</html>

Lenke til kommentar

Har et par forslag.

1. Bytte til Crypt med Salt (en sjekksum er ikke en kryptering, selv om linkedin og andre har trodd det)

2. På logout, redirecte til hovedsiden? (enten via header location eller en meta refresh og noe HTML som sier at man blir videresendt innen 5 sekunder).

 

Her er kode for å redirecte i headeren

Ps. husk at som sesjonsvariabel, må dette gjøres før du "parser" noe.

Så lite som et mellomrom er nok for å hindre dette i å virke.

 

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://...."]
header("Connection: close");

 

Tanken er at logout fører til indekssiden.

Det samme kan du gjøre ved feil passord, fremfor å bruke DIE(), kan du kjøre de hjem til login.

For å ta med deg feilkoder, kan du velge å ha en sesjonsvariabel som heter for eksempel ERRCODE.

Permission denied i HTML er jo 505, så d kan jo stjele den :p Og så parse ut på hovedsiden "Wrong password" om du finner 505 i den sesjonsvariabelen. Men husk å unset() den når du får success på login ;)

Lenke til kommentar
  • 2 uker senere...

Hmmm, må du ha det innfelt i PHP kode? Bruker strengt tatt bare ".htaccess" og ".htpasswd". Plaser dei to filene i samme katalog som den du vil ha adgangssperre på.

.htaccess

AuthName "Realm name"
AuthType Basic
AuthUserFile /"webfolder"/.htpasswd
require valid-user

.htpasswd

user1:kryptert passord
user2:kryptert passord
user3:kryptert passord

 

for å få kryptert passord er det eit lite php skript for å få det fram:

<?php
// Password to be encrypted for a .htpasswd file
$clearTextPassword = 'some password';
// Encrypt password
$password = crypt($clearTextPassword, base64_encode($clearTextPassword));
// Print encrypted password
echo $password;
?>

 

 

Ellers finnest det generatorer for det på nett.

 

*sub/under kataloger vil også få adgangsperre om du var redd for det.

Endret av dolten
Lenke til kommentar

1. Hvordan kan jeg gjøre så den printer "Wrong password!" i rødt, fet skrift?

Skal du ha det ut på en web side så bruker css:

color: red; font-weight: bold;

Dette legger du enten i en style tag på en div eller span, eller i en class i en css fil, eks

// html
<div style="color: red; font-weight: bold;">Wrong password!</div>
<span style="color: red; font-weight: bold;">Wrong password!</span>
<div class="password">Wrong password!</div>

// css
.password {
 color: red;
 font-weight: bold;
}

 

2. Er det mulig å ha flere passord, eksempel "hello" og "byebye"?

Ja, kommer an på hva slags innlogging system man vil ha/lager. Det mest normale er vel å ha en bruker med tilhørende passord, som er lagret i filer eller en database. Men man kan ha noe statisk ala

if ($_POST['pwd']=='hello' or $_POST['pwd']=='byebye') { // alernativt: if (in_array($_POST['pwd'],array('hello','byebye'))) {
 // passord ok
}
else
 echo '<div style="color: red; font-weight: bold;">Wrong password!</div>';

men er neppe en god løsning.

Lenke til kommentar

Det finnes en haug av slike guider ett lite google søk unna.

 

Hvis målet ditt er å løse en ting, så kan det være mer fruktbart å se om du finner ett ferdig system som dekker behovet ditt. Hvorfor finne opp hjulet på nytt?

Hvis du skal lære, så er det bedre om du begynner selv, og når du står fast så spør du her.

Lenke til kommentar

En cookie er neppe en god ide, den er det jo bare å slette. Du må nok lagre ip og evt andre ting som gjør at du unikt identifiserer brukeren, sammen med ett tidspunkt. Så må du sjekke mot dette tidspunktet når brukeren prøver å logge inn (igjen).

 

Vil du bruke cookie, så ta en titt på set_cookie(). Hentes igjen med $_COOKIE['xxx'] hvor xxx er verdien i første parameteret i set_cookie().

Lenke til kommentar
  • 2 uker senere...

Vet noen hvordan/om jeg kan gjøre slik at den logger alle innloggingsforsøk? (med IP, om det var vellykket, og når, eventuell tilleggsinformasjon er ok) Da kan jeg stenge ute totalt via .htaccess

 

Anbefaler at du forsøker å lese litt på dette. For eks w3schools.com har mye bra stoff.

 

Har lagd en liten jalla eksempel kode på det du spurte om, ikke bare copy, paste men forsøk å forstå hva jeg har gjort i koden.

 

<?php
// Koble til DB
require_once("db.php");

// Legg til IP i logg tabell i databasen
$ip = $_SERVER['REMOTE_ADDR'];
$query = "INSERT INTO `log` (`ip`, `tidspunkt`, `handling`)VALUES('$ip', NOW(), 1); // La oss si at handling = 1 vil si at brukeren har forsøkt å logge inn
$sql = mysql_query($query);
if (!$sql) {
echo('En SQL feil oppstod'); die;
}
// Sjekk om bruker har utført samme handling de 3 siste gangene.
$query = "SELECT `ip` FROM `logs` WHERE `ip`='$ip' AND `handling`=1 ORDER BY `tidspunkt` DESC";
$sql = mysql_query($query);
if (!$sql) {
echo('En SQL feil oppstod'); die;
}
$tell = mysql_num_rows($sql);
if ($tell > 2)
{
echo('Denne personen med denne IP adressen har forsøkt å logge inn 3 ganger'); die;
}
?>

 

PS. Jeg har skrevet koden i notepad uten å teste den, så mulig det er noen små feil.

 

Forresten, for at eksempelet over skal fungere må du lage en db.php fil som inneholder database informasjonen din. Du trenger også en tabell i databasen din som heter "logs" og inneholder 3 kolonner (ip, tidspunkt og handling) disse må være av type (varchar, datetime, integer).

Endret av Spenzer
Lenke til kommentar

som tidligere skrevet, så lagre informasjon om brukeren som skal logge seg inn i en database.

 

Anbefaler deg 2 tabeller - En brukertabell og en innloggingstabell.

 

Når noen skal logge seg inn må de oppgi et brukernavn og et passord.

Når brukeren klikker "logg inn", oppretter du en ny rad i innloggingstabellen med diverse info som brukerens id, hvis brukernavn stemte over ens, samt ip-adresse og annen relevant info. Samtidig setter du et nytt tidspunkt i en timestamp kolonne.

Hvis innloggingen feilet har du en kolonne som du gjør +1 på ved hvert forsøk. Hvis denne telleren når til eksempel 3, så sperrer du denne profilen/kontoen.

Du kan sette en timestamp-timeout i bruker tabellen slik at, uansett uavhengig av ip eller whatever, så kan ikke akkurat denne brukeren logge seg inn før denne timeouten utløper pga profilen har fått en timeout i ditt system.

evt. kan du i dette tilfellet også sperre kontoen til brukeren og sende en mail til brukerens registrerte epost med info om hendelsen samt overlevere data om personen som forsøkte å logge seg inn.

I mailen kan du også tildele en link som lar akkurat denne brukeren åpne/aktivere profilen sin igjen...

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...