Redigera: Ok, så du har gjort ett stavfel i formulärfälten. Du blandar fortfarande MySQL API:er, se längre ner nedan om mixningsfunktionen med mysql_real_escape_string()
.
Titta på name="myusername"
och din POST-uppgift, tillsammans med den för ditt lösenord.
De matchar inte.
Ändra name="myusername"
till name="username"
och name="mypassword"
till name="password"
enligt
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Efter att ha använt felrapportering , skulle ha signalerat ett odefinierat index och en rubrik som redan skickats varning; se nedan.
Du har även mellanslag före <?php
vilket skulle orsaka en utdata före header. Ta bort dem.
Dessutom blandar du MySQL API:er med mysql_error()
. mysql_error()
bör läsas som mysqli_error($con)
och detta nedan:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
som ska läsas som
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
eller
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
ochmysql_
funktioner blandas inte ihop.
Angående säkerhet
Jag märkte att du kanske lagrar lösenord i vanlig text. Om så är fallet är det starkt avskräckt.
Jag rekommenderar att du använder CRYPT_BLOWFISH
eller PHP 5.5:s password_hash()
fungera. För PHP <5.5 använd password_hash() compatibility pack
.
Plus, när det gäller SQL-injektion, använd mysqli
med förberedda utlåtanden
, eller PDO med förberedda uttalanden
, de är mycket säkrare .
Fotnoter
Det är bäst att lägga till exit;
efter varje rubrik.
header("location:login_success.php");
exit;
och för alla rubriker.
Redigera:
Ta bort
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
ersätt den sedan med:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Redigera #2 :
Det här är vad jag testade din kod med och fick framgång, därför vet jag inte vad som är fel med din nuvarande kod.
HTML-FORMEL
<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="text" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>
MySQL
<?php
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($conn,$_POST['username']);
$mypassword = mysqli_real_escape_string($conn,$_POST['password']);
echo $myusername; // echos
echo "<br>";
echo $mypassword; // echos
$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($conn,$sql);
$count=mysqli_num_rows($result);
if($count==1){
echo "Yep";
}
else{
echo "nope";
}
Obs: Du bör också rensa bort dina sessioner (förstöra sessioner ), kan det finnas något på servern som cachar gamla användarnamn och lösenord.
Se också till att det inte finns några mellanslag i dina kolumner, att typerna är korrekta och att längderna är tillräckligt långa för att hålla data. Vanligtvis VARCHAR(255)
är mer än tillräckligt, men föreslås när man använder hashade lösenord genererade av password_hash()
, en funktion som du bör använda när du lagrar lösenord.
Se även:
på Stack.