PHP - Problema alta usuario

 
Vista:

Problema alta usuario

Publicado por Quiroga (12 intervenciones) el 22/02/2010 18:23:37
Hola!!

Vuelvo a tener problemas...

A la hora de dar de alta a un usuario necesito 2 cosas. Primero que se compruebe si estan los 2 campos rellenos (usuario y password) y segundo comprobar que dicho usuario no existe ya en la BBDD.

Por ahora estoy en el primer paso y soy incapaz de hacer que avance... Pongo el codigo para que os sea mas facil entenderme:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Alta de nuevo usuario</title>
</head>

<body bgcolor="#000000">

<font color="#FFFFFF">
<table width="100%" height="100%">
<tr>
<td valign="middle">
<div align="center">
<form action="alta.php" method="post">
<h2>Fomulario de Alta de usuario.</h2><br /><br />
User: <input type="text" name="nom" value="" />
<br />
Pass: <input type="password" name="pass" value="" />
<br /><br />
<input type="submit" name="enviar" value="Aceptar" />
<input type="submit" name="volver" value="Volver" />
</form>
</div>
</td>
</tr>
</table>
</font>

<?php
if ($_REQUEST['enviar']=="Aceptar")
{
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Proyecto", $con);

$nmb = strlen($_REQUEST[nom]);
$psw = strlen($_REQUEST[pass]);

if ($nmb > 0)
{
if ($pass > 0)
{
mysql_query("INSERT INTO usuarios(Nombre, Password) VALUES ('$_REQUEST[nom]', '$_REQUEST[pass]')");

mysql_close($con);

echo "<script type='text/javascript'>";
echo "window.location='Index.php'";
echo "</script>";
}
else
{
Echo "<br><center><font color='white'>Debes rellenar la contraseña.</font></center>";
}
}
else
{
Echo "<br><center><font color='white'>Debes rellenar el usuario.</font></center>";
}
}

if ($_REQUEST['volver']=="Volver")
{
echo "<script type='text/javascript'>";
echo "window.location='Index.php'";
echo "</script>";
}
?>

</body>

</html>

Cuando entra en los IF, funciona bien si solo introduces el usuario y dejas el Password vacio o viceversa, mostrando el mensaje preciso en cada momento. En cambio, si dejas los 2 campos vacios o los rellenas aparece siempre el mensaje "Debes rellenar la contraseña.".

Por que me ocurre esto?? Que parte del IF tengo mal?? Siento ser tan torpe, porque seguro que el fallo es evidente...

Gracias a todos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema alta usuario

Publicado por Miguel Angel (2 intervenciones) el 22/02/2010 23:50:09
hola mira

1 declara tus campos como NOT NULL, y el de usuario UNIQUE, asi no habra forma de que se inserte si viene vacio por que siempre los va a pedir, en caso de que alguno valla vacio simplemente no lo ingresa

CREATE TABLE `aviessal`.`usuarios` (
`Nombre` VARCHAR( 20 ) NOT NULL ,
`Password` VARCHAR( 20 ) NOT NULL ,
UNIQUE (
`Nombre`
)
) ENGINE = MYISAM

2 yo no uso los parametros que usas, yo recibo los datos directamente con $_POST['nom'], en tu caso yo dejaria el codigo de esta manera y le agregariauna forma diferente de evaluar los datos y un "strrpos" para validar la direccion de donde provienen los datos

<?php

/*
esta funcion es para que valides de donde vienen los datos ya que eso puede ayudarte cuando te esten atacando

*/
function valDir($referer,$comparar){

if(strrpos($referer,$comparar))
//varifica un dato esta dentro del otro, COMPARACION DE CADENAs
return false;

else
return true;

}

if ($_REQUEST['enviar']=="Aceptar"){

if($func->valDir($_SERVER['HTTP_REFERER'],"localhost/index.php"))
die("<br><br><br><br><br><center>Error en la comunicacion de direcciones,
<br>Al parecer no provienes de localhost<br>por favor cheka eso o sino
comunicate con el administrador</center>");
else{
$con = mysql_connect("localhost","root","");
if (!$con){
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Proyecto", $con);

$nmb = $_POST['nom'];
$psw = $_POST'pass'];

if ($nmb!=""){
if ($psw!=""){
if(mysql_query("INSERT INTO usuarios VALUES ('$nmb', '$pas')"))
echo "si";
else
echo "no";
/*
esto fue para que veas si se ingreso o no, en dado caso de que el
query este mal o no lo halla ingresado pro que ya existe el nombre
*/

mysql_close($con);

echo "<script type='text/javascript'>";
echo "window.location='Index.php'";
echo "</script>";
}else
Echo "<br><center><font color='white'>Debes rellenar la contraseña.</font></center>";
}else
Echo "<br><center><font color='white'>Debes rellenar el usuario.</font></center>";
}//el k valida la direccion
}

if ($_REQUEST['volver']=="Volver"){
echo "<script type='text/javascript'>";
echo "window.location='Index.php'";
echo "</script>";
}

?>

</body>

</html>


Por favor checa los } haber si no se me fue uno de mas o de menos por acciendete, si puedo ayudarte en algo mas dime!! espero que te sirva!! Y vamos no te preocupes todos empezamos igual, no se te olvide que el dia que puedas visita el foro y deja tu respuesta cuando puedas!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema alta usuario

Publicado por Diego Romero (1450 intervenciones) el 23/02/2010 04:50:17
A lo ya dicho por Miguel Angel agrego que deberías pensar mejor la lógica de la validación que quieres hacer.

Yo lo haría de esta manera:

$nombre = @$_POST["nom"];
$password = @$_POST["pass"];
$nombre = trim($nombre);
$password = trim($password);
$error = false;

if (empty($nombre)) {
echo "Nombre no puede estar vacío<br>";
$error = true;
}
if (empty($password)) {
echo "Contraseña no puede estar vacía<br>";
$error = true;
}
if ($error) {
.. Hacer lo que tengas que hacer en caso de error ...
}

Y un consejo: no abras una conexión a la base de datos si no estás seguro que los datos que vas a insertar/verificar son válidos en sí mismos. Por ejemplo en este caso no tiene sentido conectar a la base de datos *antes* de verificar que el nombre y la contraseña estén vacíos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema alta usuario

Publicado por Miguel Angel (2 intervenciones) el 23/02/2010 16:28:55
Es correcto ese detalle deberias verlo ya que

debes pensar en como usar todos tus recursos de

forma que nunca te vallan a tronar!!

por ahi una vez vhice un switch-case

<?php
. . . $val=true;
. . . switch($dato-a-validar){

. . . . . . case empty:
. . . . . . case "":
. . . . . . case " ":
. . . . . . . . . $val=true;
. . . . . . . . . break;

. . . }

. . . if($val){

. . . . . . . . . ya continuas con lo que quieras

. . . }

?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema alta usuario

Publicado por Quiroga (12 intervenciones) el 02/03/2010 20:53:18
Muchisimas gracias a los 2 y siento haber tardado tanto en contestar. Se me estropeo el router y no me han enviado uno nuevo hasta hoy. He tenido que mirar vuestras respuestas a través del iPhone y para colmo desde donde estoy ahora no me llega la cobertura 3G, asi que como para ponerme a escribir agradecimientos jaja

Vuelvo a repetir: MUCHISIMAS GRACIAS! Me funciona todo perfecto.

Necesito que me sigais ayudando si no es abusar demasiado... aunque creo que será mejor que habra un nuevo hilo ya que esta duda, aunque sea del mismo proyecto, no tiene nada que ver con el alta de usuario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar