Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: XXXXXX en 20 Junio 2010, 17:00 pm



Título: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 20 Junio 2010, 17:00 pm
El codigo que utilizo para extracciones normales es este...

Código:
<?php include ('config.php'); ?>
<?PHP
if ($db_found) {

$SQL = "SELECT * FROM chat";
$result = mysql_query($SQL);

while ($db_field = mysql_fetch_assoc($result)) {
print "<th class=\"spawn-mensaje\">" . $db_field['idcomentario'] . "</th>";
}

mysql_close($db_handle);

} else {
print "Problemas al intentar leer la base de datos, intentalo mas tarde disculpa las molestias. ";
mysql_close($db_handle);
}

?>

como puedo hacer para que me lea por ejemplo

de la tabla CHAT, la id IDCOMENTARIOS, me lea el ultimo registro.

pro ejemplo tengo puesto order by asc no? pues que me lea el numero mas alto, en este caso si hay
50 comentarios me sacara el 50, si luego postea otro y hay 51 pues el 51.

gracias y saludos.


Título: Re: Sacar un unico dato de un rejisro en una tabla.
Publicado por: MinusFour en 20 Junio 2010, 17:50 pm
Pues le agregas a la query "ORDER BY id DESC limit 1"


Título: Re: Sacar un unico dato de un rejisro en una tabla.
Publicado por: XXXXXX en 20 Junio 2010, 19:31 pm
quedaria asi?

Código:
?php include ('config.php'); ?>
<?PHP
if ($db_found) {

$result = mysql_query(SELECT * FROM chat ORDER BY id DESC limit 1);

while ($db_field = mysql_fetch_assoc($result)) {
print "<th class=\"spawn-mensaje\">" . $db_field['idcomentario'] . "</th>";
}

mysql_close($db_handle);

} else {
print "Problemas al intentar leer la base de datos, intentalo mas tarde disculpa las molestias. ";
mysql_close($db_handle);
}

?>


Título: Re: Sacar un unico dato de un rejisro en una tabla.
Publicado por: MinusFour en 20 Junio 2010, 21:11 pm
Si, pero te faltan comillas en el mysql_query.


Título: Re: Sacar un unico dato de un rejisro en una tabla.
Publicado por: XXXXXX en 20 Junio 2010, 21:27 pm
lo que nos dejaria algo like this...

?php include ('config.php'); ?>
<?PHP
if ($db_found) {

$result = "mysql_query(SELECT * FROM chat ORDER BY id DESC limit 1)";

while ($db_field = mysql_fetch_assoc($result)) {
print "<th class=\"spawn-mensaje\">" . $db_field['idcomentario'] . "</th>";
}

mysql_close($db_handle);

} else {
print "Problemas al intentar leer la base de datos, intentalo mas tarde disculpa las molestias. ";
mysql_close($db_handle);
}

?>

con eso me dice

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, string given in C:\xampp\htdocs\web2\mods\com\totalcomentarios.php on line 7
)


Título: Re: Sacar un unico dato de un regisro en una tabla.
Publicado por: MinusFour en 20 Junio 2010, 22:14 pm
Me refería a las comillas del argumento de mysql_query...

Código
  1. $result = mysql_query("SELECT * FROM chat ORDER BY id DESC limit 1");


Título: Re: Sacar un unico dato de un regisro en una tabla.
Publicado por: XXXXXX en 20 Junio 2010, 23:41 pm
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, string given in C:\xampp\htdocs\web2\mods\com\totalcomentarios.php on line 7

algo podria estar mal en el codigo, pero no veo que es

lo siento es que justo ahora entro en php y voy algo perdido con las variables y así aunque no lo parezca aprendo  :)


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 20 Junio 2010, 23:55 pm
solo por si las moscas... este código te tira error?
Código
  1.  
  2. ?php include ('config.php'); ?>
  3. <?PHP
  4. if ($db_found) {
  5.  
  6. $result = mysql_query("SELECT * FROM chat ORDER BY id DESC limit 1");
  7.  
  8. while ($db_field = mysql_fetch_assoc($result)) {
  9. print "<th class=\"spawn-mensaje\">" . $db_field['idcomentario'] . "</th>";
  10. }
  11.  
  12. mysql_close($db_handle);
  13.  
  14. } else {
  15. print "Problemas al intentar leer la base de datos, intentalo mas tarde disculpa las molestias. ";
  16. mysql_close($db_handle);
  17. }
  18.  
  19. ?>
  20.  
  21.  


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 21 Junio 2010, 02:01 am
el error esta en la primera linea xD...

Código
  1. ?php include ('config.php'); ?>

Creo que tus problemas son con sql no con php, seria mas facir que lo postearas en la zona de base de datos... Para no estar escapando comillas que te puede producir error, seria mas facir usar la función AddSlashes() (http://php-es.com/function.addslashes.html)


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 21 Junio 2010, 04:53 am
No era por eso, ya esta funcionando muchas gracias, error mio puse una cosa mal en el codigo y no accedia bien a la db xD

por cierto, como podria añadirle a este codigo, otro codigo para evitar que me duplicara usuarios y emails?

Código:
<?php include ('config.php'); ?>
<?php
$usuario=$_POST['usuario'];
$password=$_POST['password'];
$sexo=$_POST['sexo'];
$mail=$_POST['mail'];

$db_handle = "INSERT INTO `login` (userid, user_pass, sex, email) VALUES ('$usuario','$password','$sexo','$mail')";

mysql_query($db_handle);
?>
<?php
Header("Location: registrarseok.php");
?>

muchas gracias, estoy aprendiendo cada vez mas  ;D


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: Falso Positivo en 21 Junio 2010, 15:27 pm
por cierto, como podria añadirle a este codigo, otro codigo para evitar que me duplicara usuarios y emails?
Debes consultar si el email existe, en base a eso insertar o no el nuevo usuario.

Código
  1. <?php
  2.  
  3. include ('config.php');
  4.  
  5. $usuario=$_POST['usuario'];
  6. $password=$_POST['password'];
  7. $sexo=$_POST['sexo'];
  8. $mail=$_POST['mail'];
  9.  
  10. // Verificar si existe el email
  11.  
  12. $q1= mysql_query("SELECT email FROM login WHERE email ='$mail' ");
  13. $num_rows = mysql_num_rows($q1);
  14.  
  15. if( $num_rows >0 ){
  16.  
  17.    $db_handle = "INSERT INTO login (userid, user_pass, sex, email) VALUES     ('$usuario','$password','$sexo','$mail')";
  18.    mysql_query($db_handle);
  19.  
  20.     } else {
  21.  
  22.         Header("Location: registrarseok.php");
  23.  
  24.       }
  25.  
  26. ?>
  27.  
  28.  




Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 21 Junio 2010, 20:51 pm
hay algo que no entiendo..

ese $q1 a donde se refiere? eso son los datos de conexion?

porque lo que asigna la conexion es $db_handle que seria lo mismo a
$db_handle = mysql_connect($server, $user_name, $password);
y
$db_found = mysql_select_db($database, $db_handle);

esto crea la conexion.

envez de ser $q1 no tendria que ser db_found?

PD:; añado que aunque se duplique el mail, sigue ingresando los datos


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 21 Junio 2010, 20:57 pm
man, eso es solo una conexión mysql y luego selecciona una base de datos...


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: [u]nsigned en 21 Junio 2010, 21:02 pm
por cierto, como podria añadirle a este codigo, otro codigo para evitar que me duplicara usuarios y emails?

Al margen de la logica que uses en el script PHP, yo te recomendaria tambien que edites la estructura de tu tabla, poniendo los campos userid y email como UNIQUE (unico) y asi sera elpropio MySQL el que no permitira registros repetidos, devolviendo el numero de error 1062, elcualpodes averiguar desde php con mysql_errno()

Saludos


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 21 Junio 2010, 21:06 pm
no me ables de cosas tan complicadas jajaja que justo estoy entrando en php

expresate de forma que lo pueda entender un noob.

gracias por toda vuestra paciencia y dedicacion al intentar ayudarme  :D


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 21 Junio 2010, 21:12 pm
la forma que dice @ "."]:-*[/quote]  es la mas apropiada xD...


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 22 Junio 2010, 03:26 am
sigo sin comprender su explicacion...

la database no la puedo tocar, si la toco peta todo el otro sistema, por eso tengo que hacerlo mediante codigo, o javascript o alguna cosa, que me permita evitar duplicados


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 22 Junio 2010, 03:43 am
Las dos soluciones que te presentan son estás: hacer unique el campo de email o revisar que exista el email antes de registrarlo. Si no quieres mover nada a la BD, lo que te recomiendo entonces es que revises si hay algún registro con ese email, lo cual lo haces con mysql_num_rows...

Código
  1. <?PHP
  2.  
  3. if(mysql_num_rows(mysql_query("SELECT * FROM tabla WHERE email = '$email'")) == 0){
  4. registrar();
  5. }
  6. else{
  7. echo "Error: el email ya está en uso";
  8. }
  9. ?>
  10.  


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: [u]nsigned en 22 Junio 2010, 04:20 am
No pretendo iniciar discusiones estúpidas ni nada por el estilo, pero me parece bueno ir metiendoles la idea de eficiencia a los novatos. Y me pare muy poco eficiente realizar una consulta solo para saber si ya existe el mail, y en caso contrario realizar otra rutina para insertar los registros. Ademas si tenes phpMyAdmin establecer un campo como UNIQUE es cuestion de dos clicks  ;D


Código
  1. <?php
  2.  
  3. if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$email' LIMIT 1")){
  4.   registrar();
  5. }
  6. else{
  7.   echo "Error: el email ya está en uso";
  8. }
  9. ?>

Saludos


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 22 Junio 2010, 08:52 am
ya ya, si no te digo que no, pero lo uso unido a otro sistema, por eso no puedo permitirme hacer eso, aun así tu idea esta muy bien.


sobre el codigo
Código:
<?php
 
if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$email' LIMIT 1")){
   registrar();
}
else{
   echo "Error: el email ya está en uso";
}
?>

quedaria algo asi?
Código:
<?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 = '$email' LIMIT 1")){
   registrar();
}
else{
   echo "Error: el email ya está en uso";
}
 
?>

ese registrar() es donde ingreso el php con los datos de ingreso? ej envia.php


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 22 Junio 2010, 14:46 pm
Primeramente, todo este código debería estar en el archivo donde haces el registro. Yo he puesto registrar(); para hacer notar que ahi va el código que usas para registrar al usuario. Y tienes $mail en lugar de $email, uno tiene que cambiarse.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 22 Junio 2010, 21:47 pm
entonces seria
Código:
<?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
$db_handle = "INSERT INTO `login` (userid, user_pass, sex, email) VALUES ('$usuario','$password','$sexo','$mail')";

mysql_query($db_handle);

}
else{
   echo "Error: el email ya está en uso";
}
 
?>


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 22 Junio 2010, 22:04 pm
jajaajjaja XDDD.... Que haces man??? por lo menos probar los codigos antes de postearlo xD.
Aunque no es la forma correcta de hacerlo funcionara ya que devolverá 1 si existe... 0 si no existe...

Código:
1 = True
0 = False

Y pasara el if a ejecutarse...

Ej:
Código
  1. <?php
  2.  
  3.  
  4. $conexion = mysql_connect("localhost", "root", "pasdjsoaj");
  5. mysql_select_db("ej", $conexion);
  6.  
  7. echo mysql_num_rows(mysql_query("SELECT nombre FROM clientes WHERE nombre = 'yoya' LIMIT 1"))
  8.  
  9. ?>
  10.  

Devuelve:

Código:
1

Aunque la forma mas comoda es la que dice "."]:-*[/quote]

Código
  1. mysql> CREATE TABLE clientes( nombre CHAR(20) UNIQUE);
  2. Query OK, 0 ROWS affected (0.20 sec)
  3.  
  4. mysql> INSERT INTO clientes (nombre) VALUES ('yoya');
  5. Query OK, 1 ROW affected (0.14 sec)
  6.  
  7. mysql> INSERT INTO clientes (nombre) VALUES ('yoya');
  8. ERROR 1062 (23000): Duplicate entry 'yoya' FOR KEY 'nombre'
  9.  
  10.  


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 23 Junio 2010, 15:24 pm
ahora si que ya me e perdido del todo....

Primero mira que no este duplicado, y luego inserta, entonces.... no veo por ningun lado eso en el primer codigo, y en el segundo, eso es php? o que es?

podrias explicarme un poco como funciona el segundo codigo?


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 23 Junio 2010, 15:36 pm
Lo que Yoya quiere decir es que en donde haces:

Código
  1. mysql_num_rows(mysql_query("La consulta blablabbla"))

Esto devuelve un valor entero que representa el número de registros que consigues de la consulta. Lo que haciamos era compararlo con 0 (mysql_num_rows(..)  == 0) cosa que a tí se te ha olvidado poner en el último código que pusiste.

Ahora, como tienes un if(mysql_num_rows(..)) lo que hará es evaluar el número como falso o verdadero, donde para php todos los números enteros son verdaderos y el 0 es negativo.

Entonces, si la consulta devuelve que hay un registro con ese email devolvera un número entero diferente de 0 lo cual significa que es positivo. Entonces al evaluar nos queda así.

Código
  1. if(1){
  2. registrar();
  3. else{
  4. echo "Error: emáil ya registrado";
  5. }
  6.  

Lo cual significa que le estás diciendo a php, si existe una persona con ese email dejalo registrarse y si no existe una persona con ese email no lo dejes registrarse y mandale el error.

En pocas palabras, está alrevez. Pon la comparación (el == 0) o cambia el registrar en el else y el echo dentro del if.

Y lo que te ha puesto Yoya después son queries para la creación de una tabla con un campo unique.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 24 Junio 2010, 08:57 am
ahora supongo que si,

Código:
<?php
$conexion = mysql_connect("localhost", "root", "pasdjsoaj");
mysql_select_db("ej", $conexion);
 
echo mysql_num_rows(mysql_query("SELECT nombre FROM clientes WHERE nombre = 'yoya' LIMIT 1"));

if(1){
registrar(); // Aquí que va? tengo que llenar con algo?
}else{
echo "Error: emáil ya registrado";
}
?>

no lo e probado, porque no se donde tendria que poner el valor para que luego si esta OK enviara, supongo que donde pone registrar() tendria que poner el codigo de registro correcto?


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 24 Junio 2010, 17:04 pm
man, ya lo tienes hecho....
Código
  1. <?php
  2.  
  3. include ('config.php');
  4.  
  5. $usuario=$_POST['usuario'];
  6. $password=$_POST['password'];
  7. $sexo=$_POST['sexo'];
  8. $mail=$_POST['mail'];
  9.  
  10. // Verificar si existe el email
  11.  
  12. if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1")){
  13.  
  14. // Insertar datos despues de verificar
  15. $db_handle = "INSERT INTO `login` (userid, user_pass, sex, email) VALUES ('$usuario','$password','$sexo','$mail')";
  16.  
  17. mysql_query($db_handle);
  18.  
  19. }
  20. else{
  21.   echo "Error: el email ya está en uso";
  22. }
  23.  
  24. ?>


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 24 Junio 2010, 17:46 pm
el dreamweaver me dice que tiene 2 errores, en la linea 12 i 20, y en el navegador me dice.

Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\web2\mods\coma\cp\enviareg.php on line 12


falta alguna cosa de "}" estas no?


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 24 Junio 2010, 18:15 pm
ahora supongo que si,

Código:
<?php
$conexion = mysql_connect("localhost", "root", "pasdjsoaj");
mysql_select_db("ej", $conexion);
 
echo mysql_num_rows(mysql_query("SELECT nombre FROM clientes WHERE nombre = 'yoya' LIMIT 1"));

if(1){
registrar(); // Aquí que va? tengo que llenar con algo?
}else{
echo "Error: emáil ya registrado";
}
?>

no lo e probado, porque no se donde tendria que poner el valor para que luego si esta OK enviara, supongo que donde pone registrar() tendria que poner el codigo de registro correcto?

A ver, te estás confundiendo. El código era para explicar, no era exactamente código...

Si tu tienes:

Código
  1. <?php
  2.  
  3. if(mysql_num_rows(mysql_query("SELECT * FROM clientes WHERE email = '$email' LIMIT 1"))){
  4. registrar();
  5. ]
  6. else{
  7. echo "Mensaje de error";
  8. }
  9. ?>
  10.  

El código entrará por el IF únicamente si existe una persona con ese email.

Si lo pones de está forma:

Código
  1. <?php
  2. if(mysql_num_rows(mysql_query("SELECT * FROM clientes WHERE email = '$email' LIMIT 1")) == 0){
  3. registrar();
  4. ]
  5. else{
  6. echo "Mensaje de error";
  7. }
  8. ?>
  9.  

Entrará por el IF únicamente si NO existe una persona con ese email.

Tienes que leer mi post para entender porque. Y no solo estár leyendo y copiando código :/, nada más fijate lo que has copiado:

"SELECT nombre FROM clientes WHERE nombre = 'yoya' LIMIT 1" <-- esta consulta que tiene que ver con tu problema actual? Repito, ponte a leer lo que copias y tratar de entender.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 24 Junio 2010, 20:02 pm
esque los 2 me estais diciendo cosas distintas y me estoy liando de mala manera, ahora ya no se donde va nada  :-X

y no me limito simplemente a copiar y pegar...

el me puso un codigo, tu me pones otro, o os poneis de acuerdo, o me hago una empanada mental.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 24 Junio 2010, 20:19 pm
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...


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 24 Junio 2010, 20:38 pm
Oh oh, espera, el código de yoya tiene un error en lógica...


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 01:47 am
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.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 25 Junio 2010, 02:20 am
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
  1. if(mysql_num_rows(mysql_query($laconsulta))){
  2.  
  3. }
  4.  

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
  1. if(2){
  2.  
  3. }
  4.  

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
  1. if(mysql_num_rows(mysql_query($laconsulta)) == 0)
  2.  
  3. }
  4.  

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
  1. if(2 == 0){
  2.  
  3. }
  4.  

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...


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 13:12 pm
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(1 == 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


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: bizco en 25 Junio 2010, 14:09 pm
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.



Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 25 Junio 2010, 14:14 pm
¿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
  1. if($condicion){
  2. // 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.
  3. }
  4. else{
  5. //Al contrario si la condición resulta falsa, el código que se ejecuta es este.
  6. }
  7.  

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
  1. if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1"))){
  2.  
  3. // Insertar datos despues de verificar
  4. if(1){
  5. echo 'lo sentimos, ya hay un usuario con ese email/nombre';
  6. }
  7. //Este codigo practicamente dice: Si uno es verdadero, entonces imprimir echo ''lo sentimos, ya hay un usuario con ese email/nombre"
  8.  
  9. //Uno siempre es verdadero, recuerda que php toma todos los valores enteros diferentes de 0 como verdaderos.
  10.  
  11.  
  12. if(mysql_num_rows(mysql_query($mail)) == 0); // <--- No necesitas poner el ; a las llamadas de las funciones dentro de una condición.
  13. } //Estas cerrando el primer if, pero ni siquiera abriste las llaves para el if de arriba
  14. if(1 == 0){
  15. $db_handle = "INSERT INTO login (userid, user_pass, sex, email) VALUES     ('$usuario','$password','$sexo','$mail')";
  16.    mysql_query($db_handle);
  17.  
  18. //Este codigo dice, si 1 es igual a 0 entonces ejecutar la query $db_handle.
  19. //Dime tú, cuando es que 1 es igual a 0? Nunca, por lo tanto siempre es FALSO.
  20. }

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.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 15:49 pm
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.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 25 Junio 2010, 17:05 pm
Código
  1. if(mysql_num_rows(mysql_query("SELECT email FROM tabla WHERE email = '$mail' LIMIT 1"))) //*1
  2.  
  3. } else {
  4. print "El usuario" . $usuario ."Ya esta en uso, escoge otro nombre.";
  5. }
  6.  

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
  1. if(mysql_num_rows(mysql_query($laconsulta)) == 0) { //codigo para registrar
  2. }
  3. else { //error a mostrar
  4. }
  5.  


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 18:29 pm
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.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: MinusFour en 25 Junio 2010, 20:59 pm
Me tienes completamente perdido tomeu00, mira, lo único que necesitas es un solo if.

Hagamos los dos ejemplos de una vez para que entiendas...

Está es una manera.

Código
  1. <?php
  2.  
  3. if(mysql_num_rows(mysql_query("SELECT * FROM tabla_de_registros WHERE email = '$email'")) == 0){
  4. //hacer el insert a la tabla
  5. mysql_query("INSERT INTO tabla_de_registros VALUES('etc', 'etc', 'etc')");
  6. }
  7. else{
  8. echo "Hay una persona ya con este email";
  9. }
  10.  
  11.  

Está es la otra manera:

Código
  1. <?php
  2.  
  3. if(mysql_num_rows(mysql_query("SELECT * FROM tabla_de_registros WHERE email = '$email'"))){
  4. echo "Hay una persona ya con este email";
  5. }
  6. else{
  7.  //hacer el insert a la tabla
  8. mysql_query("INSERT INTO tabla_de_registros VALUES('etc', 'etc', 'etc')");
  9.  
  10. }
  11.  
  12.  


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 25 Junio 2010, 22:49 pm
porque mejor no se lo maquetean y que se ponga a debugear xD, porque seguiremos en la misma xD... Si no se da cuenta que lo resuelve y luego hace otra cosa ???


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 22:52 pm
vale vale!! ahora si lo pillo creo que me e liado tanto yo, que te e liado a ti, bien, según e entendido...



en el primero, entra por el if, busca las tablas y comprueba que no este repetido el user o mail, si es así, == 0 false, pasa a insertar, si no ELSE, suelta el mensaje de error.


en segundo es mas o menos igual solo que por lo que veo, va sin el == 0.

entra por el IF, hace la selección, seguidamente si ya existe manda el mensaje, si no osea ( else ) ya hace el insert.

esta correcto?


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: bizco en 25 Junio 2010, 23:01 pm
num rows = siemrpe es mayor de 0 si ya existe el dato en la tabla.

con esto claro, siempre que sea mayor de 0 tienes q mostrar el mensaje de que el usuario ya existe, y solo te queda una direccion que es el caso contrario, insertar el usuario.

if (condicion)
{

}
else
{

}

solo hay un camino, bueno o malo.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 25 Junio 2010, 23:06 pm
Aver, creo que este si lo entiende...



Código
  1. <?php
  2.  
  3.  
  4. $valor = mysql_num_rows(mysql_query("SELECT * FROM tabla_de_registros WHERE email = '$email'"));
  5. /* Si existe algun correo, el valor de la variable $valor sera 1,
  6. Si no existe algun correo, el valor de la variable $valor sera 0
  7. */
  8.  
  9. if(!empty($valor){//Si la variable $valor contiene algun valor se ejecuta el if
  10. //Recordando que 0 es un valor nulo o mejor dicho nada y como 0 no es nada
  11. //no se ejecuta el if....
  12. echo "Hay una persona ya con este email";
  13.  
  14. }//Fin del if y entra el else
  15. else{//En caso que el if falle se ejecuta el else
  16.  
  17.  
  18. mysql_query("INSERT INTO tabla_de_registros VALUES('etc', 'etc', 'etc')");
  19. //Hacemos la consulta insertando los datos...
  20. }//Fin del else
  21.  
  22.  
  23. ?>
  24.  


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 23:08 pm
sorry, posteo yoya y me pillo de improvisto xD

re edito en un rato.


re editado:

bien yoya, lo veo bien , unas notas que quiero remarcar.

el dreamweaver me tira 2 errores, no se si sera normal.

y no termino de comprender la función que tiene $valor, o como se expresaría.

gracias por vuestra ayuda chicos ^_^ después de esto, seguiré experimentando localmente, para probar de hacer cosas nuevas.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 25 Junio 2010, 23:18 pm
eso es porque me falto cerras el parentesis del if xD.
Código
  1. if(!empty($valor)){//Si la variable $valor contiene algun valor se ejecuta el if
$valor solo es una variable, le puse ese nombre para que entiendas un poco mejor pero no te vayas a liar xD.


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 25 Junio 2010, 23:39 pm
entonces ese $valor, no tiene que llamar a nada no?

bien, entonces el codigo me quedaria así.

PD: valor tendria que ser db_handle, que es lo que hace conexion?

Citar
<?PHP
$user_name = "root";
$password = "mipasword";
$database = "mitabla";
$server = "localhost";
$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);
?>
<?php
 
$usuario=$_POST['usuario'];
$password=$_POST['password'];
$sexo=$_POST['sexo'];
$mail=$_POST['mail'];
 

$valor = mysql_num_rows(mysql_query("SELECT * FROM tabla_de_registros WHERE email = '$mail'"));
/* Si existe algun correo, el valor de la variable $valor sera 1,
Si no existe algun correo, el valor de la variable $valor sera 0
*/
 
if(!empty($valor)){//Si la variable $valor contiene algun valor se ejecuta el if
//Recordando que 0 es un valor nulo o mejor dicho nada y como 0 no es nada
//no se ejecuta el if....
echo "Hay una persona ya con este email";
 
}//Fin del if y entra el else
else{//En caso que el if falle se ejecuta el else
 
 
mysql_query("INSERT INTO tabla_de_registros VALUES('etc', 'etc', 'etc')");
//Hacemos la consulta insertando los datos...
}//Fin del else

// code
?>


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: bizco en 25 Junio 2010, 23:41 pm
vuelvo a opinar, tendrias que leer algo basico y mas que nada comprender que hace el codigo que escribes. mas que nada pq esto solo para hacer el insert, a la hora de validar mediante cookies, sesiones o en el propio formulario de login vas a estar mas perdido aun. solo es un consejo, pero si no sabes diferenciar cuando el retorno es 0 o mayor para verificar un mail, menos entenderas si el usuario tiene las cookies, si el valor de estas es el correcto y otros muchos casos que no entenderas si no lees algo.

Citar
PD: valor tendria que ser db_handle, que es lo que hace conexion?

valor tiene el resultado de mysql_num_rows:

printf("%d",$valor);

prueba con un mail q no exista y otro que si, veras la diferencia.

http://www.php.net/manual/es/function.mysql-num-rows.php


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 25 Junio 2010, 23:57 pm
si, anda pruebalo  y nos cuentas...


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 26 Junio 2010, 00:03 am
VALE VALE!! YA COMPRENDO, soy un zopenco por no leer bien el codigo.. YA ENTIENDO!!!

el codigo quedaria asi, si no existiera el valor

if(!empty(mysql_num_rows(mysql_query("SELECT * FROM tabla_de_registros WHERE email = '$mail'"))))


y como quedaria muy largo, lo a acortado cierto?


VOY A PROBARLO!!


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: XXXXXX en 26 Junio 2010, 00:12 am
bueno ya funciona, o eso parece jaja!!

ahora me pregunto, si quisiera que comprobara, el usuario y el mail, seria asi?

"SELECT * FROM tabla_de_registros WHERE email, usuario = '$mail','$usuario'


gracias por vuestra ayuda, ya e comprendido el uso de los if y else, y ya se un poco mas de php, seguiré experimentando.

dentro de poco empezare a estudiar esto también, aprobé el acceso a grado medio y tengo ya una escuela.

en un tiempo me verán ayudando aquí  :D


Título: Re: Sacar un unico dato de un registro en una tabla.
Publicado por: ~ Yoya ~ en 26 Junio 2010, 00:17 am
Código
  1. "SELECT * FROM tabla_de_registros WHERE email, usuario = '$mail','$usuario'

Eso ya es SQL