PHP, y mysql

Iniciado por #Aitor, 23 Diciembre 2013, 13:45 PM

0 Miembros y 1 Visitante están viendo este tema.

#Aitor

Hello!

Bueno, primero que nada deciros que no se a dónde va este tema, pues en el foro existe el apartado PHP y el apartado MYSQL, y yo tengo problemas con MYSQL pero dentro de PHP, ¿entonces...? ¡Un dilema!.


Bueno, mi intención es crear un formulario de registro, hasta ahí bien. Esta creada la base de datos, con su respectiva tabla, e introduce los valores en ella sin problema.


Mi problema ahora es, que si el usuario ya existe, lo vuelve a crear... entonces mi intención es arreglar eso.

Esta, es una parte del código

Código (php) [Seleccionar]

$con=mysql_connect($host,$user,$pw)or die("Problems with servers. "); 
// Conecta con mysql

mysql_select_db($db,$con)or die ("Problems with Data Base"); 
// Conecta con la base de datos.

$sel=mysql_query("SELECT USER FROM registro",$con);
// Seleciona la columna user.

$sesion=mysql_fetch_array($sel);
// Lo almacena en un array.

$user = $_POST['user']; // Se almacena en la variable '$user' lo escrito en el formulario anterior.
$userB = $sesion['USER']; // Se almacena en la variabe '$userB' toda la columna user.

if($user === $userB){ // Comprueba si la variable user TIENE un valor IGUAL y es del mismo tipo de variable que alguna de las filas de la columna USER.
echo "El usuario ya existe"; // Si la comprobacion retorna True imprime por pantalla que el Usuario existe.

}else{

// codigo.................


El problema es que comprueba el primer dato que tiene la tabla.

Me explico, tengo la sentencia SELECT user FROM tabla;

Pero solo trae la primera fila de la columna user, y realiza la comprobacion exclusivamente con la primera.

Había pensado en usar un ciclo do while, y romperlo cuando $sesion=mysql_fetch_array($sel); retornase en falso.

ejemplo de lo que digo;

Código (php) [Seleccionar]



do {
           
            $sesion["user"];
             

      } while ($sesion= mysql_fetch_array($sel));


pero me temo que a partir de aquí me pierdo y no sé como realizar la comprobación con cada una de los users sin hacerlos con todos a la vez.

No sé si me explico

Un saludo y gracias.


Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

GenR_18

No sé si sea la forma correcta o segura como lo hago, pero yo lo que uso es row_Count() de PDO.

Por ejemplo, ejecuto la consulta (el SELECT bla bla..) buscando el usuario que se intenta registrar y con row_Count() reviso si no me regresa 0, muestro que ya existe el usuario.

Con la libreria mysql_* creo que era mysql_num_rows pero te recomiendo uses PDO para más seguridad y ya es hora que te actualices :P

Salu2!

#Aitor

Cita de: GenR_18 en 23 Diciembre 2013, 19:09 PM
No sé si sea la forma correcta o segura como lo hago, pero yo lo que uso es row_Count() de PDO.

Por ejemplo, ejecuto la consulta (el SELECT bla bla..) buscando el usuario que se intenta registrar y con row_Count() reviso si no me regresa 0, muestro que ya existe el usuario.

Con la libreria mysql_* creo que era mysql_num_rows pero te recomiendo uses PDO para más seguridad y ya es hora que te actualices :P

Salu2!

Hola.

Se agradece mucho tu respuesta, la verdad es que ando aprendiendo PHP, y ya que empecé con esto, me gustaría acabarlo. Sé que las sentencias que empleo en un futuro serán eliminadas (no es que lo diga yo, si no el famoso manual PHP). xD!

Pero de momento me mantengo con esto, creo que se me complicará si me pongo con lo otro.

Al final conseguí resolverlo (yo solito *Orgullo por lo alto  :silbar: :silbar:*)

Dejaré aquí la solución por si alguien tuviese el mismo problema, que de hecho, la solución era muy simple para el tiempo que tarde en encontrarla.

Recordemos que teniamos este código:

Código (php) [Seleccionar]

$con=mysql_connect($host,$user,$pw)or die("Problems with servers. "); 
// Conecta con mysql

mysql_select_db($db,$con)or die ("Problems with Data Base"); 
// Conecta con la base de datos.

$sel=mysql_query("SELECT USER FROM registro",$con);
// Seleciona la columna user.

$sesion=mysql_fetch_array($sel);
// Lo almacena en un array.

$user = $_POST['user']; // Se almacena en la variable '$user' lo escrito en el formulario anterior.
$userB = $sesion['USER']; // Se almacena en la variabe '$userB' toda la columna user.

if($user === $userB){ // Comprueba si la variable user TIENE un valor IGUAL y es del mismo tipo de variable que alguna de las filas de la columna USER.
echo "El usuario ya existe"; // Si la comprobacion retorna True imprime por pantalla que el Usuario existe.

}else{

// codigo.................



Pero solo miraba la primera fila que se encontraba en la columna user.

Para que mirase todas, lo más fácil era hacer un bucle, que se rompiense cuando   
Código (php) [Seleccionar]

$sesion= mysql_fetch_array($sel)

retornase FALSE

El ciclo sería;

Código (php) [Seleccionar]

do {

           $sesion["user"];


     } while ($sesion= mysql_fetch_array($sel));


No obstante sigue existiendo el problema de que no se puede evaluar con un if porque el valor de $sesion["user"] seria el del final del ciclo en este caso solo evaluaria el del final de la columna user.

La solución es muy simple, basta con decirle al while que rompa el ciclo cuando retorne false O la variable $user sea igual a la variable $sesion["user"];

Es más fácil explicarlo en código.

Código (php) [Seleccionar]


do {

$DATO = $sesion['USER'];

}

while($sesion= mysql_fetch_array($sel) or $dato === $user);


if($user === $DATO){ // Comprueba si la variable user TIENE un valor IGUAL y es del mismo tipo de variable que alguna de las filas de la columna USER.
echo "El usuario ya existe"; // Si la comprobacion retorna True imprime por pantalla que el Usuario existe.



De esta forma el ciclo se rompe cuando retorne falso o $dato sea igual a $user, como al romperse el ciclo, no sabemos cual es la razón verdadera por la que se rompio, realizamos una simple condicion.

Así de simple.

Un saludo ^^.

(Que pesado soy  :rolleyes:)

Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}