Edytuj: Ok, więc popełniłeś literówkę w polach formularza. Nadal mieszasz interfejsy API MySQL, zobacz poniżej o funkcji miksowania przy użyciu mysql_real_escape_string()
.
Spójrz na name="myusername"
i Twoje zadanie POST, wraz z hasłem.
Nie pasują.
Zmień name="myusername"
do name="username"
i name="mypassword"
do name="password"
zgodnie z
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Korzystając z raportowania błędów , zasygnalizowałby niezdefiniowany indeks i nagłówki już wysłane ostrzeżenie; patrz poniżej.
Masz również spacje przed <?php
co spowodowałoby wyjście przed nagłówkiem. Usuń je.
Dodatkowo mieszasz interfejsy API MySQL z mysql_error()
. mysql_error()
powinien brzmieć jako mysqli_error($con)
a to poniżej:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
który powinien brzmieć jako
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
lub
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
imysql_
funkcje nie mieszają się ze sobą.
Odnośnie bezpieczeństwa
Zauważyłem, że możesz przechowywać hasła w postaci zwykłego tekstu. Jeśli tak jest, jest to wysoce odradzane.
Zalecam użycie CRYPT_BLOWFISH
lub PHP 5.5 password_hash()
funkcjonować. Dla PHP <5.5 użyj password_hash() compatibility pack
.
Dodatkowo, w odniesieniu do wstrzykiwania SQL, użyj mysqli
z przygotowanymi zestawieniami
lub PDO z przygotowanymi oświadczeniami
, są znacznie bezpieczniejsze .
Przypisy
Najlepiej dodać exit;
po każdym nagłówku.
header("location:login_success.php");
exit;
i dla wszystkich nagłówków.
Edytuj:
Usuń
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
następnie zamień go na:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Edytuj #2 :
Z tym testowałem Twój kod i odniosłem sukces, dlatego nie wiem, co jest nie tak z Twoim obecnym kodem.
FORMULARZ 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";
}
Uwaga: Powinieneś także wyczyścić swoje sesje (zniszcz sesje ), na serwerze może być coś, co przechowuje stare nazwy użytkowników i hasła.
Upewnij się również, że w Twoich kolumnach nie ma spacji, czy typy są poprawne, a długości są wystarczająco długie, aby pomieścić dane. Zwykle VARCHAR(255)
jest więcej niż wystarczające, ale jest sugerowane przy używaniu haszowanych haseł generowanych przez password_hash()
, funkcja, której powinieneś używać podczas przechowywania haseł.
Zobacz też:
na stosie.