Gå til innhold

Problemer med innlogging og sesjoner


Anbefalte innlegg

Har pr. nå disse kodene. Problemet er at når jeg prøver å logge inn står det at brukernavnet ikke finnes, noe det HELT KLART gjør.

 

index.php

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="stilsett.php" />
<meta charset="utf-8">
<title>Forside // Prosjekt - PHP</title>
</head>
<body>

<?php
include_once "funksjoner.inc.php";

echo "<div id='header'>";

$db = kobleTil();

ob_start();
session_start();

$a = $_GET['a'];

// 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  	= mysqli_query(kobleTil(), $mysql_sporring);

if (mysqli_affected_rows(kobleTil()) == 0) {  echo "Brukernavnet du oppgav finnes ikke!"; }
else {
$row = mysqli_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: oppdrag.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>";
echo "<a href='index.php?a=loggut'>Logg ut</a>";

}


	
echo "</div>";
?> 

</body>
</html>

funksjoner.inc.php

<?php
echo "<link rel='stylesheet' type='text/css' href='stilsett.php'>";

function navigasjon(){

echo "<div class='navi'><ul><li><a href='index.php'>Forside</a></li><li><a href='oppdrag.php'>Oppdrag</a></li><li><a href='lioppdrag.php'>Legg inn nytt oppdrag</a></li></ul></div>";	

}

function kobleTil() {
	
$vert = "localhost";
$databasenavn = "prosjektphp";
$bruker = "prosjektphp";
$passord = "";
$db = new mysqli($vert, $bruker, $passord, $databasenavn);
return $db;
}

?>
Lenke til kommentar
Videoannonse
Annonse
  • 4 uker senere...

Har noen kommentarer til koden din, ved å se kjapt over den:

  1. Hvorfor lager du en funksjon som echo'er ut?
    1. Funksjonen ville jeg laget så den returnerer en verdi
    2. Det har ikke så mye for seg å lage en funksjon for en statisk html-streng, da kan du like gjerne bruke require_once() og lage en fil som heter for eksempel: _meny.inc.php
  2. Du har en sjekk: $mysql_sporring = "SELECT * FROM brukere WHERE brukernavn='$post_brukernavn'";
    1. ​Her har du ingen passordsjekk i selecten, men du velger å sjekke om lengden på passordet i databasen er 32 tegn og hvis den er det, setter du passordet inn i en variabel. Dette sammenligner du da med passordet tastet inn. Hvorfor gjør du dette slik?
    2. Du bør ikke bruke md5 på passord, md5 er ikke kryptering men en hash. Se på CRYPT() med unikt salt.
  3. ​Der du har kritiske komponenter som functions-filen, bør du vurdere bruk av require eller require_once()
    1. ​Eksempel: include_once "funksjoner.inc.php"; endrer du da til: require_once("funksjoner.inc.php");
  4. ​Fremfor måten du gjør dette på: // Spør databasen om brukernavnet finnes, hadde jeg kjørt en spørring med en count(*) where brukernavn..., da vil du alltid få ut et svar hvor svaret er antall. Da sjekker du bare den mot: (if .. == 0) {//brukernavn er ledig }. Alternativt kan du også selecte ut en case (booleansk verdi).
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...