Foros del Web » Programando para Internet » PHP »

Warning: sprintf() [function.sprintf]: Too few arguments

Estas en el tema de Warning: sprintf() [function.sprintf]: Too few arguments en el foro de PHP en Foros del Web. Código: $colname_to = "1"; if (isset($_POST['nombre'])) { $colname_to = (get_magic_quotes_gpc()) ? $_POST['nombre'] : addslashes($_POST['nombre']); } $query_to= sprintf("SELECT nombre, icono FROM perros WHERE nombre LIKE '$radiobutton' ...
  #1 (permalink)  
Antiguo 29/10/2008, 05:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Warning: sprintf() [function.sprintf]: Too few arguments

Código:
$colname_to = "1";
if (isset($_POST['nombre'])) {
  $colname_to = (get_magic_quotes_gpc()) ? $_POST['nombre'] : addslashes($_POST['nombre']);
}

$query_to= sprintf("SELECT nombre, icono FROM perros WHERE nombre LIKE '$radiobutton'  UNION SELECT nombre, icono FROM gatos WHERE nombre LIKE '$radiobutton'", $colname_to);

Warning: sprintf() [function.sprintf]: Too few arguments

Estoy haciendo un buscador y quiero que también busque por varias tablas con la clausula UNION, lo que pasa es si pongo la clausula where el radiobutton es una variable POST que empiece/contiene o termine la cadena a buscar en más de una consulta me sale lo de arriba

Que hacer?
  #2 (permalink)  
Antiguo 29/10/2008, 07:15
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 10 meses
Puntos: 2
Respuesta: Warning: sprintf() [function.sprintf]: Too few arguments

Estas usando mal esa sentencia.

sprintf Procesa una cadena y reemplaza las palabras claves por los que especifiques. Estas palabras claves por lo general con %d para insertar números y %s para cadenas (hay mas, pero esas son las mas usadas). Entonces, para usarla tu deberías hacer algo como:

Código PHP:
sprintf("SELECT * FROM tabla WHERE campo1 = %d AND campo2 = '%s'"$numero$cadena); 
Entonces, $numero y $cadena se reemplazara por %d y %s respectivamente.

En tu problema, en ninguna parte usas esas palabras claves e insertar las variables directamente en la cadena, y la variable que dejas al final no se inserta en ninguna parte.
__________________
KIBIT.cl
  #3 (permalink)  
Antiguo 29/10/2008, 07:23
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Warning: sprintf() [function.sprintf]: Too few arguments

Me he explicado mal
Código:
if (isset($_POST['nombre'])) {
  $colname_to = (get_magic_quotes_gpc()) ? $_POST['nombre'] : addslashes($_POST['nombre']);
}

$query_to= sprintf("SELECT nombre, icono FROM perros WHERE nombre LIKE '$radiobutton'  UNION SELECT nombre, icono FROM gatos", $colname_to);
Si lo pongo así funciona perfectamente

$radiobutton=$_POST['radiobutton']

<input name="radiobutton" type="radio" value="%s%%" checked>
Empieza

<input name="radiobutton" type="radio" value="%%%s%%">
Contiene
<input name="radiobutton" type="radio" value="%%%s">
Termina

El problema es que si busco en más de una tabla con el radiobutton da


Warning: sprintf() [function.sprintf]: Too few arguments
  #4 (permalink)  
Antiguo 29/10/2008, 08:45
 
Fecha de Ingreso: junio-2008
Mensajes: 31
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Warning: sprintf() [function.sprintf]: Too few arguments

Te hago ver un par de detalles

1 - addslashes no te asegura evitar sql injection( si no sabes q es eso averigualo! )
2 - Snd234 te explico bien que como funciona sprintf


lo q tenes que hacer es :

Código PHP:

$colname_to 
"1";
if (isset(
$_POST['nombre']))
{
   if ( 
get_magic_quotes_gpc() )
   {
      
$nameToSearch mysql_real_escape_stringstripslashes($_POST['nombre']) , $objConex );
   }else{
      
$nameToSearch mysql_real_escape_string$_POST['nombre'] , $objConex );
   }
}
//OJO: $radiobuttom no esta verificado!

$query"

SELECT nombre, icono FROM perros WHERE nombre LIKE '%"
.$nameToSearch."%'
UNION SELECT nombre, icono FROM gatos WHERE nombre LIKE '"
.$radiobutton."'";


/// 
en el caso de que quieras usar sprintf:

Código PHP:
$query =  sprintf"

SELECT nombre, icono FROM perros WHERE nombre LIKE '%s'
UNION SELECT nombre, icono FROM gatos WHERE nombre LIKE '%s'  "
mysql_real_escape_string$_POST['nombre'] , $objConex )
mysql_real_escape_string$_POST['radiobuttom'] , $objConex )

   ) 
Otros detalles, radiobuttom puede tener la informacion que cualquiera quiera, al igual que $_POST['nombre']. Quiero decir que verifiques q los 2 campos no tengan valores extraños antes de meterlos en una sentencia Sql.

Esto que te puse arriva:
Código PHP:
mysql_real_escape_string$_POST['nombre'] , $objConex 
tambien es incorrecto. Tenes que verificar antes que $_POST['nombre'] no posea valores que no deseas. Si es un nombre usa la Funcion ctype_alnum.

A los radio ( los inputs html ) no le pongas mas que valores numericos. Despues con php hace lo q tengas q hacer. Por Ej:

Código PHP:
If ( $_POST['radio'] == )
{
     
//HACER ALGO1
}else{
     
//HACER ALGO2

Otra cosa
Cuando haces un FROM table WHERE nombre LIKE 'algo', el LIKE necesita los valores '%$variable%' para buscar por izq y por derecha aproximaciones a datos q esten en la bse de datos. Si pones LIKE '%$variable' buscara por izq, si pones '$variable%' buscara por derecha y si pones '%$variable%' por los 2 lados.
  #5 (permalink)  
Antiguo 29/10/2008, 09:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Warning: sprintf() [function.sprintf]: Too few arguments

Hola jordi45,

En un futuro por favor busca en el foro, es un tema que podrías haber buscado y encontrado la solución: http://www.forosdelweb.com/f18/too-f...-muero-638719/

Saludos.
  #6 (permalink)  
Antiguo 29/10/2008, 10:00
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Warning: sprintf() [function.sprintf]: Too few arguments

Da errores
1ª forma

Cita:
Warning: mysql_real_escape_string() expects parameter 2 to be resource, null given in
línea de error

$nameToSearch = mysql_real_escape_string( stripslashes($_POST['nombre']) , $objConex );

2ª forma

Código:
Warning: mysql_real_escape_string() expects parameter 2 to be resource, null given in
No me funciona de ninguna de las maneras
A ver quiero meter mano lo menos posible en el código anteriormente puesto, solo quiero que funcione, ya he utilizado el buscador y lo que ponía no me valía porque lo mío es más complejo

Respecto a la inyeccion de sql lo solucioné con un catcha y fuera inyecciones, así como está el código funciona perfectamente recoge la variable radiobutton y hace la consulta pero sólo puedo hacerlo con una tabla..

Última edición por jordi45; 29/10/2008 a las 10:20
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 17:15.