Редактиране: Добре, значи сте направили печатна грешка в полетата на формуляра. Все още смесвате MySQL API, вижте по-долу за функцията за смесване с помощта на mysql_real_escape_string()
.
Вижте name="myusername"
и заданието ви POST, заедно с това за вашата парола.
Не съвпадат.
Променете name="myusername"
до name="username"
и name="mypassword"
към name="password"
според
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
След като сте използвали отчитане на грешки , би сигнализирал за недефиниран индекс и заглавки, които вече са изпратени предупреждение; вижте по-долу.
Имате и интервали преди <?php
което би довело до изход преди заглавието. Премахнете ги.
Освен това смесвате MySQL API с mysql_error()
. mysql_error()
трябва да се чете като mysqli_error($con)
и това по-долу:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
което трябва да се чете като
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
или
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
иmysql_
функциите не се смесват.
Относно сигурността
Забелязах, че може да съхранявате пароли в обикновен текст. Ако случаят е такъв, това е силно обезкуражено.
Препоръчвам ви да използвате CRYPT_BLOWFISH
или password_hash()
на PHP 5.5
функция. За PHP <5.5 използвайте password_hash() compatibility pack
.
Освен това, по отношение на SQL инжектирането, използвайте mysqli
с изготвени констатациии
, или PDO с подготвени изявления
, те са много по-безопасни .
Бележки под линия
Най-добре е да добавите exit;
след всяко заглавие.
header("location:login_success.php");
exit;
и за всички заглавки.
Редактиране:
Премахване
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
след това го заменете с:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Редактиране #2 :
Това е, с което тествах кода ви и успях, затова не знам какво не е наред с настоящия ви код.
HTML ФОРМА
<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";
}
N.B.: Трябва също да изчистите сесиите си (унищожи сесиите ), може да има нещо на сървъра, което кешира стари потребителски имена и пароли.
Също така се уверете, че няма интервали във вашите колони, че типовете са правилни и дължините са достатъчно дълги, за да задържат данните. Обикновено VARCHAR(255)
е повече от достатъчно, но се препоръчва при използване на хеширани пароли, генерирани от password_hash()
, функция, която трябва да използвате, когато съхранявате пароли.
Вижте също:
на стека.