Permalänk

Inloggnings php

Hej!
Jag håller på att skapa en sida med inloggning.
Jag har kommit så här långt:
login.php

<?php include "connect_to_mysql.php"; if (isset($_POST['submit'])) { $username = $_POST['username']; $password = $_POST['password']; $password = preg_replace("[^A-Za-z0-9]", "", $_POST['password']); $sql = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"; $res = mysql_query($sql); // If login information is correct if (mysql_num_rows($res) == 1) { $_SESSION['username'] = $username; $_SESSION['id'] = $userid; header("Location: index.php"); exit(); } else { echo "Fel användarnamn och/ eller lösernord."; exit(); } } ?> <!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>Admin inloggning</title> </head> <body> <h1>Inloggning</h1> <form method="post" action="login.php"> Användarnam: <input type="text" name="username" /><br /><br /> Lösenord: <input type="password" name="password" /><br /><br /> <input type="submit" name="submit" value="Logga in" /> </form> </body> </html>

och
top.php

<?php session_start(); if (!isset($_SESSION['id'])) { $userid = $_SESSION['id']; $username = $_SESSION['username']; } else { header("Location: login.php"); } ?>

När jag fyller i rätt inloggnings uppgifter så kommer jag bara tillbaka till inloggnings sidan.
Vad är det för fel?

Hälsningar/
David Söderberg

Permalänk
Medlem

Får du några felmeddelanden?
Skriver den ut "Fel användarnamn och/ eller lösenord"??
Har du gjort en echo på $sql för att se exakt vad som förfrågas från databasen?
Finns dessa uppgifter i databasen?

Permalänk

Tack echo $sql löste det.

Permalänk
Inaktiv

Två saker som du missat och är väldigt viktiga i säkerhets syn:

  1. Du har ett ohashat lösenord, får någon tag på din databas har dom alla inloggnings uppgifter. Kör en hash('sha256', $password); på den innan du kör in den i databasen.

  2. Du har även glömt att escapa strängarna du kör in i databasen, detta gör att användare kan utföra frågor mot din databas i tex. användarnamns fältet. Kör mysql_real_escape_string(); på alla strängar innan du har dom i en databas fråga. Om du hashar lösenordet behövs det inte på lösenorden.

Permalänk

Ok men nu funkar det helt plötsligt inte igen.
Har inte gjort dina ändringar havsmonstret.

vad kan det vara för något mer???

Permalänk
Medlem

Du måste ge oss lite bättre beskrivning om vad som händer än att "Nu funkar det inte igen" om vi ska kunna hjälpa dig.

Felmeddelanden?
Har du gjort några ändringar?

Permalänk

Det är samma som innan och denna förändringen:
If satsen utan utropstecken.

Permalänk
Medlem
Skrivet av granskog1:

Det är samma som innan och denna förändringen:
If satsen utan utropstecken.

Testa att ändra till

if (mysql_num_rows($res) == 1) { session_start(); // detta är tillagt $_SESSION['username'] = $username; $_SESSION['id'] = $userid; header("Location: index.php"); exit(); }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Ändra

$res = mysql_query($sql);

till

$res = mysql_query($sql) or die(mysql_error());

Se om du får något felmeddelande på det.

Permalänk

Nej inget av det funkade.

Permalänk
Medlem
Skrivet av granskog1:

Nej inget av det funkade.

Använder du top.php nånstans?

edit: och dessutom, var kommer $userid ifrån?

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Jag testade att göra echo $sql; och då fick jag ett felmeddelande om:
$_SESSION['id'] = $userid; vet ej varför????

Permalänk

jag inkludera den i varje för att få session att starta och kolla om de är inloggade.

Permalänk
Medlem
Skrivet av granskog1:

jag inkludera den i varje för att få session att starta och kolla om de är inloggade.

Du har inget som heter $userid men du försöker lägga in dess värde i $_SESSION.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Ok har ändrat login.php till:

<?php
include "connect_to_mysql.php";
if (isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password = preg_replace("[^A-Za-z0-9]", "", $_POST['password']);
$sql = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());
// If login information is correct
if (mysql_num_rows($res) == 1) {
while ($row = mysql_fetch_assoc($sql)){
$userid = $row['id'];
}
session_start();
$_SESSION['username'] = $username;
$_SESSION['id'] = $userid;
echo $sql;
//header("Location: index.php");
exit();
}
else {
echo'
Fel användarnamn och/ eller lösernord.
<br />
<a href="login.php">Försök igen</a>' ;
exit();
}
}

?>

Permalänk

såg mitt misstag jag gjorde koden ovan den nya är:

include "connect_to_mysql.php"; if (isset($_POST['submit'])) { $username = $_POST['username']; $password = $_POST['password']; $password = preg_replace("[^A-Za-z0-9]", "", $_POST['password']); $sql = mysql_query ("SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"); $res = mysql_query($sql) or die(mysql_error()); // If login information is correct if (mysql_num_rows($res) == 1) { while ($row = mysql_fetch_array($sql)){ $userid = $row['id']; } session_start(); $_SESSION['username'] = $username; $_SESSION['id'] = $userid; echo $sql; //header("Location: index.php"); exit(); } else { echo' Fel användarnamn och/ eller lösernord. <br /> <a href="login.php">Försök igen</a>' ; exit(); } }

Permalänk
Medlem

while ($row = mysql_fetch_array($sql)){ $userid = $row['id']; }

Varför? Försök förstå varje rad "du" har skrivit istället för kaotiskt kasta ihop något och sen posta så fort det inte fungerar.

Permalänk

Jag gjorde det fram till att det började krångla första gången sen så när jag försökte laga det så skrev jag fel.
Nu får jag detta felmeddelandet:
Warning: mysql_fetch_array() expects parameter 1 to be resource, string given för den här raden:
while ($row = mysql_fetch_array($sql)){
och Undefined variable: userid för:
$_SESSION['id'] = $userid;

Permalänk

Löste det nu när jag satte mig och gick igenom vad felen var tack för hjälpen.

Permalänk
Medlem
Skrivet av granskog1:

Löste det nu när jag satte mig och gick igenom vad felen var tack för hjälpen.

Berätta gärna vad du hade för fel så att andra kan ta del

Visa signatur

▩ Monitor: ASUS Swift 27" @ 1440p/165Hz ▩ CPU: Ryzen 7700X ▩ Cooling: Corsair H170i ELITE 420mm ▩ GPU: MSI 3080 Ti SUPRIM X ▩ Memory: Corsair 32GB DDR5 Vengeance ▩ Motherboard: ASUS Crosshair X670E Hero ▩ M.2: Samsung 980 Pro ▩ PSU: Corsair HX1200 ▩ Chassi: Corsair 7000X ▩ Geekbench 6: 2903 ▩ Time Spy: 19 340

📷 Mina fotografier
👍 SweClike - Synligare färg på dina likes

Permalänk

Kommer inte riktigt vad det var men koden ser ut så här nu:
login.php

<?php include "connect_to_mysql.php"; if (isset($_POST['submit'])) { $username = $_POST['username']; $password = $_POST['password']; $password = preg_replace("[^A-Za-z0-9]", "", $_POST['password']); $password = md5($password); $sql = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"; $res = mysql_query($sql) or die (mysql_error()); $userid = ""; if (mysql_num_rows($res) == 1) { session_start(); $_SESSION['username'] = $username; $_SESSION['id'] = $userid; header("Location: index.php"); exit(); } else { echo' Fel användarnamn och/ eller lösernord. <br /> <a href="login.php">Försök igen</a>' ; exit(); } } ?> <!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>Admin inloggning</title> <link href="css.css" rel="stylesheet" type="text/css" /> </head> <body> <?php include "headermenu.php";?> <br /><h1>Inloggning</h1><br /> <form method="post" action="login.php"> Användarnam: <input type="text" name="username" /><br /><br /> Lösenord: <input type="password" name="password" /><br /><br /> <input type="submit" name="submit" value="Logga in" /> </form> </body> </html>

och

top.php

<?php session_start(); if (!isset($_SESSION['id'])) { header("Location: login.php"); } else { $userid = $_SESSION['id']; $username = $_SESSION['username']; } ?>

Hälsningar/
David Söderberg

Permalänk
Medlem

Du sätter $userid till ingenting och låter bli att använda resultatet.

Visa signatur

Kom-pa-TI-bilitet