Editar: Ok, então você cometeu um erro de digitação nos campos do formulário. Você ainda está misturando as APIs do MySQL, veja mais abaixo sobre a função de mixagem usando
mysql_real_escape_string()
. name="myusername"
e sua atribuição POST, juntamente com a sua senha. Eles não combinam.
Alterar
name="myusername"
para name="username"
e
name="mypassword"
para name="password"
conforme
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Tendo usado relatório de erros , teria sinalizado um índice indefinido e um aviso de cabeçalhos já enviado; Veja abaixo.
Você também tem espaços antes de
<?php
o que causaria uma saída antes do cabeçalho. Remova eles. Além disso, você está misturando APIs MySQL com
mysql_error()
. mysql_error()
deve ler como mysqli_error($con)
e este abaixo:$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
que deve ler como
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
ou
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
emysql_
funções não se misturam.
Em relação à segurança
Percebi que você pode estar armazenando senhas em texto simples. Se este for o caso, é altamente desencorajado.
Eu recomendo que você use CRYPT_BLOWFISH ou
password_hash()
do PHP 5.5
função. Para PHP <5.5, use o password_hash() compatibility pack
. Além disso, em relação à injeção de SQL, use
mysqli
com declarações preparadas
, ou PDO com declarações preparadas
, são muito mais seguros . Notas de rodapé
É melhor adicionar
exit;
após cada cabeçalho. header("location:login_success.php");
exit;
e para todos os cabeçalhos.
Editar:
Remover
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
depois substitua por:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Editar nº 2 :
Foi com isso que testei seu código e obtive sucesso, portanto, não sei o que há de errado com seu código atual.
FORMULÁRIO 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.: Você também deve limpar suas sessões (destruir sessões ), pode haver algo no servidor armazenando em cache antigos nomes de usuário e senhas.
Verifique também se não há espaços em suas colunas, se os tipos estão corretos e se os comprimentos são longos o suficiente para conter os dados. Normalmente
VARCHAR(255)
é mais que suficiente, mas é sugerido ao usar senhas com hash geradas por password_hash()
, uma função que você deve usar ao armazenar senhas. Veja também:
na pilha.