Editar: Ok, cometiste un error tipográfico en los campos del formulario. Todavía está mezclando las API de MySQL, vea más abajo sobre la función de mezcla usando mysql_real_escape_string()
.
Mira name="myusername"
y su asignación POST, junto con la de su contraseña.
No coinciden.
Cambiar name="myusername"
a name="username"
y name="mypassword"
a name="password"
según
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Habiendo usado informe de errores , habría señalado un índice indefinido y una advertencia de encabezados ya enviados; ver más abajo.
También tienes espacios antes de <?php
lo que causaría una salida antes del encabezado. Eliminarlos.
Además, está mezclando las API de MySQL con mysql_error()
. mysql_error()
debería leerse como mysqli_error($con)
y esto a continuación:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
que debería leerse como
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
o
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
ymysql_
las funciones no se entremezclan.
En cuanto a la seguridad
Me di cuenta de que puede estar almacenando contraseñas en texto sin formato. Si este es el caso, se desaconseja encarecidamente.
Te recomiendo que uses CRYPT_BLOWFISH
o password_hash()
de PHP 5.5
función. Para PHP <5.5 use el password_hash() compatibility pack
.
Además, con respecto a la inyección SQL, use mysqli
con declaraciones preparadas
, o PDO con declaraciones preparadas
, son mucho más seguros .
Notas al pie
Lo mejor es agregar exit;
después de cada encabezado.
header("location:login_success.php");
exit;
y para todos los encabezados.
Editar:
Quitar
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
luego reemplácelo con:
$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 #2 :
Esto es con lo que probé su código y obtuve éxito, por lo tanto, no sé qué está mal con su código actual.
FORMULARIO 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.: También debe borrar sus sesiones (destruir sesiones ), podría haber algo en el servidor que almacene en caché nombres de usuario y contraseñas antiguos.
También asegúrese de que no haya espacios en sus columnas, que los tipos sean correctos y que las longitudes sean lo suficientemente largas para contener los datos. Normalmente VARCHAR(255)
es más que suficiente, pero se sugiere cuando se usan contraseñas hash generadas por password_hash()
, una función que debería utilizar al almacenar contraseñas.
Véase también:
en la pila.