Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

problema con registro

Estas en el tema de problema con registro en el foro de Mysql en Foros del Web. Hola: Soy muy nueva en el lenguaje php, no entiendo demasiado. Mi problema es que he creado un formulario html. Cuando lo rellenas, envía los ...
  #1 (permalink)  
Antiguo 23/10/2011, 07:19
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años, 1 mes
Puntos: 2
problema con registro

Hola:

Soy muy nueva en el lenguaje php, no entiendo demasiado. Mi problema es que he creado un formulario html. Cuando lo rellenas, envía los datos a la base de datos, lo que te lleva a otra página php que te dice si el registro se ha realizado, y te puedes loguear o si hay campos vacíos. Pues bien, no entiendo por qué, pero relleno todos los datos y me da el echo de que hay algún campo vacío. La conexión con la base de datos es efectiva, es decir, no hay ningún problema con ella. ¿Qué puede ser? ayudadme, por favor, aquí va el código:


<?php
$conexion=include("conexion.php");
function formRegistro(){
?>

<?php


}
// verificamos si se han enviado ya las variables necesarias.
{
$usuario = $_POST["usuario"];
$contraseña = $_POST["contraseña"];
$repcontraseña = $_POST["repcontraseña"];
$email = $_POST["email"];
$nombre = $_POST["nombre"];
$nombreamo = $_POST["nombreamo"];
$raza = $_POST["raza"];
$telefono = $_POST["telefono"];
$edad = $_POST["edad"];
$sexo = $_POST["sexo"];
$provincia = $_POST["provincia"];
// Hay campos en blanco

if($usuario=="" || $contraseña=="" || $repcontraseña=="" || $email=="" || $nombre=="" || $nombreamo=="" || $raza=="" || $telefono=="" || $edad=="" || $sexo=="" || $provincia=="") {
echo "un campo está vacio.";
formRegistro();
}else{
// ¿Coinciden las contraseñas?
if($contraseña!=$repcontraseña) {
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='$usuario'");
$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{

$consulta= "INSERT INTO usuarios (usuario, contraseña, ciudad, email, nombreamo, telefono, provincia) VALUES ('$usuario','$contraseña','$ciudad','$email','$nom breamo','$raza','$telefono','$edad','$sexo','$prov incia')";

"INSERT INTO animal (nombre, raza, edad, sexo, pedigri) VALUES ('$nombre','$raza','$edad','$sexo','$pedigri')";

"INSERT INTO fotos (foto) VALUES ('$foto')";


$resultado=mysql_query($consulta,$conexion);
echo 'El usuario '.$usuario.' ha sido registrado de manera satisfactoria.<br />';
echo 'Ahora puede entrar ingresando su usuario y su password<br />';
?>
//Un formulario de login, que aparecera despues de el registro fue exitoso

<FORM ACTION="comprobar.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">
</FORM>
<?php
}
}
}
}
?>

Última edición por cheterporras2; 23/10/2011 a las 08:48
  #2 (permalink)  
Antiguo 23/10/2011, 15:22
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: problema con registro

Código PHP:
Ver original
  1. $consulta=
  2. "INSERT INTO usuarios
  3. (usuario, contraseña, ciudad, email, nombreamo, telefono, provincia) VALUES
  4. ('$usuario','$contraseña','$ciudad','$email','$nom breamo','$raza','$telefono','$edad','$sexo','$prov incia'
  5. )";

Cuidado ahí, tienes más datos que campos definidos. Nombre Amo y provincia están separados, cuando las variables no .

Otro dato, te convendría hacer las validaciones por javascript, así le sacas carga al servidor.
  #3 (permalink)  
Antiguo 24/10/2011, 06:17
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: problema con registro

Muchas gracias apañao!!! (como decimos en mi tierra):
Ya me di cuenta de lo de los parámetros de más, entre insertar sentencias, rectificar, etc., no me di cuenta.
Respecto de lo las sílabas separadas, habrá sido un problema al pegar el código, lo tengo correctamente escrito. No tengas encuenta eso, puesto que no es un error real.
Por último, yo tengo el formulario en html y el código de registro en php, ¿cómo debo hacer las validaciones? Te lo pregunto porque eliminé esa parte del código porque me estaba dando problemas aunque me gustaría volver a incluirlo, correctamente formulado.
He revisado el código y junto con algunas modificaciones, quedaría así, el problema es que me conecta perfectamente a la tabla "usuarios" e ingresa los datos registrados, no así con las tablas relacionadas, "animal" y "foto" ("animal" es la tabla hija), no sé por qué es ni en qué debo modificarlo. Muchas, muchas gracias.El código es:

<?php
include("conexion.php");
function formRegistro(){
?>
<?php

}
// verificamos si se han enviado ya las variables necesarias.
{
$usuario = $_POST["usuario"];
$contrasenna = $_POST["contrasenna"];
$repcontrasenna = $_POST["repcontrasenna"];
$email = $_POST["email"];
$nombre = $_POST["nombre"];
$nombreamo = $_POST["nombreamo"];
$raza = $_POST["raza"];
$telefono = $_POST["telefono"];
$edad = $_POST["edad"];
$sexo = $_POST["sexo"];
$provincia = $_POST["provincia"];
$link=Conectarse();
// Hay campos en blanco

if($usuario=="" || $contrasenna=="" || $repcontrasenna=="" || $email=="" || $nombre=="" || $nombreamo=="" || $raza=="" || $telefono=="" || $edad=="" || $sexo=="" || $provincia=="") {
echo "un campo está vacio.";
formRegistro();
}else{
// ¿Coinciden las contraseñas?
if($contrasenna!=$repcontrasenna) {
echo "Las contraseñas no coinciden";
formRegistro();
}else{


mysql_query("INSERT INTO usuarios (usuario, contrasenna, ciudad, email, nombreamo, telefono, provincia) VALUES ('$usuario','$contrasenna','$ciudad','$email','$no mbreamo','$telefono','$provincia')",$link);

mysql_query("INSERT INTO animal (nombre, raza, edad, sexo, pedigri) VALUES ('$nombre','$raza','$edad','$sexo','$pedigri')",$l ink);

mysql_query("INSERT INTO fotos (foto) VALUES ('$foto')",$link);


echo 'El usuario '.$usuario.' ha sido registrado de manera satisfactoria.<br />';
echo 'Ahora puede entrar ingresando su usuario y su password<br />';


?>
//Un formulario de login, que aparecera despues de el registro fue exitoso

<FORM ACTION="comprobar.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">
</FORM>
<?php

}
}
}

?>

Última edición por cheterporras2; 24/10/2011 a las 06:23
  #4 (permalink)  
Antiguo 25/10/2011, 21:31
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: problema con registro

Decis que a la tabla fotos y la tabla animal no te ingresa datos?

Cómo las tenes definidas?

Podes decirme los atributos que cada tabla?, quizás hay un problema en la definición de la base de datos o algo.
  #5 (permalink)  
Antiguo 26/10/2011, 07:00
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: problema con registro

Puede ser que estén mal, la verdad es que no encuentro ninguna otra explicación. Aquí va la tabla de "usuarios":

Campo Tipo Nulo Atributos Extra
idusuario int(8) No UNSIGNED auto_increment
nombreamo varchar(35) No
telefono int(15) No
email varchar(40) No
usuario varchar(30) No
contrasenna varchar(20) No
ciudad varchar(20) Sí
provincia varchar(20) Sí


Índices: Nombre de la clave Tipo Cardinalidad Campo
PRIMARY PRIMARY 24 idusuario



Ésta es la tabla "animal":

Campo Tipo ATRIBUTOS Nulo Extra
idusuario int(8) UNSIGNED No auto_increment
nombre varchar(20) No
raza varchar(20) No
edad int(3) No
sexo enum('hembra', 'macho') No
capa varchar(20) Sí
pedigri enum('si', 'no') Sí


Índices: Nombre de la clave Tipo Cardinalidad Campo
PRIMARY PRIMARY 1 nombre
idusuario INDEX 1 idusuario


Relaciones de este index:

Enlaces a
InnoDB
idusuario -- animal->nombre animal->idusuario fotos->idusuario fotos->animal usuarios->idusuario ON DELETE -- CASCADE SET NULL NO ACTION RESTRICT ON UPDATE -- CASCADE SET NULL NO ACTION RESTRICT
nombre -- animal->nombre animal->idusuario fotos->idusuario fotos->animal usuarios->idusuario ON DELETE -- CASCADE SET NULL NO ACTION RESTRICT ON UPDATE -- CASCADE SET NULL NO ACTION RESTRICT


Tabla "fotos":

Campo Tipo Atributos Nulo
idusuario int(8) UNSIGNED No
foto blob BINARY Sí
animal varchar(20) No


Índices: Nombre de la clave Tipo Cardinalidad Campo
PRIMARY PRIMARY 1 idusuario
animal INDEX 1 animal


Relaciones de este index:

Enlaces a
InnoDB
idusuario -- animal->nombre animal->idusuario fotos->idusuario fotos->animal usuarios->idusuario ON DELETE -- CASCADE SET NULL NO ACTION RESTRICT ON UPDATE -- CASCADE SET NULL NO ACTION RESTRICT
foto
animal -- animal->nombre animal->idusuario fotos->idusuario fotos->animal usuarios->idusuario ON DELETE -- CASCADE SET NULL NO ACTION RESTRICT ON UPDATE -- CASCADE SET NULL NO ACTION RESTRICT


Espero que éste por aquí el fallo, muchísimas gracias, y gracias por contestar "latin lover", eres un primor.
  #6 (permalink)  
Antiguo 26/10/2011, 07:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema con registro

Estás violando la integridad referencial.
Las FK no se propagan automáticamente. Las tienes que poner tu mismo.

1) El campo IDUSUARIO en "animal" y "foto" es FK, por lo que no puede ser AUTO_INCREMENT, porque debe contener el valor del ID que corresponda a la tabla "usuarios".
2) Ese campo es NOT NULL, por lo que no puedes omitirlo en el INSERT. Para poner el dato debes recuperar con la función mysql_insert_id() el ID generado en el INSERT de "Usuarios" y ponerlo en el registro de "Animal" y "Foto".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 26/10/2011, 14:16
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: problema con registro

¡¡¡ Sois unos máquinas!!! Muchas gracias a los dos. Gracias a vuestros sabios consejos (aunque me costó entenderlo... :P ) He conseguido solucionar lo del INSERT, el problema estaba en la tabla, cambié las claves foráneas y las claves primarias a otras que no se autoincrementaran y listo. Eso sí, tenía que hacerlo sin tener ningún registro incluido (cosa que no sabía y puede que a algún novato como yo, le haya pasado lo mismo).

Una última pregunta y ya os dejo tranquilos: Quisiera hacer un SELECT de tal forma que cuando la persona ingrese sus datos, si ya existe el usuario o el email, no le deje ingresar y tenga que rellenar los datos poniendo otros diferentes. Tanto el campo "usuario" como el campo "email" se encuentran en la tabla "usuarios". He intentado varias cosas y no me funciona del todo, sólo va bien la parte de usuario. Muchas gracias. Éste es el código:

{
$usuario = trim($_POST['usuario']);
$contrasenna = $_POST['contrasenna'];
$email = $_POST['email'];

$sql_chk = mysql_query("SELECT usuario, email FROM usuarios WHERE usuario='$usuario' AND email='$email'",$link) or die(mysql_error());
if(mysql_num_rows($sql_chk)==0){

} else {

print "<script>window.location.href='registro.html'; </script>";

}
  #8 (permalink)  
Antiguo 26/10/2011, 16:40
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: problema con registro

El problema es de esa consulta es esta:

Suponete que tenes esta tabla
ID usuario email
3 pepe [email protected]

Imaginate que yo voy y pongo que mi usuario es latinpower y mi mail es [email protected]. Si vos haces el select, donde usuario igual a 'latinpower' Y mail igual a '[email protected]', la consulta no te va a arrojar nada, cuando en realidad ya existe el mail.

Pasa lo mismo con el usuario.

El select quedaría así
Código MySQL:
Ver original
  1. SELECT usuario, email FROM usuarios WHERE usuario='$usuario' OR email='$email' ;

Saludos.
  #9 (permalink)  
Antiguo 27/10/2011, 09:22
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: problema con registro

Te estaré eternamente agradecida!!!. He solucionado rápidamente el problema, me empeciné con el "AND" y no veía más allá... No sé que habría sido de mí sin tu ayuda, mil gracias, va perfecto. :)

Etiquetas: consultas+mysql, php, registros, sql
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 09:40.