Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: #Aitor en 31 Diciembre 2013, 22:16 pm



Título: Mensajes de error en PHP
Publicado por: #Aitor en 31 Diciembre 2013, 22:16 pm
¡Hola familia! (Qué cutre quedó esto)

Una preguntita muy simple.

Un formulario, que envia los datos a traves de PHP, metodo POST (Aunque esto último es irrelevante supongo).

Almaceno lo introducido en el formulario en una variable.

Código
  1. $ejemplo = $_POST['dato1'];
  2.  

Si yo me salto la url donde está el formulario, y me voy directamente al .php, la variable $ejemplo no está definida, y PHP tira este error.

Código
  1. Notice: Undefined index: user in C:\xampp1\htdocs\PHP\Pruebas\bd.php on line 5
  2. Campos vacios
  3.  

¿Cómo evito que PHP muestre los errores a todo el quisqui que entre ahí? O en concreto ése error.

Primero, porque queda feo.
Segundo, porque estoy dando información al usuario, como que en la linea 5 hay algo que no está definido...

Un saludo, y... ¿Feliz 2014? 2 horitas ;_;



Título: Re: Mensajes de error en PHP
Publicado por: #!drvy en 31 Diciembre 2013, 22:24 pm
Lo mas normal es comprobar si la variable en cuestion esta declarada.

Código
  1. if(isset($_POST['dato1'])){$ejemplo = $_POST['dato1'];}
  2. // o
  3. $ejemplo = (isset($_POST['dato1']) ? $_POST['dato1'] : null);

Aunque también puedes quitar los errores del tipo NOTICE con
Código
  1. error_reporting(E_ALL ^ E_NOTICE);

Saludos


Título: Re: Mensajes de error en PHP
Publicado por: EFEX en 31 Diciembre 2013, 22:33 pm
Tambien se puede utilizar empty()

Código
  1. $var = 0;
  2. // Se evalúa a true ya que $var está vacia
  3. if (empty($var)) {
  4.    echo '$var es o bien 0, vacía, o no se encuentra definida en absoluto';
  5. }
  6.  

Citar
Devuelve FALSE si var existe y tiene un valor no vacío, distinto de cero. De otro modo devuelve TRUE.

Las siguientes expresiones son consideradas como vacías:

    "" (una cadena vacía)
    0 (0 como un integer)
    0.0 (0 como un float)
    "0" (0 como un string)
    NULL
    FALSE
    array() (un array vacío)
    $var; (una variable declarada, pero sin un valor)
http://php.net/manual/es/function.empty.php

off: Parece que hoy somos 3 en el foro de desarrollo web  :), aqui faltan unas 4 horas.


Título: Re: Mensajes de error en PHP
Publicado por: #Aitor en 31 Diciembre 2013, 22:39 pm
... ¿Matadme?

Mirad el código que tenía.

Código
  1. $usuario = $_POST['user'];
  2.  
  3. if(isset($usuario) && strlen($user)>0){
  4.  

Primero la variable y después la comprobación de si ésta era nula, con razón me salia el mensaje...


Pd: @EFEX yep... Lamento molestar tanto xD

¿4 horas? ¿de dónde eres? por tu forma de escribir diría argentina... *Revisando hora de argentina*  Me equivoqué  :silbar: :silbar:

Gracias a los dos de nuevo.


Título: Re: Mensajes de error en PHP
Publicado por: #!drvy en 31 Diciembre 2013, 23:05 pm
Citar
Tambien se puede utilizar empty()

De hecho yo lo prefiero antes que isset pero el no aceptar el 0 me caga (xD) y a veces tengo que poner mas condiciones estúpidas xD

Código
  1. if((empty($_GET['dato1'])&&@$_GET['dato1']!=='0')){
  2.  die('No has declarado la variable, negro');
  3. }

o funciones para reutilizar...

Código
  1. <?php
  2. function empti(){
  3.   foreach(func_get_args() as $arg){
  4.      if(!isset($arg)){return true;}
  5.      elseif(!is_array($arg)&&!is_object($arg)&&!is_numeric($arg)){
  6.         $long = (function_exists('mb_strlen') ? mb_strlen($arg) : strlen($arg));
  7.         if($long>0){continue;}else{return true;}
  8.      } elseif(is_numeric($arg)||is_int($arg)){
  9.         continue;
  10.      } else {
  11.         if(empty($arg)){return true;}else{continue;}
  12.      }
  13.   }
  14.   return false;
  15. }
  16.  
  17.  
  18. $arr = array(); $arr2 = array(5);
  19. $str = ''; $str2 = '1';
  20. $int = 0; $int2 = 1;
  21. $var = null; $var2 = false;
  22.  
  23. var_dump(empti($arr)); echo '<br />'; var_dump(empti($arr2)); echo '<br />';
  24. var_dump(empti($str)); echo '<br />'; var_dump(empti($str2)); echo '<br />';
  25. var_dump(empti($int)); echo '<br />'; var_dump(empti($int2)); echo '<br />';
  26. var_dump(empti($var)); echo '<br />'; var_dump(empti($var2)); echo '<br />';
  27.  
  28. // Acepta cuantos parametros le pases, si alguno de ellos esta vacio, devueve true.
  29. var_dump(empti($arr,$arr2,$str,$str2,$int,$int2,$var,$var2));
  30. ?>

Se me olvido que tambien puedes silenciar el error mediate @. Ejemplo
Código
  1. $ejemplo = @$_POST['dato1'];

Saludos