Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2023-07-18, 15:20
  #1
Avstängd
Jag behöver hjälp att göra ett registreringsformulär för en sida och ett loginformulär för index.php; Jag har försökt göra en MySQL query på korrekt sätt. Detta funkar inte. Någon som kan hjälpa mig?

Kod:
$username = "SELECT username FROM users ?";
$password = "SELECT password FROM users ?";

if ($_GET['username'] != $username || $_GET['password'] != $password)
{}
Citera
2023-07-18, 15:24
  #2
Avstängd
Sen undrar jag även hur man bannar. Jag vet att man skriver i IP-adress i htaccess. Använder mig av hittaip.se, men den bannar inte rätt person!!
Citera
2023-07-18, 16:07
  #3
Medlem
JohannesSnajdares avatar
Citat:
Ursprungligen postat av maan88
Jag behöver hjälp att göra ett registreringsformulär för en sida och ett loginformulär för index.php; Jag har försökt göra en MySQL query på korrekt sätt. Detta funkar inte. Någon som kan hjälpa mig?

Kod:
$username = "SELECT username FROM users ?";
$password = "SELECT password FROM users ?";

if ($_GET['username'] != $username || $_GET['password'] != $password)
{}

Finns ju hur mycket tutorials som helst om det här, här är en ur högen:
https://code.tutsplus.com/create-a-p...rm--cms-33261t
Citera
2023-07-18, 16:27
  #4
Medlem
webbutvecklarens avatar
Citat:
Ursprungligen postat av maan88
Jag behöver hjälp att göra ett registreringsformulär för en sida och ett loginformulär för index.php; Jag har försökt göra en MySQL query på korrekt sätt. Detta funkar inte. Någon som kan hjälpa mig?

Kod:
$username = "SELECT username FROM users ?";
$password = "SELECT password FROM users ?";

if ($_GET['username'] != $username || $_GET['password'] != $password)
{}
Well, ej konstigt att det inte fungerar då du inte har gjort det på rätt sätt.

Så här ska du göra.

Kod:
// Använd aldrig _GET när du behandlar känsliga uppgifter som lösenord och annan inloggningsuppgifter, andvänd _POST
$username = isset($_POST['username']) && !empty($_POST['username']) ? $_POST['username'] : null;
$password = isset($_POST['password']) && !empty($_POST['password']) ? $_POST['password'] : null;

if($username && password){
// Du måste dock sanitera både $username och $password innan du använder de i queryn, annars kan någon hacka och ta ut information om alla dina användare, eller t.o.m. radera hela din datababas.
$result = mysql_query("SELECT username, password FROM users WHERE username = '{$username}' AND password = '{$password}' LIMIT 1");

	if($result){
	echo 'Found a record';
	}
	else{
	echo 'Login failed';
	echo mysql_error(); // Denna ska enbart du kunna se, så använd den inte på den publika servern.
	}

}
else{
echo "Username and/or password cannot be empty.";
}

Glöm ej heller av att aldrig ha lösenorden i ren text, utan använd phps "password_hash" för att få en mycket bra och säker hashning av lösenorden, ifall du skulle bli hackad, så blir det ändå svårt för de att unhasha lösenorden från din databas.

Angående ip-ban, så är det lättast att använda en egen tabell över bannade ip-adresser, där du bara skriver in vilka ip:n som är bannade, sen varje gång någon vill registrera sig eller logga in så tar du och kollar om den användarens ip är bannad. Samtidigt kan ju flera personer registrera sig under samma ip adress om man delar bostad, så det bästa vore nog att bara banna ett konto som bryter din platforms regler än att banna en ip-adress.

Gå igenom bl.a. den länken JohannesSnajdare gav, och sök även "PHP mysql tutorials" så får du fram mycket användbar information.
__________________
Senast redigerad av webbutvecklaren 2023-07-18 kl. 16:32.
Citera
2023-07-18, 18:10
  #5
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av maan88
Sen undrar jag även hur man bannar. Jag vet att man skriver i IP-adress i htaccess. Använder mig av hittaip.se, men den bannar inte rätt person!!
Prova Fail2ban?
https://github.com/fail2ban/fail2ban
Citera
2023-07-18, 18:38
  #6
Medlem
Som webbutvecklaren skriver skall du aldrig lagra lösenord i klartext. Som minst skall de hashas med någon säker hash-algoritm, men helst skall de kombineras med något salt för att sedan hashas. Och det är denna hash du lagrar.

Ett salt är i detta sammanhang en textsnutt som du slumpar fram för att kombinera det med ett lösenord. Idealiskt skulle varje användare ha en egen, framslumpad, salt. Den kan utan problem lagras i databasen, som en egen punkt för varje användare.


När en användare försöker logga in sker då följande:

1- användaren fyller i formuläret och klickar på knappen "Logga in".
2- dina PHP-skript tar hand om innehållet i formuläret, och kontrollerar att båda (alla?) fält är ifyllda.
3- om något fält saknas skickas användaren tillbaka till inloggningsformuläret, med passande felmeddelande
4- dina PHP-skript kollar om angiven användare finns i databasen. Om den inte finns skickas användaren tillbaka till inloggningsformuläret, med något passande felmeddelande
5- PHP-skripten plockar fram salt och lösenordshash för den angivna användaren
6- i databasen befintligt salt kombineras på rätt sätt med i formuläret angivet lösenord, varpå resultatet hashas och jämförs med i databasen angiven lösenordshash
7- om de båda hasharna stämmer överens är användaren inloggad, och kan skickas till vilken sida det nu gäller. Sannolikt vill du lagra användarens cookie i en databas över inloggade användare, så att användaren slipper logga in titt som tätt, utan du kan enkelt kolla i databasen om datorn med den cookien har loggat in eller inte.
8- annars har användaren angett fel användarID och/eller lösenord, och skickas till inloggningsformuläret med passande felmeddelande
Citera
2023-07-18, 19:47
  #7
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av xpqr12345
7- om de båda hasharna stämmer överens är användaren inloggad, och kan skickas till vilken sida det nu gäller. Sannolikt vill du lagra användarens cookie i en databas över inloggade användare, så att användaren slipper logga in titt som tätt, utan du kan enkelt kolla i databasen om datorn med den cookien har loggat in eller inte.
Tillägg:
Punkt 7 kan enklast göras genom en session-variabel. Eftersom denna enbart finns på serversidan så kan den vara så explicit som ($_SESSION['loggedIn'] == True)
Citera
2023-07-18, 20:11
  #8
Moderator
Protons avatar
Har du kollat klistertrådarna i forumet, till exempel (FB) Ska du sätta ihop en SQL dynamiskt, SE HIT!! som är relevant att kika på här?
Citera
2023-07-18, 22:21
  #9
Medlem
WebDevs avatar
Citat:
Ursprungligen postat av webbutvecklaren
Well, ej konstigt att det inte fungerar då du inte har gjort det på rätt sätt.

Så här ska du göra.

Kod:
// Använd aldrig _GET när du behandlar känsliga uppgifter som lösenord och annan inloggningsuppgifter, andvänd _POST
$username = isset($_POST['username']) && !empty($_POST['username']) ? $_POST['username'] : null;
$password = isset($_POST['password']) && !empty($_POST['password']) ? $_POST['password'] : null;

if($username && password){
// Du måste dock sanitera både $username och $password innan du använder de i queryn, annars kan någon hacka och ta ut information om alla dina användare, eller t.o.m. radera hela din datababas.
$result = mysql_query("SELECT username, password FROM users WHERE username = '{$username}' AND password = '{$password}' LIMIT 1");

	if($result){
	echo 'Found a record';
	}
	else{
	echo 'Login failed';
	echo mysql_error(); // Denna ska enbart du kunna se, så använd den inte på den publika servern.
	}

}
else{
echo "Username and/or password cannot be empty.";
}

Glöm ej heller av att aldrig ha lösenorden i ren text, utan använd phps "password_hash" för att få en mycket bra och säker hashning av lösenorden, ifall du skulle bli hackad, så blir det ändå svårt för de att unhasha lösenorden från din databas.

Angående ip-ban, så är det lättast att använda en egen tabell över bannade ip-adresser, där du bara skriver in vilka ip:n som är bannade, sen varje gång någon vill registrera sig eller logga in så tar du och kollar om den användarens ip är bannad. Samtidigt kan ju flera personer registrera sig under samma ip adress om man delar bostad, så det bästa vore nog att bara banna ett konto som bryter din platforms regler än att banna en ip-adress.

Gå igenom bl.a. den länken JohannesSnajdare gav, och sök även "PHP mysql tutorials" så får du fram mycket användbar information.
Man bör väl dock använda prepared statements / parameterized queries och inte lägga variabeln i querysträngen. Sen bör man väl använda mysqli framför mysql, men inte helt 100 då det var längesen jag nötte PHP. Jag körde PDO dock.
Citera
2023-07-19, 00:19
  #10
Medlem
Citat:
Ursprungligen postat av WebDev
Man bör väl dock använda prepared statements / parameterized queries och inte lägga variabeln i querysträngen. Sen bör man väl använda mysqli framför mysql, men inte helt 100 då det var längesen jag nötte PHP. Jag körde PDO dock.
Mysql(extension) gick ur tiden samtidigt med PHP 5, IIRC, så ja, definitivt. Prepared statements är mysqli eller PDO. Och självklart så ska man frikoppla indata från SQL-frågan så mycket det bara går i det här fallet.
Citera
2023-07-19, 12:21
  #11
Medlem
webbutvecklarens avatar
Citat:
Ursprungligen postat av WebDev
Man bör väl dock använda prepared statements / parameterized queries och inte lägga variabeln i querysträngen. Sen bör man väl använda mysqli framför mysql, men inte helt 100 då det var längesen jag nötte PHP. Jag körde PDO dock.
Yes, det bör man. Hade dock inte tiden att se till att prepered statement query var korrekt, och likaså med mysqli, etc, och sen förklara vad allt gör, utan försökte mest ge en vägledning som TS sen kunde läsa sig till.
Citera
2023-07-19, 15:06
  #12
Avstängd
Mina formulär ser inte bra ut. Vad gör jag för fel?

Kod:
<form id="formly" method="GET" action="register.php" />
		<input type="text" name="username" />
		<input type="password" name="password" />
		<input type="password" name="password2">
		<input type="email" name="email" />
		<input type="date" min="2005-01-01" hidden>
		<input type="submit" value="Registrera Konto!">
		</form>
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback