Foros del Web » Programando para Internet » PHP »

Duda php sql

Estas en el tema de Duda php sql en el foro de PHP en Foros del Web. Hola. Soy nuevo en esto de bbd y php y tengo una duda. Mi codigo es: Código PHP: if(  trim ( $_POST [ "passCupon" ]) !=  ...
  #1 (permalink)  
Antiguo 23/03/2012, 13:23
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Duda php sql

Hola. Soy nuevo en esto de bbd y php y tengo una duda. Mi codigo es:
Código PHP:
if( trim($_POST["passCupon"]) != "")
{
    
$cupon $_POST["passCupon"];
    
$result mysql_query('SELECT seguridad FROM codigo');
    if(
$row mysql_fetch_array($result))
    {
        if(
$row["seguridad"] == $cupon)
        {
            
header("Location: index.php");
            
$_SESSION["estado"]=$ok;
        }
        else
        {
            echo 
'Cupón incorrecto';
        }
    }
    else
    {
        echo 
'Cupón no existente en la base de datos';
    }
    
mysql_free_result($result);
}
else
{
    echo 
'Debe especificar un cupón';

El código sirve para comprobar un logueo y que se acceda si coincide con la bbdd. Tengo dos filas pero solo me comprueba la primera, es muy raro, se supone que con el SELECT seguridad FROM codigo se comprueba en todas las filas la columna seguridad de la tabla codigo, no?
Muchas gracias
Saludos
  #2 (permalink)  
Antiguo 23/03/2012, 13:26
 
Fecha de Ingreso: noviembre-2007
Ubicación: Etzatlan, Jalisco
Mensajes: 50
Antigüedad: 16 años, 4 meses
Puntos: 18
Respuesta: Duda php sql

Que tal amigo, tu problema es que debes encerrar eso en un Ciclo, ya que así como tu lo tienes solo va a obtener la primer fila.

Código PHP:
Ver original
  1. if( trim($_POST["passCupon"]) != "")
  2. {
  3.     $cupon = $_POST["passCupon"];
  4.     $result = mysql_query('SELECT seguridad FROM codigo');
  5.     while($row = mysql_fetch_array($result))
  6.     {
  7.         if($row["seguridad"] == $cupon)
  8.         {
  9.             header("Location: index.php");
  10.             $_SESSION["estado"]=$ok;
  11.         }
  12.         else
  13.         {
  14.             echo 'Cupón incorrecto';
  15.         }
  16.     }
  17.     else
  18.     {
  19.         echo 'Cupón no existente en la base de datos';
  20.     }
  21.     mysql_free_result($result);
  22. }
  23. else
  24. {
  25.     echo 'Debe especificar un cupón';
  26. }
  #3 (permalink)  
Antiguo 23/03/2012, 13:28
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Duda php sql

Creo que tienes que hacer un bucle para poder comprobar la tabla completa

Código PHP:

if( trim($_POST["passCupon"]) != ""

    
$cupon $_POST["passCupon"]; 
    
$result mysql_query('SELECT seguridad FROM codigo'); 
    while(
$row mysql_fetch_array($result)) 
    { 
        if(
$row["seguridad"] == $cupon
        { 
            
header("Location: index.php"); 
            
$_SESSION["estado"]=$ok
        } 
        else 
        { 
           echo 
'Cupón no existente en la base de datos'
        } 
    } 
   
    
mysql_free_result($result); 

else 

    echo 
'Debe especificar un cupón'

  #4 (permalink)  
Antiguo 23/03/2012, 13:37
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda php sql

Muchas gracias a los dos
  #5 (permalink)  
Antiguo 23/03/2012, 13:57
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Duda php sql

Como que un bucle????
No es necesario, en la consulta pones una clausula where y te devolverá todos los registros con coincidan, si ese cupon, sabes seguro que va a ser unico, no necesitas hacer ningun bucle, si puede haber mas de un cupon con el mismo codigo, entonces si necesitas un bucle.
Pero insisto, debes emplear el WHERE!
  #6 (permalink)  
Antiguo 23/03/2012, 14:04
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Duda php sql

@DooBie, A lo que te refieres es a optimizar el código , ahora bien
@eldavid13 no pidió optimizar el código , pidió una ayuda del porque su código solo verificaba una linea y que yo sepa es con un while que puedes recorrer la tabla completa.


Un consejo:
Nunca hagas mas de lo que te piden o nunca terminaras una aplicación.
  #7 (permalink)  
Antiguo 23/03/2012, 14:35
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Duda php sql

Cita:
Iniciado por gjx2 Ver Mensaje
@DooBie, A lo que te refieres es a optimizar el código , ahora bien
@eldavid13 no pidió optimizar el código , pidió una ayuda del porque su código solo verificaba una linea y que yo sepa es con un while que puedes recorrer la tabla completa.


Un consejo:
Nunca hagas mas de lo que te piden o nunca terminaras una aplicación.
No es optimizar, es conseguir lo que quieres sin usar un bucle, si pones un where en la consulta, y sin tocar nada mas del código, consigues el resultado deseado, insisto, sin colocar ningun bucle.

Pero bueno... no me meto mas... sere rarito yo.
  #8 (permalink)  
Antiguo 23/03/2012, 15:59
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: Duda php sql

DooBie tiene razón eso que está haciendo eldavid13 es una redundancia de operaciones tanto para php como para mysql... no es una optimización es solo una sentencia de código...

deberias de hacer que tu query traiga solo el dato que requieres... de ese modo no necesitas hacer ningún bucle o ciclo o nada
  #9 (permalink)  
Antiguo 24/03/2012, 06:17
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda php sql

Vaya lio me estoy haciendo...

Lo que querría es que en la tabla codigose consultara en todas las filas existentes la columna seguridad.
Parece ser que con esos códigos que me habéis puesto tampoco va...
  #10 (permalink)  
Antiguo 24/03/2012, 09:22
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Duda php sql

Código PHP:

if( trim($_POST["passCupon"]) != ""

    
$cupon $_POST["passCupon"]; 
    
    
# Realizo la consulta con el where , esto es por que 
    # en este caso solo quiero comprobar un solo cupon de la base de datos
    
$result mysql_query('SELECT seguridad FROM codigo where seguridad='.$cupon); 
                
                
                
                
# Verifico con la funcion mysql_num_rows si la consulta ha devuelto algun valor o sea si ha encontrado algun elemento igual.
                
if( mysql_num_rows($result) )
                {            
                            
                                
                            
mysql_free_result($result); 
                                
$_SESSION["estado"] = $ok;
                                    
header("Location: index.php");            
                            
                }
                else
                {            
                         echo 
'cupón no existente en la base de datos'
                }
    



else 

    echo 
'Debe especificar un cupón'

  #11 (permalink)  
Antiguo 26/03/2012, 02:25
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda php sql

Me da error....
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

Última edición por eldavid13; 26/03/2012 a las 03:10
  #12 (permalink)  
Antiguo 26/03/2012, 03:58
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda php sql

Si utilizo este código funciona:
Código PHP:
if( trim($_POST["passCupon"]) != ""

    
$cupon $_POST["passCupon"]; 
    
$result mysql_query('SELECT seguridad FROM codigo'); 
    while(
$row mysql_fetch_array($result)) 
    { 
        if(
$row["seguridad"] == $cupon
        { 
            
//header("Location: index.php"); 
            
$_SESSION["estado"] = $ok;
            
$_SESSION["passPedido"] = $cupon;
            echo 
"<script>window.location='index.php'</script>";   
        } 
        else 
        { 
           echo 
'Cupón no existente en la base de datos'
        } 
    } 
   
    
mysql_free_result($result); 

else 

    echo 
'Debe especificar un cupón'

El problema es que si se introduce mal el pass, salta la página validar.php con la frase Cupón no existente en la base de datos tantas veces como filas haya en la tabla debido al while (creo) y claro, que salte una página poniendo 300 veces (si hay 300 filas) Cupón no existente en la base de datos no queda muy bien estéticamente.
Se podria hacer que solo saltara una vez la frase error??
Muchas gracias
Saludo
  #13 (permalink)  
Antiguo 26/03/2012, 04:14
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Duda php sql

Prueba así

Código PHP:
if( trim($_POST["passCupon"]) != ""

    
$cupon $_POST["passCupon"]; 
    
$result mysql_query('SELECT seguridad FROM codigo WHERE seguridad = \'$cupon\''); 
    while(
$row mysql_fetch_array($result)) 
    { 
        if(
$row["seguridad"] == $cupon
        { 
            
//header("Location: index.php"); 
            
$_SESSION["estado"] = $ok;
            
$_SESSION["passPedido"] = $cupon;
            echo 
"<script>window.location='index.php'</script>";   
        } 
        else 
        { 
           echo 
'Cupón no existente en la base de datos'
        } 
    } 
   
    
mysql_free_result($result); 

else 

    echo 
'Debe especificar un cupón'

  #14 (permalink)  
Antiguo 26/03/2012, 05:19
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda php sql

Gracias pero tampoco, solo salta validar.php en blanco ponga lo que ponga...
  #15 (permalink)  
Antiguo 26/03/2012, 06:07
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Duda php sql

Se les esta olvidando escapar la variable!, lean sobre la diferencia de comillas simples y dobles para PHP! (si, no es lo mismo!)

Código PHP:
Ver original
  1. if( trim($_POST["passCupon"]) != "")  
  2. {  
  3.     $cupon = $_POST["passCupon"];  
  4.     $result = mysql_query('SELECT seguridad FROM codigo WHERE seguridad = \''.$cupon.'\'');  
  5.  
  6.     if (mysql_num_rows($result) != 0) {
  7.             $_SESSION["estado"] = $ok;
  8.             $_SESSION["passPedido"] = $cupon;
  9.             echo "<script>window.location='index.php'</script>";
  10.     }else {
  11.             echo 'Cupón no existente en la base de datos';  
  12.     }
  13.    
  14.     mysql_free_result($result);  
  15. }  
  16. else  
  17. {  
  18.     echo 'Debe especificar un cupón';  
  19. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #16 (permalink)  
Antiguo 26/03/2012, 06:18
 
Fecha de Ingreso: marzo-2012
Mensajes: 28
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Duda php sql

Parece que perfecto!!
Muchas gracias

Etiquetas: mysql, sql, tabla
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 12:18.