Foros del Web » Programando para Internet » PHP »

Problemas con mi web en php... y la base de datos en mySQL

Estas en el tema de Problemas con mi web en php... y la base de datos en mySQL en el foro de PHP en Foros del Web. A ver... estoy intentando crear una web con codigo php.. la cual estara "relacionada" con una base de datos.... en mysql.... La cosa es que ...
  #1 (permalink)  
Antiguo 26/04/2010, 11:43
 
Fecha de Ingreso: noviembre-2009
Mensajes: 4
Antigüedad: 14 años, 5 meses
Puntos: 0
Problemas con mi web en php... y la base de datos en mySQL

A ver... estoy intentando crear una web con codigo php.. la cual estara "relacionada" con una base de datos.... en mysql....

La cosa es que tengo pagina de registro y pagina de acceso... al ingresar los datos se me quedan guardados perfectamente en mi base de datos... pero cuando intento acceder con los datos.... el mensaje que me tendria que salir es "Usuario y contraseña correctos" y lo que me sale es " Debe verificar usuario y contraseña..." y le he dado muchisimas vueltas de como hacerlo... Aqui pongo el codigo de todo... para ver si asi se ve el error y m podeis ayudar :(

Index:

<?php
session_start();
?>
Inicia sesión aquí!!!.<br />
<?php
echo 'Bienvenido, ';
if (isset($_SESSION['k_username'])) {

echo '<b>'.$_SESSION['k_username'].'</b>.';
echo '<p><a href="logout.php">Logout</a></p>';
}else{
echo '<p><a href="login.php">Login</a></p>
<p><a href="registrar.php">Registrar</a></p>';
}
?>

Logout:

<?php
session_start();
// Borramos toda la sesion
session_destroy();
echo 'Has cerrado la session <p><a href="index.php">index</a></p>';
?>
<SCRIPT LANGUAGE="javascript">
location.href = "index.php";
</SCRIPT>

Login:

<form action="validar_usuario.php" method="post">
Usuario:<input type="text" name="usuario" size="20" maxlength="20" />
<br />
Password:<input type="password" name="password" size="10" maxlength="10" />
<br />
<input type="submit" value="Ingresar"/>
<input type="reset" value="Borrar"/>
</form>

Registrar:

<?php
session_start();
//datos para establecer la conexion con la base de mysql.
mysql_connect('localhost','usuario','password')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('users')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
function formRegistro(){
?>
<form action="registrar.php" method="post">
Usuario (max 20):
<input type="text" name="username" size="20" maxlength="20" /><br />
Password (max 10):
<input type="password" name="password" size="10" maxlength="10" />
Confirma: <input type="password" name="password2" size="10" maxlength="10" /><br />
Email (max 40):
<input type="text" name="email" size="20" maxlength="40" /><br />
<input type="submit" value="Registrar" />
</form>
<?php
}
// verificamos si se han enviado ya las variables necesarias.
if (isset($_POST["username"])) {
$username = $_POST["username"];
$password = $_POST["password"];
$password2 = $_POST["password2"];
$email = $_POST["email"];
// Hay campos en blanco
if($username==NULL|$password==NULL|$password2==NUL L|$email==NULL) {
echo "un campo está vacio.";
formRegistro();
}else{
// ¿Coinciden las contraseñas?
if($password!=$password2) {
echo "Las contraseñas no coinciden";
formRegistro();
}else{
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían
$checkuser = mysql_query("SELECT usuario FROM usuarios WHERE usuario='$username'");
$username_exist = mysql_num_rows($checkuser);
$checkemail = mysql_query("SELECT email FROM usuarios WHERE email='$email'");
$email_exist = mysql_num_rows($checkemail);
if ($email_exist>0|$username_exist>0) {
echo "El nombre de usuario o la cuenta de correo estan ya en uso";
formRegistro();
}else{
$query = 'INSERT INTO usuarios (usuario, password, email, fecha)
VALUES (\''.$username.'\',\''.$password.'\',\''.$email.'\ ',\''.date("Y-m-d").'\')';
mysql_query($query) or die(mysql_error());
echo 'El usuario '.$username.' ha sido registrado de manera satisfactoria.<br />';
echo 'Ahora puede entrar ingresando su usuario y su password <br />';
?>
<FORM ACTION="validar_usuario.php" METHOD="post">
Usuario : <INPUT TYPE="text" NAME="usuario" SIZE=20 MAXLENGTH=20><br />
Password: <INPUT TYPE="password" NAME="password" SIZE=10 MAXLENGTH=10><br />
<INPUT TYPE="submit" VALUE="Ingresar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>
<?php
}
}
}
}else{
formRegistro();
}
?>

Validar usuario:

<?php session_start();

//datos para establecer la conexion con la base de mysql.

mysql_connect('localhost','usuario','password')or die ('Ha fallado la conexión: '.mysql_error());

mysql_select_db('users')or die ('Error al seleccionar la Base de Datos: '.mysql_error());

function quitar($mensaje)


{
$nopermitidos = array("'",'\\','<','>',"\"");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}

if(trim($HTTP_POST_VARS["usuario"]) != "" && trim($HTTP_POST_VARS["password"]) != "")

{

// Puedes utilizar la funcion para eliminar algun caracter en especifico
//$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
//$password = $HTTP_POST_VARS["password"];
// o puedes convertir los a su entidad HTML aplicable con htmlentities

$usuario = strtolower(htmlentities($HTTP_POST_VARS["usuario"], ENT_QUOTES));
$password = $HTTP_POST_VARS["password"];
$result = mysql_query('SELECT password, usuario FROM usuarios WHERE usuario=\''.$usuario.'\'');
if($row = mysql_fetch_array($result)){
if($row["password"] == $password){

$_SESSION["k_username"] = $row['usuario'];
echo 'Has sido logueado correctamente '.$_SESSION['username'].' <p>';
echo '<a href="index.php">Index</a></p>';

//Elimina el siguiente comentario si quieres que re-dirigir automáticamente a index.php
/*Ingreso exitoso, ahora sera dirigido a la pagina principal.
<SCRIPT LANGUAGE="javascript">
location.href = "index.php";
</SCRIPT>*/


}else{
echo 'Password incorrecto';
}
}else{
echo 'Usuario no existente en la base de datos';
}
mysql_free_result($result);
}else{
echo 'Debe especificar un usuario y password';
}
mysql_close();
?>


Gracias de antemano... ^^!
  #2 (permalink)  
Antiguo 26/04/2010, 14:06
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 5 meses
Puntos: 16
Respuesta: Problemas con mi web en php... y la base de datos en mySQL

$result =mysql_query("SELECT password, usuario FROM usuarios WHERE usuario='$usuario'");

Prueba a cambiar eso
  #3 (permalink)  
Antiguo 26/04/2010, 14:25
Avatar de dyegox  
Fecha de Ingreso: enero-2008
Mensajes: 173
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Problemas con mi web en php... y la base de datos en mySQL

prueba sacando el if que verifica si los campo password y usuario no estan vacios si asi funciona el problema esta en ese if
Código PHP:
Ver original
  1. <?php session_start();
  2.  
  3. //datos para establecer la conexion con la base de mysql.
  4.  
  5. mysql_connect('localhost','usuario','password')or die ('Ha fallado la conexión: '.mysql_error());
  6.  
  7. mysql_select_db('users')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
  8.  
  9. function quitar($mensaje)
  10.  
  11.  
  12. {
  13. $nopermitidos = array("'",'\\','<','>',"\"");
  14. $mensaje = str_replace($nopermitidos, "", $mensaje);
  15. return $mensaje;
  16. }
  17.  
  18. // Puedes utilizar la funcion para eliminar algun caracter en especifico
  19. //$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
  20. //$password = $HTTP_POST_VARS["password"];
  21. // o puedes convertir los a su entidad HTML aplicable con htmlentities
  22.  
  23. $usuario = strtolower(htmlentities($HTTP_POST_VARS["usuario"], ENT_QUOTES));
  24. $password = $HTTP_POST_VARS["password"];
  25. $result = mysql_query('SELECT password, usuario FROM usuarios WHERE usuario=\''.$usuario.'\'');
  26. if($row = mysql_fetch_array($result)){
  27. if($row["password"] == $password){
  28.  
  29. $_SESSION["k_username"] = $row['usuario'];
  30. echo 'Has sido logueado correctamente '.$_SESSION['username'].' <p>';
  31. echo '<a href="index.php">Index</a></p>';
  32.  
  33. //Elimina el siguiente comentario si quieres que re-dirigir automáticamente a index.php
  34. /*Ingreso exitoso, ahora sera dirigido a la pagina principal.
  35. <SCRIPT LANGUAGE="javascript">
  36. location.href = "index.php";
  37. </SCRIPT>*/
  38.  
  39.  
  40. }else{
  41. echo 'Password incorrecto';
  42. }
  43. }else{
  44. echo 'Usuario no existente en la base de datos';
  45. }
  46. ?>
  #4 (permalink)  
Antiguo 27/04/2010, 03:45
 
Fecha de Ingreso: noviembre-2009
Mensajes: 4
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problemas con mi web en php... y la base de datos en mySQL

Muchas gracias por responder pero lo que decia Millan... lo probe y me sigue diciendo lo mismo.. y lo que dice dyegox... Lo hice y ahora el mensaje que me aparece cuando intento entrar con el usuario y la pass de cualquiera de los usuarios de la base de datos... que el usuario no se encuentra en esa base de datos... :S
  #5 (permalink)  
Antiguo 27/04/2010, 06:07
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 5 meses
Puntos: 16
Respuesta: Problemas con mi web en php... y la base de datos en mySQL

<?php session_start();

//datos para establecer la conexion con la base de mysql.

mysql_connect('localhost','usuario','password')or die ('Ha fallado la conexión: '.mysql_error());

mysql_select_db('users')or die ('Error al seleccionar la Base de Datos: '.mysql_error());

function quitar($mensaje)


{
$nopermitidos = array("'",'\\','<','>',"\"");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}

if(trim($HTTP_POST_VARS["usuario"]) != "" && trim($HTTP_POST_VARS["password"]) != "")

{

// Puedes utilizar la funcion para eliminar algun caracter en especifico
//$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));
//$password = $HTTP_POST_VARS["password"];
// o puedes convertir los a su entidad HTML aplicable con htmlentities

$usuario = strtolower(htmlentities($HTTP_POST_VARS["usuario"], ENT_QUOTES));
$password = $HTTP_POST_VARS["password"];
$result = mysql_query("SELECT password, usuario FROM usuarios WHERE usuario='$usuario' AND password='$password'");
$result1 = mysql_query("SELECT password, usuario FROM usuarios WHERE usuario='$usuario' AND password='$password'");
if($row = mysql_fetch_array($result)) {
$_SESSION["k_username"] = $row['usuario'];
echo 'Has sido logueado correctamente '.$_SESSION['username'].' <p>';
echo '<a href="index.php">Index</a></p>';
} elseif($row = mysql_fetch_array($result1))
{ echo "Falló al ingresar la contraseña"; }
else {
echo "No existe usuario en la base de datos"; }


//Elimina el siguiente comentario si quieres que re-dirigir automáticamente a index.php
/*Ingreso exitoso, ahora sera dirigido a la pagina principal.
<SCRIPT LANGUAGE="javascript">
location.href = "index.php";
</SCRIPT>*/

}else{
echo 'Debe especificar un usuario y password';
}
mysql_close();
?>
  #6 (permalink)  
Antiguo 28/04/2010, 03:52
 
Fecha de Ingreso: noviembre-2009
Mensajes: 4
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problemas con mi web en php... y la base de datos en mySQL

:( no funciona tampoco... es que no entiendo porque me sigue saliendo el mismo mensajito de "debe verificar un usuario y la password"... Es como si le diera al enviar sin introducir nada en los campos correspondientes a usuario y pass...!

La verdad que muchas gracias por responder ya que al menos asi voy probando cosas nuevas que en ninguna pagina he encontrado!!
  #7 (permalink)  
Antiguo 28/04/2010, 04:12
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problemas con mi web en php... y la base de datos en mySQL

Cita:
:( no funciona tampoco... es que no entiendo porque me sigue saliendo el mismo mensajito de "debe verificar un usuario y la password"... Es como si le diera al enviar sin introducir nada en los campos correspondientes a usuario y pass...!
¡Quizás sea eso! Quizás el formulario sea el problema y no la sentencia MySQL.

Lo primero que deberías hacer es cambiar la variable $HTTP_POST_VARS por $_POST. Ya que la primera versión es obsoleta y además será eliminada en futuras versiones de PHP, por tanto estas poniendo una fecha limite a este código.

Sustituye todas las variables $HTTP_XXX_VARS por $_XXX, como haces en la variable $_SESSION. Ejemplo:
Código PHP:

//Esta versión es vieja.
$usuario strtolower(htmlentities($HTTP_POST_VARS["usuario"], ENT_QUOTES));

//Sustituyela por. Quizás sea ese el problema.
$usuario strtolower(htmlentities($_POST["usuario"], ENT_QUOTES)); 
Segundo: Usa la función mysql_real_escape_string
Haz esto para evitar una inyección SQL. Sino sabes que es eso miralo en la wikipedia o en google.

Ejemplo:
Código PHP:
$password mysql_real_escape_string($_POST["password"]); 
En cuanto a tu problema: En la página de login después de session_start haz un print_r($_POST) y dinos que sale. Como he dicho al principio quizás sea un problema del formulario y no de la base de datos.
__________________
Revolucionario controlador de plantillas para php
www.simphple.com

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:49.