Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Que se realice x acción si un valor aparece ya en un registro de la Base de Datos

Estas en el tema de Que se realice x acción si un valor aparece ya en un registro de la Base de Datos en el foro de PHP en Foros del Web. Buen día. Creo que este es mi 1er post en que no planteo un error, sino una problema que no sé cómo solucionar. Ayuda, por ...
  #1 (permalink)  
Antiguo 08/11/2013, 14:32
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Que se realice x acción si un valor aparece ya en un registro de la Base de Datos

Buen día.

Creo que este es mi 1er post en que no planteo un error, sino una problema que no sé cómo solucionar. Ayuda, por favor.

Supongamos que tenemos un formulario con varios campos, uno de ellos el de email. Guardamos en una BD todos los valores que se metan en dichos campos. Pero también queremos que NO se guarden dichos datos si la dirección electrónica del usuario ya se encuentra en alguno de los registros de la BD.

Se me ocurrió hacerle así:
Código PHP:
          $query mysql_query('SELECT * FROM mi_tabla') or die(mysql_error());

          while ( 
$fila mysql_fetch_array($query) )
          {
              
$emailActual $fila['Email'];  // "Email" es el campo de la BD donde se guarda la dirección electrónica

              
if ($emailActual == $email// La variable $email guarda el email puesto en el formulario.
              
{
                  echo 
'Ya existe el email<br />';
                  echo 
'Por tanto, no se guardan los datos<br />';
              }
              else
              {
                  echo 
'NO existe ese email<br />';
                  echo 
'Por tanto, sí se guardan los datos<br />';
              } 

Evidentemente este código no sirve. Si resulta que el email del usuario ya existe en, digamos, el registro 3 de la BD, sólo NO se guardan los datos del formulario en esa vuelta del WHILE, pero sí en las otras vueltas que leen los otros registros que no guardan ese mismo email.

A ver si pueden echarme una mano con esto. Gracias

Saludos cordiales.

  #2 (permalink)  
Antiguo 08/11/2013, 14:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Que se realice x acción si un valor aparece ya en un registro de la Base d

Tu principal problema es que la consulta es por todos los registros y no sólo por uno.

Pero si haces esto:
Cita:
SELECT * FROM mi_tabla WHERE Email = '[email protected]'
¿Qué crees que pase?

Vamos, es tonto hacer un SELECT y extraer todos los registros si sólo estás comparando uno, ojo ahí.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/11/2013, 15:10
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Que se realice x acción si un valor aparece ya en un registro de la Base d

Cita:
Iniciado por pateketrueke Ver Mensaje
Vamos, es tonto hacer un SELECT y extraer todos los registros si sólo estás comparando uno, ojo ahí.

Ok, gracias por responder maestro pateketrueke. Ya te conozco de hace tiempo aquí en Foros del Web, y sé que eres duro pero justo (talvez no siempre, ¿recuerdas?). Mira, está es la última vez que me animo a postear algo sin antes quebrarme la cabeza a pedazos para resolver mi problema. Justo después de abrir este post, se me ocurrió hacer lo siguiente, y funciona:
Código PHP:
          $seleccionarTodosLosRegistros 'SELECT * FROM mi_tabla';
          
$query mysql_query($seleccionarTodosLosRegistros) or die(mysql_error());

          
          while ( 
$fila mysql_fetch_array($query) )
          {
              
$emailActual $fila['Email'];

              if (
$emailActual == $email)
              {
                  
$x true;
                  echo 
'Ya existe el email<br />';
                  exit;  
              }
              else
              {
                  echo 
'NO existe ese email<br />';
              }
          }
          if (
$x == true)
          {
                 echo 
'Entonces se guarda el registro';
          } 

Aunque ciertamente cuando abrí el post, quería averiguar si mi problema se podría arreglar haciendo los cambios en la propia consulta y no en el resto del PHP.

Pero, maestro pateketrueke, parece que tienes toda la razón con la indicación que pones. Voy a ver cómo me va con ello.

Por vía de mientras funciona el código que tengo, y eso es bueno.

Regreso, y comento si fue más fácil hacer como comentas o como lo tengo ya.
  #4 (permalink)  
Antiguo 08/11/2013, 16:11
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Que se realice x acción si un valor aparece ya en un registro de la Base d

Que funcione no quiere decir que este bien hecho, la forma mas rapida y menos costoza es la que te dijo pateketrueke, ademas que no te diste el tiempo de buscar en google, antes de hacer una pregunta debes buscar rn internet siempre esta lo que buscas. Saludos y suerte con tu codigo.
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #5 (permalink)  
Antiguo 08/11/2013, 17:12
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Que se realice x acción si un valor aparece ya en un registro de la Base d

Cita:
Iniciado por pateketrueke Ver Mensaje
Tu principal problema es que la consulta es por todos los registros y no sólo por uno.
Muy bien, ya probé la indicación del maestro pateketrueke y resultó funcionar a la perfección, y con muchas menos líneas que las que proponía mi código. Así:
Código PHP:
          $seleccionarTodosLosRegistros 'SELECT * FROM mi_tabla WHERE Email = "$email"';
          
$query mysql_query($seleccionarTodosLosRegistros) or die(mysql_error());

          if (
$query)
          {
              echo 
'El email existe, por tanto, NO se GUARDA.';
          }
          else
          {
              echo 
'El email NO existe, por tanto, el registro se GUARDA';
          } 

Gracias maestro.

Nada más una aclaración.
Creo entender lo que quiere decir SkAr88, en el sentido de que un código "bien hecho" es aquel que funciona pero además es lo más breve posible. Si le damos este significado a "bien hecho", pues sí, mi código no podría ser calificado de "bien hecho", pues está algo largo (aunque no tanto, parece). Sin embargo, me parece que un código "bien hecho" debe tener además otra característica que SkAr88 parece olvidar, y es sin duda muy importante, sino la más (¿no?). Y es que el código tenga una estructura correcta, o que siga la ortodoxia de un lenguaje de programación. En este sentido, me parece, mi código sigue la ortodoxia, está bien construido, y si llega a funcionar no es por causalidad sino necesariamente, porque está bien construido según las estructuras de PHP. Que haga rodeos (infantiles, de principiante, etc) es otra cosa. Pero está bien construido. Por otro lado, tienes razón en eso de que no me di el tiempo para buscar solución en internet antes de postear. Lo siento y no vuelve a pasar (aunque sí busqué, pero no tanto).

Como sea, gracias por su atención, a ambos. Saludos y hasta luego.

Última edición por berkeleyPunk; 08/11/2013 a las 17:20

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 22:15.