Gå til innhold

PHP - Brukersystem med innlogging!


Anbefalte innlegg

Videoannonse
Annonse

Skal du bare ha noe basic uten skikkelig sikkerhet, er det letteste å benytte MySQL som database hvor brukernavnene og passordene er lagret, og at du bruker php-sessions for å validere brukerne på php-sidene dine.

 

edit: enda enklere: lagre brukernavnene og passordene i et php-skript

Endret av v3g4rd
Lenke til kommentar

mySQL:

CREATE TABLE `brukere` (
`id` INT( 6 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`brukernavn` VARCHAR( 50 ) NOT NULL ,
`passord` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM ;

 

PHP:

<?php
ob_start();
session_start();

$a = $_GET['a'];

// Variabler for mySQL
$mysql_host	= "localhost";
$mysql_user	= "brukernavn";
$mysql_pass	= "passord";
$mysql_db   = "databasenavn";

// Kobler til databasen
$link = mysql_connect ($mysql_host, $mysql_user, $mysql_pass) or die("Feil x01");
if(!mysql_select_db ($mysql_db)) { die("Feil x02"); }

// Script for utlogging ( link til: filnavn.php?a=loggut )
if($a == "loggut") {
if(session_destroy()) {
echo("Vellykket utlogging");
} else {
echo("En feil oppstod!");
}
}

// Script for innlogging
elseif(!empty($_POST['submit'])) {

// Beskyttelse
$post_brukernavn	= htmlspecialchars(strip_tags($_POST['brukernavn']));
$post_passord    = htmlspecialchars(strip_tags($_POST['passord']));

// Sjekker om det er fylt inn noe i tekstfeltene
if(empty($post_brukernavn)) {  $error_msg	= "<p>- Brukernavn</p>"; }
if(empty($post_passord)) {      $error_msg	.= "<p>- Passord</p>"; }
if(!empty($error_msg)) { echo("Du må fylle ut alle felt! Felt som ikke er fylt ut: <p>$error_msg</p>"); }
else {

// Spør databasen om brukernavnet finnes
$mysql_sporring = "SELECT * FROM brukere where brukernavn='$post_brukernavn'";
$resultat  	= mysql_query($mysql_sporring);

if (mysql_affected_rows() == 0) {  echo "Brukernavnet du oppgav finnes ikke!"; }
else {
$row = mysql_fetch_array($resultat);

// Sjekker passordet og omgjør til md5 om passordet i databasen er 32 tegn.
$bruker_passord = $row['passord'];
if(strlen($bruker_passord) == 32) { $post_passord = md5($post_passord); }

if($bruker_passord !== $post_passord) { echo("Passordet for brukeren \"<i>$post_brukernavn</i>\" er feil!"); }
else {

// Setter innlogget session og sender brukeren til "sikker side"
$_SESSION['brukernavn'] = $post_brukernavn;
header('Location: innlogget.php');

}
}
}
}

// Skriver ut innloggings felt
else {

echo "<form action=\"\" method=\"post\"><table>
<tr><td>Brukernavn:</td><td><input type=\"text\" name=\"brukernavn\" size=\"20\" /></td></tr>
<tr><td>Passord:</td><td><input type=\"password\" name=\"passord\" size=\"20\" /></td></tr>
<tr><td></td><td><input type=\"submit\" name=\"submit\" value=\"Logg inn\" /></td></tr>
</table></form>";

}
?>

 

De sikre sidene bør legges opp slik:

<?php
session_start();
if(!empty($_SESSION['brukernavn'])) {
?>


Hemmelig HTML kode kun for innlogget.. (kan også legges til php her da..)


<?php } ?>

 

Ikke testet men tror det skal fungere.

Om du vil ha ekstra sikkerhet setter du inn md5 kryptert passord i databasen.

 

Håper du fikk noe ut av dette Anders ;)

Endret av goggen90
Lenke til kommentar

<?php
ob_start();
session_start();

// Variabler for mySQL
$mysql_host = "localhost";
$mysql_user = "brukernavn";
$mysql_pass = "passord";
$mysql_db   = "databasenavn";

// Kobler til databasen
$link = mysql_connect ($mysql_host, $mysql_user, $mysql_pass) or die("Feil x01");
if(!mysql_select_db ($mysql_db)) { die("Feil x02"); }

// Sjekker om brukeren allerede er innlogget
if(empty($_SESSION['brukernavn'])) {

// Script for registrering
if(!empty($_POST['submit'])) {

// Beskyttelse
$post_brukernavn = htmlspecialchars(strip_tags($_POST['brukernavn']));
$post_passord    = htmlspecialchars(strip_tags($_POST['passord']));

// Sjekker om det er fylt inn noe i tekstfeltene
if(empty($post_brukernavn)) {  $error_msg = "<p>- Brukernavn</p>"; }
if(empty($post_passord)) {     $error_msg .= "<p>- Passord</p>"; }
if(!empty($error_msg)) { echo("Du må fylle ut alle felt! Felt som ikke er fylt ut: <p>$error_msg</p>"); }
else {

$post_passord = md5($post_passord);

// Legger til brukeren i databasen
$mysql_sporring = "insert into brukere set brukernavn='$post_brukernavn', passord='$post_passord'";
$resultat       = mysql_query($mysql_sporring);

// Sjekker resultatet
if($resultat) {
echo("Din bruker ble opprettet, du kan nå logge inn!");
} else {
echo("Feil x03");
}
}
}

// Skriver ut registrerings felt
else {

echo "<form action=\"\" method=\"post\"><table>
<tr><td>Brukernavn:</td><td><input type=\"text\" name=\"brukernavn\" size=\"20\" /></td></tr>
<tr><td>Passord:</td><td><input type=\"password\" name=\"passord\" size=\"20\" /></td></tr>
<tr><td></td><td><input type=\"submit\" name=\"submit\" value=\"Registrer\" /></td></tr>
</table></form>";

}

} else { echo "Du er allerede innlogget!"; }

?>

 

Om du studerer begge scriptene lærer du hvordan du henter ut ting fra databasen og hvordan du setter inn.

Endret av goggen90
Lenke til kommentar

Klikk for å se/fjerne innholdet nedenfor
<?php
ob_start();
session_start();

// Variabler for mySQL
$mysql_host = "localhost";
$mysql_user = "brukernavn";
$mysql_pass = "passord";
$mysql_db   = "databasenavn";

// Kobler til databasen
$link = mysql_connect ($mysql_host, $mysql_user, $mysql_pass) or die("Feil x01");
if(!mysql_select_db ($mysql_db)) { die("Feil x02"); }

// Sjekker om brukeren allerede er innlogget
if(empty($_SESSION['brukernavn'])) {

// Script for registrering
if(!empty($_POST['submit'])) {

// Beskyttelse
$post_brukernavn = htmlspecialchars(strip_tags($_POST['brukernavn']));
$post_passord    = htmlspecialchars(strip_tags($_POST['passord']));

// Sjekker om det er fylt inn noe i tekstfeltene
if(empty($post_brukernavn)) {  $error_msg = "<p>- Brukernavn</p>"; }
if(empty($post_passord)) {     $error_msg .= "<p>- Passord</p>"; }
if(!empty($error_msg)) { echo("Du må fylle ut alle felt! Felt som ikke er fylt ut: <p>$error_msg</p>"); }
else {

$post_brukernavn = md5($post_brukernavn);

// Legger til brukeren i databasen
$mysql_sporring = "insert into brukere set brukernavn='$post_brukernavn', passord='$post_passord'";
$resultat       = mysql_query($mysql_sporring);

// Sjekker resultatet
if($resultat) {
echo("Din bruker ble opprettet, du kan nå logge inn!");
} else {
echo("Feil x03");
}
}
}

// Skriver ut registrerings felt
else {

echo "<form action=\"\" method=\"post\"><table>
<tr><td>Brukernavn:</td><td><input type=\"text\" name=\"brukernavn\" size=\"20\" /></td></tr>
<tr><td>Passord:</td><td><input type=\"password\" name=\"passord\" size=\"20\" /></td></tr>
<tr><td></td><td><input type=\"submit\" name=\"submit\" value=\"Registrer\" /></td></tr>
</table></form>";

}

} else { echo "Du er allerede innlogget!"; }

?>

 

Om du studerer begge scriptene lærer du hvordan du henter ut ting fra databasen og hvordan du setter inn.

9504364[/snapback]

 

Nå har ikke jeg deltatt i det emnet eller noe fra før, men Goggen: Dette var kjempe flott at du brukte tid på for å både lære og hjelpe en u-erfaren person i PHP. :p

 

Poeng til deg!! :)

Endret av Zeph
Lenke til kommentar

Dette så kjempebra ut, og godt kommentert!!

 

Dum som jeg er så lurer jeg på hva som skjer om jeg registrerer to brukere med samme brukernavn? Burde vi ikke sjekke om det allerede finner en bruker med dette navnet?

 

Lurer litt på denne:

form action=\"\"

Er det en gyldig action? trodde man måtte ha et filnavn der jeg.

Endret av rwd-drifter
Lenke til kommentar
Lurer litt på denne:

form action=\"\"

Er det en gyldig action? trodde man måtte ha et filnavn der jeg.

9575940[/snapback]

Så lenge du ikke skriver noe der, referer den til den gjeldende siden i stedet. Har ikke møtt på noen browsere til nå som ikke er kompatibel med den måten å gjøre det på..

Lenke til kommentar
Hvorfor bruke md5() på brukernavnet, Goggen? Trodde det var vanlig å kryptere passordet, ikke brukernavnet.

Rett og slett bare en feil fra min side, rettet opp nå :)

 

Dette så kjempebra ut, og godt kommentert!!

 

Dum som jeg er så lurer jeg på hva som skjer om jeg registrerer to brukere med samme brukernavn? Burde vi ikke sjekke om det allerede finner en bruker med dette navnet?

Takk :)

 

Burde sjekkes om det finnes fra før ja, siden om man registrerer en bruker med samme navn vil det bli den nyeste som blir sjekket (uten justeringer)..

 

Nå har ikke jeg deltatt i det emnet eller noe fra før, men Goggen: Dette var kjempe flott at du brukte tid på for å både lære og hjelpe en u-erfaren person i PHP. :p

 

Poeng til deg!! :)

Fint at folk setter pris på det :)

Endret av Goggen90
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å
×
×
  • Opprett ny...