Sacar un unico dato de un registro en una tabla.

Iniciado por XXXXXX, 20 Junio 2010, 17:00 PM

0 Miembros y 2 Visitantes están viendo este tema.

MinusFour

Es que te estamos dando código generico, para que tu continues el trabajo. No creo que las consultas que te estamos dando se ajusten a lo que tu tienes, quien sabe. No nos estás dando las estructuras de tus tablas. El código de yoya es practicamente el mismo...

MinusFour

Oh oh, espera, el código de yoya tiene un error en lógica...

XXXXXX

#32
como ya e dicho antes, trabajo con 4 tablas que son.

usuario, password, sexo, y mail.


y lo que tengo que lograr ahora, es evitar lo que ya e dicho, que duplique el usuario, o el mail, vamos que si ya existe uno, no pueda registrarse otro con el mismo.


creo que mas o menos voy entendiendo pero aun voy algo perdido, con ese codigo por medio

según tengo entendido, llego asta donde el insert..

en teoría primero viene el IF con el código que checa la DB, y seguidamente un ELSE que diría, no se puede registrar porque ya esta en uso no?


pero ya luego no se como insertar el codigo de registro, ahí lei lo de tu post, que dices que con el numero ese )) == 0) pero no lo termino de pillar.

me voy a dormir, asta mañana.

MinusFour

Como te lo he dicho antes.

mysql_num_rows es una función que devuelve un número entero que representa la cantidad de registros obtenida de la consulta que se ejecuto con mysql_query.

Si la consulta que revisa las personas que tienen cierto email no devuelve ningun registro significa que no hay ninguna persona con ese correo. Es lo que estamos revisando aquí...

Si tú pones

Código (php) [Seleccionar]

if(mysql_num_rows(mysql_query($laconsulta))){

}


A la hora de ejecutar el código la llamada a la función mysql_num_rows devolvera el entero y lo sustituirá para evaluar en la condición del if. En pocas palabras a la hora de ejecución, digamos que hay DOS personas que ya se han registrado con un solo email (cosa que no debería pasar si siempre has usado este código para manejar los registros), el código se evaluará de la siguiente forma:

Código (php) [Seleccionar]

if(2){

}


Y como para PHP los números enteros diferente de 0 son de Verdaderos a la hora de ser transformados en booleanos, se ejecutará el código dentro del if.

Si pones algo como esto:

Código (php) [Seleccionar]

if(mysql_num_rows(mysql_query($laconsulta)) == 0)

}


A la hora de hacer la ejecución del código, hará lo mismo que en la parte de arriba, la parte mysql_num_rows(mysql_query($laconsulta)) se sustituirá por el valor entero que corresponde.

Código (php) [Seleccionar]

if(2 == 0){

}


Y te estás dando cuenta que en este último, no estamos observando un simple valor, sino una comparación entre dos enteros que se evalua si es verdadera o falsa. En este caso es falsa, por lo que no se ejecuta el código. Imagina si no hubiera nadie registrado con ese email en la base de datos... a la hora de hacer la sustitución de la función, es decir que ya regreso un valor, hubiera regresado 0 y así hubiera sido ejecutado el código dentro del if.

Ahora, en tú último código, ponte a pensar que pasaría y que estás haciendo...

XXXXXX

Vale, creo que empiezo a entender, aunque no termino de comprender los IF, elses, y esas cosas.

en teoria else es "si no" no?


bueno, mirate esto, creo que es mas o menos lo que me intentas decir no?

Citar

<?php
 
include ('config.php');
 
$usuario=$_POST['usuario'];
$password=$_POST['password'];
$sexo=$_POST['sexo'];
$mail=$_POST['mail'];
 
// Verificar si existe el email
 
if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1"))){
 
// Insertar datos despues de verificar
if(1){
echo 
'lo sentimos, ya hay un usuario con ese email/nombre';
}

if(
mysql_num_rows(mysql_query($mail)) == 0);
}
if(
== 0){
$db_handle "INSERT INTO login (userid, user_pass, sex, email) VALUES     ('$usuario','$password','$sexo','$mail')";
    
mysql_query($db_handle);
}
?>


bien, el primero entra por el IF, que mira si ya existe el email, si existe, entra por el segundo if que esta en true correcto?

si no existe pasa al segundo IF, y despues de eso, pasa a false, y entra por el quarto if, ejecutando el codigo de insercion.


bueno, creo que lo empiezo a pillar  ;D

gracias por vuestra paciencia

bizco

#35
toma el if como si, else como "y si no".

si mysql_retorna_algun_registro
   mostrar Ya hay un usuario usando el mail bla bla
y si no
   registrar usuario

solo es logica, sabiendo que X dato solo puede existir una vez en la tabla X se compara el retorno y tomas la decision correspondiente. yo personalmente verificaria que el usuario no este en uso tampoco, puede ser algo confuso y en un futuro ves tu a saber si no te resulta molesto.

Citar
if(mysql_num_rows(mysql_query($mail)) == 0);
.....
if(1 == 0)

viendo el codigo, asumo que no tienes idea de que hace cada funcion. no te lo tomes a mal, pero en mi opinion tiene peligro que sin saber quieras hacer un formulario publico que interactua con una base de datos. animate y ponte a estudiar el lenguaje y veras que pronto lo llevas muy bien.


MinusFour

¿Es que nunca has programado en nada?

Los if y else son estructuras de control. Evaluan una condición y a partir de ahí deciden si continuar por un lado o por el otro.

La sintaxis es así:

Código (php) [Seleccionar]

if($condicion){
// Si la condición es verdadera, es decir, el resultado de lo que se esté comparando es verdadero o hay un valor que resulta ser verdadero, el código que se ejecutará será dentro del if.
}
else{
//Al contrario si la condición resulta falsa, el código que se ejecuta es este.
}


Es basicamente: Sí esta condición resulta verdadera, ejecuta el código a seguir. Sino, ejecuta el código que sigue.

Ahora, piensa en esto, y como te va a ayudar esto a tí:

Código (php) [Seleccionar]

if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1"))){

// Insertar datos despues de verificar
if(1){
echo 'lo sentimos, ya hay un usuario con ese email/nombre';
}
//Este codigo practicamente dice: Si uno es verdadero, entonces imprimir echo ''lo sentimos, ya hay un usuario con ese email/nombre"

//Uno siempre es verdadero, recuerda que php toma todos los valores enteros diferentes de 0 como verdaderos.


if(mysql_num_rows(mysql_query($mail)) == 0); // <--- No necesitas poner el ; a las llamadas de las funciones dentro de una condición.
} //Estas cerrando el primer if, pero ni siquiera abriste las llaves para el if de arriba
if(1 == 0){
$db_handle = "INSERT INTO login (userid, user_pass, sex, email) VALUES     ('$usuario','$password','$sexo','$mail')";
    mysql_query($db_handle);

//Este codigo dice, si 1 es igual a 0 entonces ejecutar la query $db_handle.
//Dime tú, cuando es que 1 es igual a 0? Nunca, por lo tanto siempre es FALSO.
}


Pensemos bien lo que quieres....

Si [<------- Palabra clave] el usuario existe, entonces: Insertar su registro en la base de datos. Sino entonces:mostrarle al usuario un error puesto que ya está registrado.

Ahora hablale a php, dile lo que quieres xD.

Por cierto, estás muy nuevo en esto como para empezar con este tipo de códigos, que no está mal, pero por lo menos deberías leerte algun tutorial del lenguaje. Esto es BASICO en todos los lenguajes con programación estructurada así que la lectura te sirve mucho. Mira que estás aprendiendo a volar, cuando ni siquiera te han concebido! Y te lo digo con todo el cariño del mundo.

XXXXXX

la verdad es que nunca e programado, y estoy entrando en php, mira básicamente no es que yo necesite programar no, pero me gusta, y estoy con un compañero mio que sabe mucho mas que yo, y el tiene mucho trabajo, y claro, no puedo depender de el para terminar esta parte del código de una web, por eso, voy a zancadas, el ya hace su parte, y me gustaría ayudar como pueda, y creo que viendo tutoriales, y con lo que me explicáis vosotros, me entra mejor, que no solo viendo tutoriales.


Cada dia dedico unas horas a leer tutoriales de php, pero la verdad en la mayoría no se explican muy bien que digamos.

bien, me lié un poco, entonces el if es como un SI, y el else seria "si no", entonces seria.

Citar

// accede a la base de datos, y comprueba que no este repetido.
if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1")))

// Si, por lo que sea, ya existe, imprime error.
} else {
print 
"El usuario" $usuario ."Ya esta en uso, escoge otro nombre.";
}

// seguidamente , viene el codigo una vez se a comprobado que no se repite, o que no existe ningun duplicado, del nombre o email.

Bien, después de esto, viene la parte en la cual, inserta código, supongo que entra en función, lo que me contaste antes.

La verdad, se que estoy yendo muy rápido, pero creo que lo pillo mas cuando me lo explicáis vosotros que no viendo tutoriales de 40.000 paginas.

ya lo e dicho y lo repito, muchas gracias.

MinusFour

Código (php) [Seleccionar]

if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1"))) //*1

} else {
print "El usuario" . $usuario ."Ya esta en uso, escoge otro nombre.";
}


Primeramente se te ha olvidado poner la "{" después del if. Y hay que revisar la condición, cuando es verdadera?

Como te lo he estado repitiendo varias veces, los números enteros diferentes de 0 son verdaderos para PHP, y cuando es que es diferente de 0? cuando hay alguna persona con ese email.

Entonces estás diciendo:

Si hay un usuario con ese email entonces registrarlo, sino imprime un mensaje. Creo que encontrarás que es un problema de lógica, porque tu no quieres que se registren las personas que coinciden en tu base de datos, así que hay dos opciones.

La primera es poner el código de registro en el else...

Asi dices, si hay un usuario con ese email entonces imprimir el error, sino registrarlo.

La segunda es comparar el número de registros con 0, es decir, estar checando si devuelve 0 (que significa que no hay personas) que se logra así

Código (php) [Seleccionar]

if(mysql_num_rows(mysql_query($laconsulta)) == 0) { //codigo para registrar
}
else { //error a mostrar
}

XXXXXX

#39
jaja, se me olvido ese "{" me lo pase por accidente..

Citar

// vamos a comprobar, si existen coincidencias.
if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1"))) //*1
 
} else { // echa mensaje de error si hay coincidencias. 
print "El usuario" $usuario ."Ya esta en uso, escoge otro nombre.";
}

// si no hay coincidencias, pasa aquí, ya que 0 es que no hay, ya que 0 es falso, significa que no existe, o no hay. no?

if(mysql_num_rows(mysql_query("INSERT INTO login (userid, user_pass, sex, email) VALUES ('$usuario','$password','$sexo','$mail')")) == 0) { //codigo para registrar

}
else { 
//error a mostrar 
echo "tenemos problemas para conectar a las db, intentalo mas tarde";
}


Lo que no se si esta bien, es el código de envió, ya que antes había la variable $registro, que eso en teoría estaría llamando algo, así que no se si al poner directamente el insert dentro, funcionaria o no.