Foros del Web » Programando para Internet » PHP »

Alta de usuarios en una BD

Estas en el tema de Alta de usuarios en una BD en el foro de PHP en Foros del Web. Hola, tengo un script en el cual los usuarios se pueden dar de alta, y es el siguiente: Código PHP: <?php if (isset( $_POST [ 'usuario' ...
  #1 (permalink)  
Antiguo 21/01/2009, 18:08
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Pregunta Alta de usuarios en una BD

Hola, tengo un script en el cual los usuarios se pueden dar de alta, y es el siguiente:
Código PHP:
<?php
if (isset($_POST['usuario']) and ($_POST['password']) and ($_POST['nombre']) and ($_POST['apellidos']) and ($_POST['apodo']))
{
if ( empty(
$_POST['usuario']) || empty($_POST['password'])
|| empty (
$_POST['nombre']) || empty($_POST['apellidos']) || empty($_POST['apodo']) )
{
echo 
"Error, debe de llenar todos los campos";
}
else
{    
$con=pg_connect("host='127.0.0.1' port='5432' user='postgres' password='***' dbname='Curso'");
if (!
$con)
{
echo 
"Error al conectarse a la base de datos vuelva a intentarlo mas tarde";
}
else
{
$usuario=$_POST['usuario'];
$pass=$_POST['password'];
$nombre=$_POST['nombre'];
$apellido=$_POST['apellidos'];
$nickname=$_POST['apodo'];
$sql="INSERT INTO comparacion (usuario, contrasena) VALUES '$usuario', '$pass')";
$query=pg_query($sql);
$sql1="INSERT INTO id (usuario, nombres, apellidos, nickname) VALUES ('$usuario', '$nombre', '$apellido', '$nickname')";
$query1=pg_query($sql1);
$comp="SELECT usuario FROM comparacion";
$query2=pg_query($comp);
/*31->*/If(pg_num_rows($comp)==1)
{
$row=pg_fetch_array($comp);//aqui comparo si ya existe el usuario en la BD
$usuario["$usuario"]=$row[0];
$usuario["$usuario"]=$row[1];
echo 
"Error, El alumno ya esta dado de alta.";
exit;
}
else
{
if (@
pg_query($sql))
{
if (@
pg_query($sql1))
{
echo 
"Alumno dado de alta con exito.";
exit;
}
}
else
{
echo 
"Error al dar de alta al alumno, intentelo mas tarde.";
exit;
}
}
}
}
}
?>
Y pues me manda el mensaje de 'error'
Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\shinusuario.php on line 31
Error al dar de alta al alumno, intentelo mas tarde.

Pero si me da de alta al alumno con todos sus datos bien, a que se debera??
Tambien si hay campos en blanco solo me dirige a una pagina en blanco, no me muestra el error de los datos y si ya existe el usuario en vez de mostrar el error de que ya existe me manda al de intentarlo mas tarde.
De antemano gracias y espero me puedan ayudar.

Última edición por kurokishi; 21/01/2009 a las 18:20 Razón: Mas iformacion
  #2 (permalink)  
Antiguo 21/01/2009, 19:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Alta de usuarios en una BD

If(pg_num_rows($comp)==1)

No debe ser $comp, sino $query2
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 22/01/2009, 12:44
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Pues hice los ajustes que me dices triby, sin embargo me sigue mandando errores como el que el la llve primaria de la cuenta se repite y por eso no se puede (eso ya me lo esperaba y por eso puse que apareciera la leyenda de que 'ya existe el usuario'), sin embargo me sigue mandando el error de que hubo un error al intentar dar de alta al usuario.
Y de igual forma si dejo un campo en blaco no me manda el mensaje de que se deben llenar todos los campos, sino que me manda a la pagina en blanco.
Gracias, y si me pudieran seguir orientando se los agradeceria.
  #4 (permalink)  
Antiguo 22/01/2009, 14:44
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Alta de usuarios en una BD

Cita:
$sql="INSERT INTO comparacion (usuario, contrasena) VALUES '$usuario', '$pass')";
Te falta abrir el parentesis luego de VALUES.
  #5 (permalink)  
Antiguo 22/01/2009, 17:50
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Hola, pues ya he corregido este problema pero sigue con los mismo (incluso cheque todos los parantesis y corchetes por si las dudas) pero sigo en las mismas, gracias y espero me puedan decir si tengo algun error de logica o que pueda ser.
  #6 (permalink)  
Antiguo 22/01/2009, 18:14
Avatar de jfl_freak  
Fecha de Ingreso: enero-2009
Ubicación: Guatemala
Mensajes: 96
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Puede ser que el problema sea aca:

Código PHP:
$usuario["$usuario"]=$row[0];
$usuario["$usuario"]=$row[1]; 
la forma que utilizo yo es poniendo el nombre del campo dentro de row

Código PHP:
$usuario["$usuario"]=$row['campo1'];
$usuario["$usuario"]=$row['campo2']; 
  #7 (permalink)  
Antiguo 22/01/2009, 18:47
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

pues ya cambie los valores de los campos de [0] ó [1] por el nombre de los campos de las tablas, sin embargo sigue con lo mismo. . .

Estoy pensando en hacer que solo se den de alta con el usuario y contraseña desde fuera del sistema, y ya dentro de este puedan modificar los demas campos.
Gracias y seguire checadno a ver si algo nuevo surge o cambia.
  #8 (permalink)  
Antiguo 22/01/2009, 19:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Alta de usuarios en una BD

Código PHP:
$comp="SELECT usuario FROM comparacion"// Estas leyendo solo 1 campo
// ...

//...
$usuario["$usuario"]=$row[0];
$usuario["$usuario"]=$row[1];  // Este de donde sale? 
Ademas, estas ejecutando las inserciones antes de la verificacion:
Código PHP:
$comp="SELECT usuario FROM comparacion"// Aqui deberias poner un WHERE usuario = '$usuario'
$compara=pg_query($comp);
// Aqui revisas si el usuario existe
if(pg_num_rows($compara) > 0)
    die(
'El usuario ya existe');

$sql="INSERT INTO comparacion (usuario, contrasena) VALUES '$usuario', '$pass')";
$query=pg_query($sql); // Esto inserta en comparacion
$sql1="INSERT INTO id (usuario, nombres, apellidos, nickname) VALUES ('$usuario', '$nombre', '$apellido', '$nickname')";
$query1=pg_query($sql1); // Esto inserta en id (asi se llama la tabla?)

echo 'Usuario dado de alta correctamente.'
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 22/01/2009, 20:15
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Muchas gracias, ya me quedo bien (bueno lo unico que falta es que cuando hay algun dato en blanco me imprima el error de que se deben llenar todos los campos, ya que me sale una pagina en blanco) pero lo principal ya quedo, Muchas gracias por su ayuda
  #10 (permalink)  
Antiguo 22/01/2009, 20:24
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Alta de usuarios en una BD

No es muy dificl, antes de verificar si existe el usuario, solo agrega para cada campo:

Código PHP:
if(trim($usuario) == '')
    
// Aqui el mensaje de error 
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 22/01/2009, 20:34
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Cita:
Iniciado por Triby Ver Mensaje
No es muy dificl, antes de verificar si existe el usuario, solo agrega para cada campo:

Código PHP:
if(trim($usuario) == '')
    
// Aqui el mensaje de error 
Entonces la parte de mi codigo

Código PHP:
if (isset($_POST['usuario']) and ($_POST['password']) and ($_POST['nombre']) and ($_POST['apellidos']) and ($_POST['apodo']))
{
if (empty(
$_POST['usuario']) || empty($_POST['password']) || empty ($_POST['nombre']) || empty($_POST['apellidos']) || empty($_POST['apodo']))
{
echo 
"Error, debe de llenar todos los campos";
}
//......//

Tiene algun error ???
De igual checare tu propuesta y les aviso. Gracias.
  #12 (permalink)  
Antiguo 22/01/2009, 20:42
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Acabo de checar lo que me dices y da lo mismo
Tratare de encontrar el error y les platico, Gracias
  #13 (permalink)  
Antiguo 22/01/2009, 21:04
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Alta de usuarios en una BD

Estructura de tu script:
Código PHP:
// 1- Asignas todas las variables necesarias, ejemplo:
$usuario $_POST['usuario'];

// 2- Examinas TODOS los valores recibidos, ejemplo:
if(trim($usuario) == '')
   die(
'Proporciona el nombre de usuario.'); // Aqui finaliza el proceso

// 3- Verificias si el nombre ya existe en base de datos

// 4- Si no existe, lo insertas 
__________________
- León, Guanajuato
- GV-Foto
  #14 (permalink)  
Antiguo 23/01/2009, 13:57
Avatar de kurokishi  
Fecha de Ingreso: enero-2009
Ubicación: Tenochtitlán
Mensajes: 109
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alta de usuarios en una BD

Hola, pues por fin quedo ya el script!
le tuve que cambiar de:
Código PHP:
 if (isset($_POST['usuario']) and ($_POST['password']) and ($_POST['nombre']) and ($_POST['apellidos']) and ($_POST['apodo'])) 

if (empty(
$_POST['usuario']) || empty($_POST['password']) || empty ($_POST['nombre']) || empty($_POST['apellidos']) || empty($_POST['apodo'])) 

echo 
"Error, debe de llenar todos los campos"

//......// 

a este otro codigo:

Código PHP:
<?php
if (isset($_POST['usuario']) && isset($_POST['password']) && isset($_POST['nombre']) && isset($_POST['apellidos']) && isset($_POST['apodo']))
{
if (!empty(
$_POST['usuario']) && !empty($_POST['password']) && !empty($_POST['nombre']) && !empty($_POST['apellidos']) && !empty($_POST['apodo']))
{
$con=pg_connect("host='127.0.0.1' port='5432' user='postgres' password='*****' dbname='Curso'");
if (!
$con)
{
echo 
"Error al conectarse a la base de datos vuelva a intentarlo mas tarde";
}
else 
{
$usuario=$_POST['usuario'];
$pass=$_POST['password'];
$nombre=$_POST['nombre'];
$apellido=$_POST['apellidos'];
$nickname=$_POST['apodo'];
$sql="SELECT usuario FROM comparacion  WHERE usuario='$usuario'";
$query=pg_query($sql);
if (
pg_num_rows($query)!=0)
{
echo 
"Error, el usuario ya existe.";
}
else
{
$sql1="INSERT INTO comparacion (usuario, contrasena) VALUES ('$usuario','$pass')";
$query1=pg_query($sql1);
$sql2="INSERT INTO id (usuario, nombres, apellidos, nickname) VALUES ('$usuario', '$nombre', '$apellido', '$nickname')";
$query2=pg_query($sql2);
echo 
"Usuario dado de alta con exito.";
}
}
}
else
{    
echo 
"Error, debe de llenar todos los campos";
}
}
?>
El el cual en vez de checar que estuvieran vacios checa que NO esten vacios, por alguna rara razon no estaba tomando en cuenta todos los operadores 'or' (||), por ello decidi cambiar un poco la estructura y cambiarlos por 'and' (&&) y asi me agarro los valores, ¿¿talvez eran demasiado valores para el 'or'??
De cdualquier forma ya agarro, muchas gracias por ayudarme!
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 18:40.