Test Foro de elhacker.net SMF 2.1

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

$ejemplo = $_POST['dato1'];


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

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


¿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 (php) [Seleccionar]
if(isset($_POST['dato1'])){$ejemplo = $_POST['dato1'];}
// o
$ejemplo = (isset($_POST['dato1']) ? $_POST['dato1'] : null);


Aunque también puedes quitar los errores del tipo NOTICE con
Código (php) [Seleccionar]
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 (php) [Seleccionar]

$var = 0;
// Se evalúa a true ya que $var está vacia
if (empty($var)) {
    echo '$var es o bien 0, vacía, o no se encuentra definida en absoluto';
}


CitarDevuelve 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 (php) [Seleccionar]

$usuario = $_POST['user'];

if(isset($usuario) && strlen($user)>0){


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
CitarTambien 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 (php) [Seleccionar]
if((empty($_GET['dato1'])&&@$_GET['dato1']!=='0')){
 die('No has declarado la variable, negro');
}


o funciones para reutilizar...

Código (php) [Seleccionar]
<?php
function empti(){
   foreach(
func_get_args() as $arg){
      if(!isset(
$arg)){return true;}
      elseif(!
is_array($arg)&&!is_object($arg)&&!is_numeric($arg)){
         
$long = (function_exists('mb_strlen') ? mb_strlen($arg) : strlen($arg));
         if(
$long>0){continue;}else{return true;}
      } elseif(
is_numeric($arg)||is_int($arg)){
         continue;
      } else {
         if(empty(
$arg)){return true;}else{continue;}
      }
   }
   return 
false;
}


$arr = array(); $arr2 = array(5);
$str ''$str2 '1';
$int 0$int2 1;
$var null$var2 false;

var_dump(empti($arr)); echo '<br />'var_dump(empti($arr2)); echo '<br />';
var_dump(empti($str)); echo '<br />'var_dump(empti($str2)); echo '<br />';
var_dump(empti($int)); echo '<br />'var_dump(empti($int2)); echo '<br />';
var_dump(empti($var)); echo '<br />'var_dump(empti($var2)); echo '<br />';

// Acepta cuantos parametros le pases, si alguno de ellos esta vacio, devueve true.
var_dump(empti($arr,$arr2,$str,$str2,$int,$int2,$var,$var2));
?>


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

Saludos