Foros del Web » Programando para Internet » PHP »

SPRINT (Dos condiciones igual a un mismo GET)

Estas en el tema de SPRINT (Dos condiciones igual a un mismo GET) en el foro de PHP en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original //[I]declaro la variable GET:[/I]   if ( isset ( $_GET [ 'categoria' ] ) ) {   $colname_qry = ...
  #1 (permalink)  
Antiguo 19/02/2013, 11:19
 
Fecha de Ingreso: mayo-2005
Mensajes: 3
Antigüedad: 19 años, 6 meses
Puntos: 0
SPRINT (Dos condiciones igual a un mismo GET)

Código PHP:
Ver original
  1. //[I]declaro la variable GET:[/I]
  2.  
  3. if (isset($_GET['categoria'])) {
  4.   $colname_qry = "-1";
  5.   $colname_qry = (get_magic_quotes_gpc()) ? $_GET['categoria'] : addslashes($_GET['categoria']);
  6. }
  7. //[I]Conecto...[/I]
  8. mysql_select_db($database, $conexion);
  9.  
  10. //[I]... y consulto...[/I]
  11. $query_qry = sprintf("SELECT * FROM tienda_articulos WHERE (categoria_id or categoria_2 = %s) ORDER BY articulo ASC", GetSQLValueString($colname_qry, "int"));


La sentencia no está bien construída porque da error. Lo que quiero es saber cómo consultar que categoria_id o categoria_2 tengan el valor del GET usando sprinft correctamente.

Gracias anticipadas.

Última edición por gnzsoloyo; 19/02/2013 a las 11:28
  #2 (permalink)  
Antiguo 19/02/2013, 11:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SPRINT (Dos condiciones igual a un mismo GET)

Eso es tema de PHP, no de MySQL.
En cuanto al WHERE, está mal escrito, porque cada campo debe ser usado en una comparación:
Código MySQL:
Ver original
  1. WHERE categoria_id = %s or categoria_2 = %s
Como está escrito, si categoria_id es igual a 1, dara TRUE, de lo contrario aplicará la comparación a categoria_2.

Muevo a Foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/02/2013, 11:58
 
Fecha de Ingreso: mayo-2005
Mensajes: 3
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: SPRINT (Dos condiciones igual a un mismo GET)

Gracias, no tenía muy claro si es mysql o php (o los dos mezclados)

Lo que me contestas es obvio, pero el caso es cómo construír bien esto utilizando el sprintf?:

$query_qry = sprintf("SELECT * FROM tienda_articulos WHERE (categoria_id or categoria_2 = %s) ORDER BY articulo ASC", GetSQLValueString($colname_qry, "int"));
  #4 (permalink)  
Antiguo 19/02/2013, 14:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SPRINT (Dos condiciones igual a un mismo GET)

Pues yo miro el manual de referencia (PHP - sprintf), y no veo problemas en entender los ejemplos de cómo crear una consulta con varios parámetros entrantes.
¿Cuál es exactamente tu duda?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 19/02/2013 a las 16:43
  #5 (permalink)  
Antiguo 20/02/2013, 01:54
 
Fecha de Ingreso: mayo-2005
Mensajes: 3
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: SPRINT (Dos condiciones igual a un mismo GET)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pues yo miro el manual de referencia ([URL="http://php.net/manual/es/function.sprintf.php"]PHP - sprintf[/URL]), y no veo problemas en entender los ejemplos de cómo crear una consulta con varios parámetros entrantes.
¿Cuál es exactamente tu duda?
Que cualquiera de los campos: "categoria_id" o "categoria_2" sean igual a un mismo valor que envié por GET.
Es muy sencillo hacerlo en una query, pero con sprintf no acierto bien.

Por ejemplo,
//Tengo un valor:
$categoria = 30
query="SELECT * FROM tabla_categorias WHERE categoria_1 = 30 OR categoria_2=30 OR categoria_3=30"; //(fácil, pero susceptible de SqlInyection)

//He comprobado que esto me funciona:
sprintf("SELECT * FROM tabla_categorias WHERE categoria_1 = %s OR categoria_2= %s OR categoria_3= %s", GetSQLValueString($categoria, "int"),GetSQLValueString($categoria, "int"),GetSQLValueString($categoria, "int"));

//Pero.......¿SE PUEDE SIMPLIFICAR A ALGO ASÍ O PARECIDO?
sprintf("SELECT * FROM tabla_categorias WHERE ((categoria_1,categoria_2,categoria_3) = %s)", GetSQLValueString($categoria, "int"));
...para poder declarar sólo una vez GetSQLValueString($categoria, "int")?

Etiquetas: mysql, sql
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:39.