Upravit: Dobře, udělali jste překlep v polích formuláře. Stále mícháte rozhraní MySQL API, viz dále níže o funkci míchání pomocí mysql_real_escape_string()
.
Podívejte se na name="myusername"
a váš úkol POST spolu s heslem.
Neshodují se.
Změňte name="myusername"
na name="username"
a name="mypassword"
na name="password"
podle
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Po použití hlášení chyb , by signalizoval nedefinovaný index a záhlaví již odeslané varování; viz níže.
Před <?php
máte také mezery což by způsobilo výstup před hlavičkou. Odstraňte je.
Navíc mícháte MySQL API s mysql_error()
. mysql_error()
by se mělo číst jako mysqli_error($con)
a toto níže:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
který by měl znít jako
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
nebo
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
amysql_
funkce se spolu nesměšují.
Ohledně bezpečnosti
Všiml jsem si, že možná ukládáte hesla v prostém textu. Pokud je tomu tak, důrazně se nedoporučuje.
Doporučuji použít CRYPT_BLOWFISH
nebo PHP 5.5 password_hash()
funkce. Pro PHP <5.5 použijte password_hash() compatibility pack
.
Navíc, pokud jde o vkládání SQL, použijte mysqli
s připravenými výpisy
, nebo CHOP s připravenými výpisy
, jsou mnohem bezpečnější .
Poznámky pod čarou
Nejlepší je přidat exit;
za každou hlavičkou.
header("location:login_success.php");
exit;
a pro všechna záhlaví.
Upravit:
Odebrat
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
pak jej nahraďte:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Upravit č. 2 :
To je to, s čím jsem testoval váš kód a bylo to úspěšné, takže nevím, co je s vaším současným kódem špatně.
HTML FORMULÁŘ
<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";
}
Pozn.: Měli byste také vymazat své relace (zničit relace ), na serveru může být něco, co ukládá stará uživatelská jména a hesla do mezipaměti.
Také se ujistěte, že ve sloupcích nejsou žádné mezery, že typy jsou správné a délky jsou dostatečně dlouhé, aby se do nich vešla data. Obvykle VARCHAR(255)
je více než dostačující, ale doporučuje se při použití hašovaných hesel generovaných password_hash()
, funkci, kterou byste měli používat při ukládání hesel.
Viz také:
na zásobníku.