Foros del Web » Programando para Internet » PHP »

error en generar codigo de una tabla

Estas en el tema de error en generar codigo de una tabla en el foro de PHP en Foros del Web. hola a todos. hace tiempo he utilizado un codigo php para generar el id de una tabla. cuando lo subi al hosting, me sale el ...
  #1 (permalink)  
Antiguo 18/11/2011, 14:51
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Pregunta error en generar codigo de una tabla

hola a todos. hace tiempo he utilizado un codigo php para generar el id de una tabla. cuando lo subi al hosting, me sale el siguiente error.

Warning: str_pad() expects parameter 2 to be long, string given in /home/peruarte/public_html/cidteci/mdidactico/funciones/funChio.php on line 11.

la funcion que genera el id de la tabla se llama newIdTabla. al llamar la funcion, lo almaceno en una variable $id y alli tiene k capturar el codigo de la tabla. pero no sucede asi y me muestra el error que he mencionado antes.

este es el codigo.

Código PHP:
Ver original
  1. function newIdTabla($tabla,$campo,$lon,$cn)
  2. {
  3.     $new_id = "";
  4.     $lon = "";
  5.     $s = "select max(".$campo.") as maxid from ".$tabla;
  6.     $r = $cn->query($s);
  7.     $h = mysql_fetch_object($r);
  8.     $maxid = $h->maxid;
  9.     $new_id = is_null($h)?str_pad("1",$lon,"0",STR_PAD_LEFT):str_pad(intval($maxid)+1,$lon,"0",STR_PAD_LEFT);
  10.     return $new_id;
  11. }

saludos.
  #2 (permalink)  
Antiguo 18/11/2011, 15:10
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: error en generar codigo de una tabla

Saludos amigo. No se si entendí bien tu código. Que significa la variable $lon. Es longitud? Porque si es así debería ser numérica y la estas declarando con un valor string:

$lon="";

Para que sea numérica tienes que ponerla:

$lon=0;

O simplemente no la declaras y que tome el valor cuando se lo asignes.

Por lo que entendí ese es el error que te da: se ha encontrado un string donde debería haber un número
  #3 (permalink)  
Antiguo 18/11/2011, 15:51
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: error en generar codigo de una tabla

gracias por responder. la variable $lon como tu dices, es longitud. me olvide mencionar que despues llamo a la funcion almacenando en una variable.

Código PHP:
Ver original
  1. $id = newIdTabla('md_material','mate_cod','8',$cn);
  2. echo $id;
  #4 (permalink)  
Antiguo 19/11/2011, 00:33
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: error en generar codigo de una tabla

Hola amigo. Parece que no me captaste. Te explico mejor. Mira, en el primer script que posteaste, al principio, declaras:

$lon="";

Esto hace que $lon se inicialice como una variable string.

Más abajo, casi al final utilizas a $lon como segundo parámetro en la llamada a una función str_pad. Si te fijas, traduciendo tu error al Español, dice: se esperaba un número y se encuentra un string, y mensiona a un segundo parámetro de la misma función str_pad a la que llamas casi al final. Ese segundo parámetro que debería ser numérico es $lon, que ahora está funcionando como un string.

Para más información, la función str_pad, según la referencia de PHP que tengo acá, requiere 3 parámetros:

1- Un valor string.
2- Un valor numérico (que es en tu caso $lon)
3- Otro string

Ejemplo:

$lon=4;
echo str_pad("ejemplo",$lon,"H");

Esto imprime: ejemploHHHH

Esta función lo que hace es concatenar el string del primer parámetro con una cadena que contiene al string del tercer parámetro, repetido tantas veces como especifica el número del segundo parámetro ($lon) Por eso $lon tiene que ser un número y no un string.

En tucaso:

str_pad("1",$lon,"0") lo que hace es devolver "1" concatenado con $lon cantidad de "0"s.
Suponiendo que $lon=5, tu función str_pad devuelve 100000

En el segundo script ilustras como llamas a la función newIdTabla y pasa en el parámetro $lon un valor '8' Desde ahí ya estamos mal, debería ser 8 y no '8'. Encima de eso, ya dentro de la función, en la segunda línea sobreescribes el valor de $lon con $lon=""; asignándole un string vacío. Lógicamente al pasarlo a str_pad por donde debería entrar un némero, ahí viene el error.

Soluciones el valor de $lon tiene que ser numérico en todos los casos. Por tanto cuando llames a la función newIdTabla, no le pases '8' sino 8. Además elimina la linea $lon=""; que te está sobreescribiendo el valor que entra por parámetros.

Haz esa prueba y verás. Saludos.

Última edición por jorgelpadronb; 19/11/2011 a las 01:29

Etiquetas: html, mysql, tabla, variables
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 01:44.