elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problema con (int)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con (int)  (Leído 1,621 veces)
dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Problema con (int)
« en: 22 Diciembre 2011, 02:05 am »

Tengo el siguiente código:

Código
  1. <?php
  2. (int)$suma;
  3. $suma="a";
  4. echo($suma);
  5. ?>

El problema es que me muestra por pantalla a y en ningún momento he dicho que quiero que deje de ser INT ¿Alguna forma para que me haga caso?


En línea




dark_sargon


Desconectado Desconectado

Mensajes: 534


CJ


Ver Perfil WWW
Re: Problema con (int)
« Respuesta #1 en: 22 Diciembre 2011, 16:01 pm »

PHP: Manipulación de tipos - Manual


En línea

http://www.actimediaonline.com
Diseño Web, animación y más.

http://www.ciudadoscura.com
Diseño Web, electrónica, programación, móviles y más.
dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: Problema con (int)
« Respuesta #2 en: 22 Diciembre 2011, 16:21 pm »

Sí, eso me lo estudie antes de preguntar.

Lo que pasa es que 'forzar' que una variable sea siempre INT es algo muy bueno en cuanto a seguridad informática.

Y en el caso de otros lenguajes como C (creo recordar) no se puede meter una cadena a un INT.

Y como PHP está creado en C pienso que quizás si exista alguna forma.
En línea




dark_sargon


Desconectado Desconectado

Mensajes: 534


CJ


Ver Perfil WWW
Re: Problema con (int)
« Respuesta #3 en: 22 Diciembre 2011, 16:31 pm »

Ya te entiendo. Tienes razón, sería algo muy bueno para la seguridad.
Me interesa éste tema, voy a buscar a ver si encuentro algo. Si encuentras algo, publícalo por favor :)

Aunque se sabe que PHP actualiza el tipo de variable cada vez que se le asigna un valor a esta.

¿No se podría verificar el dato que entra antes de asignarlo?
Código
  1. <?php
  2.  $dato = "a";
  3.  if(gettype($dato)=="integer"){
  4.    $suma = $dato;
  5.    echo $suma;
  6.  }else{
  7.    echo "El dato debe ser un n&uacute;mero entero.";
  8.  }
  9. ?>
« Última modificación: 22 Diciembre 2011, 16:45 pm por dark_sargon » En línea

http://www.actimediaonline.com
Diseño Web, animación y más.

http://www.ciudadoscura.com
Diseño Web, electrónica, programación, móviles y más.
ZHOSS-9

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema con (int)
« Respuesta #4 en: 22 Diciembre 2011, 20:22 pm »

Lo que ha dicho dark es un buen método para seguridad, sí. Ese tema es interesante.
En cuanto al forzado de tipos:

Código
  1. <?php
  2.  
  3.       function suma() {
  4.  
  5.       $s1 = "2";
  6.       $s2 = "3";
  7.       echo "<br><br>";
  8.       echo "$s1 , $s2 <br><br>";
  9.  
  10.       // Nos devuelve dos string
  11.       echo gettype($s1);
  12.       echo " , ";
  13.       echo gettype($s2);
  14.       echo "<br>";
  15.  
  16.       $suma1 = $s1+$s2;
  17.       echo $suma1;
  18.       echo "<br>";
  19.  
  20.       // Ahora los convertimos a integer
  21.       $s1 = (int) $s1;
  22.       $s2 = (int) $s2;
  23.  
  24.       // Esto devuelve dos integer
  25.       echo gettype($s1);
  26.       echo " , ";
  27.       echo gettype($s2);
  28.       echo "<br>";
  29.       $suma1 = $s1+$s2;
  30.       echo $suma1;
  31.  
  32.       }
  33.  
  34.       suma();
  35.  
  36. ?>
  37.  
Puedes copiar el código y probarlo haciendo las rectificaciones que quieras.


En el ejemplo de dark, si haces

Código
  1. <?php
  2.   $dato = "a";
  3.     $dato = (int) $dato;
  4. ?>

$dato sería de tipo integer y valdría 0.
« Última modificación: 22 Diciembre 2011, 20:38 pm por ZHOSS-9 » En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: Problema con (int)
« Respuesta #5 en: 22 Diciembre 2011, 22:48 pm »

Sí, esas 'soluciones' ya las conozco y es las que utilizo, al igual que utilizo una función para FLOAT que además de volverte FLOAT te mira si han puesto coma en vez de punto, etc... además luego te la redondea a dos decimales así que por mucho código que metan es imposible que te hagan un XSS o SQLi.

Código
  1. function limpia_num($str){
  2. if(strpos($str, '.') < strpos($str,',')){
  3. $str = str_replace('.','',$str);
  4. $str = strtr($str,',','.');          
  5. }else{
  6. $str = str_replace(',','',$str);          
  7. };
  8. $str=(float)$str;
  9. $str=round($str,2);
  10.  
  11. return $str;
  12. };

Se le llama así:
Código
  1. <?php
  2. echo(limpia_num($_GET['ID']));
  3. ?>



El problema es que los informáticos (como todos), cometen errores y pueden olvidarse de usar la función en algún momento. Por eso estaría genial que se pudiera crear un INT que no si le meten texto diera 0.
En línea




Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema BlueZScanner y problema de conexión
Hacking Mobile
Kasswed 3 6,277 Último mensaje 6 Mayo 2006, 22:04 pm
por Gospel
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines