Foros del Web » Programando para Internet » PHP »

capturar errores

Estas en el tema de capturar errores en el foro de PHP en Foros del Web. Hola amigos les cuento como puedo capturar errores en php, trabajo con una base de datos sql server en windows pero me conecto atraves de ...
  #1 (permalink)  
Antiguo 01/04/2002, 17:05
 
Fecha de Ingreso: enero-2002
Ubicación: Stgo.
Mensajes: 60
Antigüedad: 15 años, 10 meses
Puntos: 0
capturar errores

Hola amigos les cuento como puedo capturar errores en php, trabajo con una base de datos sql server en windows pero me conecto atraves de un servidor linux redhat 7.2 con php, como puedo capturar el error al insertar un registro duplicado en la base de datos, para luego avisarle al usuario que ese registro ya existe.
  #2 (permalink)  
Antiguo 01/04/2002, 17:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Re: capturar errores

Puedes hacer dos cosas:
haces la consulta con un "or die("error que tu digas"). En el mismo die() podrias enviarlo con un Header("location: error.php") a una pagina de errores...

seira algo asi:
mssql_query("SQL") or die("error que tu digas")

es decir .. ejecutar la funcion y añadir or die() .. esto termina el proceso del scrit ante un error de la consulta.

El otro metodo (no muy util ... pues SQL server ya soporta de por si integridad referencial) seria; haces la consulta del dato a actualizar .. si el resultado es mayor que 0 .. entonces existe .. si es =0 ejecutas el query (consulta) y añades el registro nuevo.

Un saludo,
  #3 (permalink)  
Antiguo 01/04/2002, 23:08
Avatar de AngelRoyo  
Fecha de Ingreso: marzo-2002
Ubicación: Santiago de Chile
Mensajes: 207
Antigüedad: 15 años, 8 meses
Puntos: 5
Re: capturar errores

Existen 3 tipos de errores.
1- El fatal error. Interrumpe el script.
2- Warning. No lo interrumpe.
3- Notice. No lo interrumpe y por defecto no dice nada.

Para capturar errores se utiliza set_error_handler("un_nombre");

Consulta por eso "set_error_handler" en el manual ese es un metodo potente.
Yo personalmente no lo he ocupado, Uso cosas como dice mi amigo CLuster o colocar el @ antes de "mysql_db_query" por ejemplo. Esto, más bien es para cosas grandes, según se dice.
Pero no esta demás qué se de a conocer, quizas a alguien le sirva :).

Saludos Angel.
  #4 (permalink)  
Antiguo 11/10/2005, 04:13
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
Pregunta

Yo estoy usando el ejemplo que trae el manual en una clase y en ningun momento entra en la funcion de gestion de errores.

En el constructor de la clase inicializo:
Código PHP:
error_reporting(E_USER_ERROR E_USER_WARNING E_USER_NOTICE);    
// establecer el gestor de errores definido
$this->gestor_errores_anterior set_error_handler("miGestorErrores"); 
Mi funcion de gestion de errores es:
Código PHP:
function miGestorErrores($num_err$cadena_err$archivo_err$linea_err){
        switch (
$num_err) {
            case 
E_USER_ERROR:
            echo 
"<b>Mi ERROR</b> [$num_err] $cadena_err<br />\n";
            echo 
"  Error fatal en la linea $linea_err del archivo $archivo_err";
            echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
            echo 
"Abortando...<br />\n";
            exit(
1);
            break;
            case 
E_USER_WARNING:
            echo 
"<b>Mi ADVERTENCIA</b> [$num_err] $cadena_err<br />\n";
            break;
            case 
E_USER_NOTICE:
            echo 
"<b>Mi NOTICIA</b> [$num_err] $cadena_err<br />\n";
            break;
            default:
            echo 
"Tipo de error desconocido: [$num_err] $cadena_err<br />\n";
            break;
        }
    } 
y en una funcion de esta clase hago esto:
Código PHP:
if($noticia==null){
            
trigger_error("No existe la noticia",E_USER_ERROR);
        } 
Y en pantalla me sale (cuando provoco el error):
Fatal error: No existe la noticia in .....
Osea que no entra en la funcion. ¿Alguien me puede echar una mano?
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #5 (permalink)  
Antiguo 11/10/2005, 04:43
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Cita:
$this->gestor_errores_anterior = set_error_handler("miGestorErrores");
¿Pero estas haciendolo dentro de una clase o esque has sacado eso de una clase?

Prueba esto:
Código PHP:
<?php
error_reporting
(E_USER_ERROR E_USER_WARNING E_USER_NOTICE);
function 
miGestorErrores($num_err$cadena_err$archivo_err$linea_err)
{
    switch(
$num_err)
    {
    case 
E_USER_ERROR:
        echo 
"<b>Mi ERROR</b> [$num_err] $cadena_err<br />\n";
        echo 
"  Error fatal en la linea $linea_err del archivo $archivo_err";
        echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
        echo 
"Abortando...<br />\n";
        exit(
1);
        break;
    case 
E_USER_WARNING:
        echo 
"<b>Mi ADVERTENCIA</b> [$num_err] $cadena_err<br />\n";
        break;
    case 
E_USER_NOTICE:
        echo 
"<b>Mi NOTICIA</b> [$num_err] $cadena_err<br />\n";
        break;
    default:
        echo 
"Tipo de error desconocido: [$num_err] $cadena_err<br />\n";
        break;
    }
}
set_error_handler("miGestorErrores");

trigger_error('Error algo de lo que sea xD'E_USER_WARNING);
?>
  #6 (permalink)  
Antiguo 11/10/2005, 06:48
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
Todo esta dentro de una clase que estoy haciendo y las sentecias:
Código PHP:
error_reporting(E_USER_ERROR E_USER_WARNING E_USER_NOTICE);     
// establecer el gestor de errores definido 
$this->gestor_errores_anterior set_error_handler("miGestorErrores"); 
laa tengo en el constructor de mi clase.
Luego en mi clase tengo una funcion:
Código PHP:
function miGestorErrores($num_err$cadena_err$archivo_err$linea_err)
{
    switch(
$num_err)
    {
    case 
E_USER_ERROR:
        echo 
"<b>Mi ERROR</b> [$num_err] $cadena_err<br />\n";
        echo 
"  Error fatal en la linea $linea_err del archivo $archivo_err";
        echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
        echo 
"Abortando...<br />\n";
        exit(
1);
        break;
    case 
E_USER_WARNING:
        echo 
"<b>Mi ADVERTENCIA</b> [$num_err] $cadena_err<br />\n";
        break;
    case 
E_USER_NOTICE:
        echo 
"<b>Mi NOTICIA</b> [$num_err] $cadena_err<br />\n";
        break;
    default:
        echo 
"Tipo de error desconocido: [$num_err] $cadena_err<br />\n";
        break;
    }

Y desde otra funcion, de esta misma clase mia, hago:
Código PHP:
if($noticia==null){ 
            
trigger_error("No existe la noticia",E_USER_ERROR); 
        } 
Perdona si no me explique bien antes
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #7 (permalink)  
Antiguo 21/10/2005, 05:13
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 14 años, 3 meses
Puntos: 4
Pregunta

Nadie sabe porque ocurre?. Os pongo el trozo de codigo que estoy probando para que os orienteis:
Código PHP:
class Portal{
var 
$gestor_errores_anterior;
function 
Portal(){
        
error_reporting(E_USER_ERROR E_USER_WARNING E_USER_NOTICE);    
        
// establecer el gestor de errores definido
        
$this->gestor_errores_anterior set_error_handler("miGestorErrores");
    }
    
    
/**
     * Funcion para la gestion de errores
     *
     * @param int $num_err Numero de error
     * @param string $cadena_err Texto de error
     * @param string $archivo_err El nombre del archivo que dio el error
     * @param int $linea_err El nº de linea que dio el error
     */
    
function miGestorErrores($num_err$cadena_err$archivo_err$linea_err){
        switch (
$num_err) {
            case 
E_USER_ERROR:
            echo 
"<b>Mi ERROR</b> [$num_err] $cadena_err<br />\n";
            echo 
"  Error fatal en la linea $linea_err del archivo $archivo_err";
            echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
            echo 
"Abortando...<br />\n";
            exit(
1);
            break;
            case 
E_USER_WARNING:
            echo 
"<b>Mi ADVERTENCIA</b> [$num_err] $cadena_err<br />\n";
            break;
            case 
E_USER_NOTICE:
            echo 
"<b>Mi NOTICIA</b> [$num_err] $cadena_err<br />\n";
            break;
            default:
            echo 
"Tipo de error desconocido: [$num_err] $cadena_err<br />\n";
            break;
        }
    }
function 
getPaginaIndex(){
    if(
$noticia==null){
            
//Esto siempre estra
            
trigger_error("No existe la noticia",E_USER_ERROR); 
        }    
    }
}

$portal=new Portal();
$portal->getPaginaIndex(); 
El caso es que nunca entra en la funcion "miGestorErrores".

Estas pruebas las he hecho con las funciones fuera de una clase y funciona perfectamente.

¿Alguien sabe porque?.

Gracias por la ayuda.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:01.