Foros del Web » Programando para Internet » PHP »

Guardar en base de datos solo si no existe

Estas en el tema de Guardar en base de datos solo si no existe en el foro de PHP en Foros del Web. Hola soy nuevo en las bases de datos muy nuevo y me cree un registro biendo un video pero en el siempre guardaba el usuario ...
  #1 (permalink)  
Antiguo 18/07/2012, 07:12
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Guardar en base de datos solo si no existe

Hola soy nuevo en las bases de datos muy nuevo y me cree un registro biendo un video pero en el siempre guardaba el usuario y la contrasena en la base de datos da igual si existe ...
Alguna forma del if() para poder decir que solo si no existe me lo guarde en la base de datos?
  #2 (permalink)  
Antiguo 18/07/2012, 07:25
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 16 años, 6 meses
Puntos: 12
Respuesta: Guardar en base de datos solo si no existe

Lo mejor seria especificar en la base de datos que el campo usuario tiene index UNIQUE, asi la consulta de ingreso fallara.

otra forma seria realizar una consulta antes de ingresar.

Código PHP:
Ver original
  1. $query = mysql_query("SELECT * FROM usuarios WHER usuario LIKE '$user' AND password LIKE '$pass'");
  2. //recuerda ver un poco de seguridad para sanear bien las variables.
  3.  
  4. if(mysql_num_rows($query) > 0)
  5. {
  6.    echo "existe";
  7. }else{
  8.    echo "no existe";
  9. }
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #3 (permalink)  
Antiguo 18/07/2012, 09:25
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Guardar en base de datos solo si no existe

Cita:
Iniciado por xalupeao Ver Mensaje
Lo mejor seria especificar en la base de datos que el campo usuario tiene index UNIQUE, asi la consulta de ingreso fallara.

otra forma seria realizar una consulta antes de ingresar.

Código PHP:
Ver original
  1. $query = mysql_query("SELECT * FROM usuarios WHER usuario LIKE '$user' AND password LIKE '$pass'");
  2. //recuerda ver un poco de seguridad para sanear bien las variables.
  3.  
  4. if(mysql_num_rows($query) > 0)
  5. {
  6.    echo "existe";
  7. }else{
  8.    echo "no existe";
  9. }
Gracias por tu respuesta pero que hace LIKE y para que lo utilizas en el codigo ?

Probe lo de UNIQUE y funciona bien pero tambien quiero que diga al usuario que haya error
  #4 (permalink)  
Antiguo 18/07/2012, 09:30
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 15 años, 2 meses
Puntos: 44
Respuesta: Guardar en base de datos solo si no existe

en el manual dice que es "LiKE"

te recomiendo lo leas antes de realizar una pregunta

saludos
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!
  #5 (permalink)  
Antiguo 19/07/2012, 01:51
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Guardar en base de datos solo si no existe

Cita:
Iniciado por p414 Ver Mensaje
en el [URL="http://dev.mysql.com/doc/refman/5.0/es/string-comparison-functions.html"]manual[/URL] dice que es "LiKE"

te recomiendo lo leas antes de realizar una pregunta

saludos
Hola, gracias por tu respuesta .
Lo bi en el manual pero no lo entendi muy bien pero ya lo se mejor pero al provar el codigo cambiando las variables $user por $_POST[user] y $pass por $_POST[pw] es decir lo enviado en los campos no?

pero me sale este error:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a3458175/public_html/registro/registrar.php on line 29

Y siempre me dice que no existe....
  #6 (permalink)  
Antiguo 19/07/2012, 02:06
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Guardar en base de datos solo si no existe

Tu problema es que no estas poniendo el 2do parametro en mysql_query que es la variable de conexion.

$conexion = mysql_connect... bla bla

mysql_query("SELECT * ... blabla",$conexion);

si pones la variable conexion y te sigue el mismo error es que los parametros de servidor, usuario y password de mysql_connect que indicas en $conexion estan mal
  #7 (permalink)  
Antiguo 19/07/2012, 06:45
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Guardar en base de datos solo si no existe

Cita:
Iniciado por rodrigo791 Ver Mensaje
Tu problema es que no estas poniendo el 2do parametro en mysql_query que es la variable de conexion.

$conexion = mysql_connect... bla bla

mysql_query("SELECT * ... blabla",$conexion);

si pones la variable conexion y te sigue el mismo error es que los parametros de servidor, usuario y password de mysql_connect que indicas en $conexion estan mal
Gracias por tu respuesta ya puse la conexion y estoy mas que seguro que esta bien porque me guarda los datos pero el error ahora esta en :
Código PHP:
Ver original
  1. if(mysql_num_rows($query) > 0)
  2. {
  3.    echo "existe";
  4. }else{
  5.    echo "no existe";
  6. }

y el query no me da error y es:
Código PHP:
Ver original
  1. $query = mysql_query("SELECT * FROM usuarios WHERE usuario LIKE '$_POST[usuario]' AND password LIKE '$_POST[pw]'",$con);

y el error es el siguiente :

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a3458175/public_html/registro/registrar.php on line 30

Un saludo :)
  #8 (permalink)  
Antiguo 19/07/2012, 08:12
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 10 meses
Puntos: 61
Respuesta: Guardar en base de datos solo si no existe

Amigo a simple vista se ve un error de comillas .
Código PHP:
Ver original
  1. $query = mysql_query("SELECT * FROM usuarios WHERE usuario LIKE '".$_POST['usuario']."' AND password LIKE '".$_POST['pw'].'"",$con);

Saludos
  #9 (permalink)  
Antiguo 19/07/2012, 09:33
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 15 años, 2 meses
Puntos: 44
Respuesta: Guardar en base de datos solo si no existe

trata como dice matt_1985 o bien haz un

Código PHP:
Ver original
  1. echo mysql_num_rows($query);

y dinos que valor avienta.. saludos
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!
  #10 (permalink)  
Antiguo 20/07/2012, 11:51
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 10 meses
Puntos: 29
Respuesta: Guardar en base de datos solo si no existe

Gracias por vuestra ayuda pero sigue lo mismo...

El codigo quedo de esta manera:

Código PHP:
Ver original
  1. <?php
  2. include('conexion.php');
  3. if(isset($_POST['nombre']) && !empty($_POST['nombre']) &&
  4. isset($_POST['usuario']) && !empty($_POST['usuario']) &&
  5. isset($_POST['pw']) && !empty($_POST['pw']) &&
  6. isset($_POST['pw2']) && !empty($_POST['pw2']) &&
  7. isset($_POST['email']) && !empty($_POST['email'])) {
  8.     if($_POST['pw'] == $_POST['pw2']) {
  9.    
  10.         $con = mysql_connect($host,$user,$pw)
  11.         or die('Problema al conectar con el servidor');
  12.         mysql_select_db($db,$con)
  13.         or die('Problema al conectar con la base de datos.');
  14.         $query = mysql_query("SELECT * FROM usuarios WHERE usuario LIKE '".$_POST['usuario']."' AND password LIKE '".$_POST['pw']."'",$con);
  15.         $cosa = mysql_query("INSERT INTO  `a3458175_prueba`.`registro` (
  16. `ID` ,
  17. `NOMBRE` ,
  18. `USER` ,
  19. `PW` ,
  20. `EMAIL`
  21. )
  22. VALUES (
  23. NULL ,  '$_POST[nombre]',  '$_POST[usuario]',  '$_POST[pw]',  '$_POST[email]'
  24. )");
  25.         print '<font color="#00FF33">Datos insertados!</font><br />';
  26.         print 'Nombre: '.$_POST['nombre'].'<br />';
  27.         print 'Usuario: '. $_POST['usuario'].'<br />';
  28.         print 'Contrasena: '. $_POST['pw'].'<br />';
  29.         print 'Email: '. $_POST['email'].'<br />';
  30.         print '<a href="form.php">Click aqui para entrar!</a><br />';
  31.         echo mysql_num_rows($query);
  32.  
  33.  
  34.  
  35.  
  36.  
  37.     } else {
  38.         print '<font color="#FF0000">Comprueba si as escrito correctamente las contrasenas!</font><br />';
  39.         print '<a href="formulario.php">Intenta de nuevo.</a>';
  40.        
  41.     }
  42.    
  43. } else {
  44.     print '<font color="#FF0000">Comprueba que ha rellenado todos los datos!</font><br />';
  45.     print '<a href="formulario.php">Intenta de nuevo.</a>';
  46. }
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53. ?>

Y el error que muestra es este:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a3458175/public_html/registro/registrar.php on line 31

Pero la cosa esq me registra bien los datos en la base de datos y tambien cuando ya existe no crea una nueva pero tampoco le muestra al usuario que existe ya una ...

Pls ayuden me :(
  #11 (permalink)  
Antiguo 20/07/2012, 13:09
Avatar de MRotten  
Fecha de Ingreso: junio-2012
Mensajes: 22
Antigüedad: 12 años, 5 meses
Puntos: 5
Respuesta: Guardar en base de datos solo si no existe

Cambia las comillas

Código SQL:
Ver original
  1. `a3458175_prueba`
Código SQL:
Ver original
  1. 'a3458175_prueba'
  #12 (permalink)  
Antiguo 20/07/2012, 13:32
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 15 años, 2 meses
Puntos: 44
Respuesta: Guardar en base de datos solo si no existe

Código PHP:
Ver original
  1. $query = mysql_query("SELECT * FROM usuarios WHERE usuario LIKE '".$_POST['usuario']."' AND password LIKE '".$_POST['pw']."'",$con) or die (mysql_error());


deja la linea del $query así y dinos que te dice
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!

Etiquetas: mysql-php, sql, bases-de-datos
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 17:24.