Problema con (int)

Iniciado por dimitrix, 22 Diciembre 2011, 02:05 AM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

Tengo el siguiente código:

Código (php) [Seleccionar]

<?php
 
(int)$suma;
 
$suma="a";
 echo(
$suma);
?>


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?




dark_sargon

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

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.




dark_sargon

#3
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 (php) [Seleccionar]
<?php
  $dato 
"a";
  if(
gettype($dato)=="integer"){
    
$suma $dato;
    echo 
$suma;
  }else{
    echo 
"El dato debe ser un n&uacute;mero entero.";
  }
?>
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

#4
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 (php) [Seleccionar]
<?php

       
function suma() {
       
       
$s1 "2";
       
$s2 "3";
       echo 
"<br><br>";
       echo 
"$s1 , $s2 <br><br>";
       
       
// Nos devuelve dos string 
       
echo gettype($s1);
       echo 
" , ";
       echo 
gettype($s2);
       echo 
"<br>";
       
       
$suma1 $s1+$s2;
       echo 
$suma1;
       echo 
"<br>"
       
       
// Ahora los convertimos a integer
       
$s1 = (int) $s1;
       
$s2 = (int) $s2;
       
       
// Esto devuelve dos integer
       
echo gettype($s1);
       echo 
" , ";
       echo 
gettype($s2);
       echo 
"<br>";
       
$suma1 $s1+$s2;
       echo 
$suma1;
       
       }
       
       
suma();

?>


Puedes copiar el código y probarlo haciendo las rectificaciones que quieras.


En el ejemplo de dark, si haces

Código (php) [Seleccionar]
<?php
   $dato 
"a";
     
$dato = (int) $dato;
?>


$dato sería de tipo integer y valdría 0.

dimitrix

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 (php) [Seleccionar]
function limpia_num($str){
if(strpos($str, '.') < strpos($str,',')){
$str = str_replace('.','',$str);
$str = strtr($str,',','.');           
}else{
$str = str_replace(',','',$str);           
};
$str=(float)$str;
$str=round($str,2);

return $str;
};


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





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.