ponas91 Skrevet 23. november 2016 Del Skrevet 23. november 2016 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
ponas91 Skrevet 23. november 2016 Forfatter Del Skrevet 23. november 2016 (endret) La inn en variabel $db = kobletil(); og brukte den i stedet, noe som funka. Et steg videre verdensherredømme, men det kan fortsatt være feil i koden. Endret 23. november 2016 av ponas91 Lenke til kommentar
Olavxxx Skrevet 19. desember 2016 Del Skrevet 19. desember 2016 Har noen kommentarer til koden din, ved å se kjapt over den: Hvorfor lager du en funksjon som echo'er ut? Funksjonen ville jeg laget så den returnerer en verdi 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 Du har en sjekk: $mysql_sporring = "SELECT * FROM brukere WHERE brukernavn='$post_brukernavn'"; 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? Du bør ikke bruke md5 på passord, md5 er ikke kryptering men en hash. Se på CRYPT() med unikt salt. Der du har kritiske komponenter som functions-filen, bør du vurdere bruk av require eller require_once() Eksempel: include_once "funksjoner.inc.php"; endrer du da til: require_once("funksjoner.inc.php"); 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
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å