Foros del Web » Programando para Internet » PHP »

sobre las funciones

Estas en el tema de sobre las funciones en el foro de PHP en Foros del Web. yo tengo esta funcion que estoy haciendo, sirve para generar errores dentro de mi script, 1º. le digo que error es: $nErr=2 2º. le digo ...
  #1 (permalink)  
Antiguo 23/10/2003, 05:27
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
Pregunta sobre las funciones

yo tengo esta funcion que estoy haciendo, sirve para generar errores dentro de mi script,

1º. le digo que error es: $nErr=2
2º. le digo el texto que tiene que cargar para mostrar en ventana emergente: $textInfo=$langError2
3º. cargo los datos de conexion, para introducir un registro en la base de datos con el suceso ocurrido, lo que se almacena es lo mismo que saco por pantalla.

Código PHP:

<?php
    $html
->setCache('cache/windowSimpleConfirmarKillerOk'2);
    
$html->cargar('windowSimpleRefresTemplate','windowSimpleRefres.tpl');
    
$html->definirBloque('bloqueWindowSimpleRefresTemplate''windowSimpleRefresTemplate');

    
$html->asignar('accionWinSimple',"index.php?menuSistem=administratorPanelTemplate");//variable que lleva la accion de los 20 segundos

    
$id $_GET['id'];
    if (
$id=="") {//si la variable llega vacia error
            
FUNC_Error($nErr=2,$textInfo=$langError2,$sql_host=$sql_host,$sql_usuario=$sql_usuario,$sql_pass=$sql_pass,$sql_db=$sql_db,$sql_tabla_sucesos=$sql_tabla_sucesos);//comprobar si la variable esta vacia
        
exit;
   }

    
$comprobarExiste1Registro mysql_query("SELECT id FROM $sql_tabla_color_dll") or die("MySQL dice: ".mysql_error());//compruebo cuantos registros hay
    
$existe1Reg mysql_num_rows ($comprobarExiste1Registro);//paso el numero de registros
    
mysql_free_result($comprobarExiste1Registro);//libero memoria
    
if ($existe1Reg == 1){//no se puede borrar el ultimo registro
            
FUNC_Error($nErr=10,$textInfo=$langError10,$sql_host=$sql_host,$sql_usuario=$sql_usuario,$sql_pass=$sql_pass,$sql_db=$sql_db,$sql_tabla_sucesos=$sql_tabla_sucesos);//siempre 1 registro, no borrar ultimo
        
exit;
    }

    
mysql_query("DELETE FROM $sql_tabla_color_dll WHERE id=$id") or die("MySQL dice: ".mysql_error());//eliminar template
    
echo "<META HTTP-EQUIV=Refresh CONTENT=1;URL=index.php?menuSistem=administratorPanelTemplate>";

    
$html->asignar('TIEMPO_CAPTURADO'date('H:m:s',time()));
    
$html->asignarDinamico('TIEMPO_REAL'date('H:m:s',time()));
    
$html->expandir('muestraMenuBody''bloqueWindowSimpleRefresTemplate');
?>
yo en todo esto lo veo bien, menos una cosa... ... pq tengo que meter las variables de conexion una a una .... se que si no lo hago no funciona la insercion del registro con mysql...

... se puede hacer algo para pasar de 1 vez todas las variables que necesite... esq el problema esta, si algun dia quiero añadir mas variables, y me tendria que modificar todos los ficheros...

quien tiene una idea? gracias


se me pasoo... esta es la funcion.

Código PHP:
<?php
    
function FUNC_Error($nErr,$textInfo,$sql_host,$sql_usuario,$sql_pass,$sql_db,$sql_tabla_sucesos){//FUNC_Error($nErr=1,$textinfo=$langError1);
        
echo "<body bgcolor=black>";
            for (
$generaErrAuto=1;$generaErrAuto<15+1;$generaErrAuto++) {//genero funcion errores dinamica con un bucle
                
switch ($nErr){
                case 
$generaErrAuto$this->error $textInfo; break;
                default: 
$this->error $textInfo; break;
                }
//salgo del swhtch
            
}//salgo del for
        
mysql_query("INSERT INTO $sql_tabla_sucesos values('','$textinfo',NOW())") or die("MySQL dice: ".mysql_error());

echo <<< HTML
<SCRIPT> alert("$this->error"); </SCRIPT>
<script languaje="javascript">
setTimeout ("history.back()", 1);
</script>
HTML;
}
?>
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 23/10/2003 a las 05:44
  #2 (permalink)  
Antiguo 23/10/2003, 05:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Una pregunta, ¿existe alguna razon para que tengas que poner en los parametros $textInfo=$langError2 al llamar a la funcion? Es que no veo que uses $textInfo en ningun otro sitio que en los parametros.

Tu llamda a la funcion podria ser simplemente:
Código PHP:
FUNC_Error(2,$langError2,$sql_host,$sql_usuario,$sql_pass,$sql_db,$sql_tabla_sucesos); 
Luego, en esa funcion no veo que se use $sql_host,$sql_usuario,$sql_pass,$sql_db. Al menos no en el codigo que muestras.

Y en el nombre de la tabla siempre va a ser el mismo a nivel de aplicacion, o por lo menos en la mayor parte de las llamadas. Podrias usar un valor por defecto para ese parametro. Simplemente haces:
Código PHP:
    function  FUNC_Error($nErr,$textInfo,$sql_host,$sql_usuario,$sql_pass,$sql_db,$sql_tabla_sucesos="tabla"){// 
En lugar de tabla pones el nombre de la tabla que usas. Y asi podras llamarla de esta forma:
Código PHP:
FUNC_Error(2,$langError2,$sql_host,$sql_usuario,$sql_pass,$sql_db); 
cuando quieras guardarlo en esa tabla.

Aunque tambien deberias replantearte un rediseño de esas funciones. Porque el script principal no deberia ser el que debe decirle a los datos de conexion. Si son fijos para la aplicacion, los deberias poner dentro de la funcion con variables con valor fijo. Asi el script solo tiene que decirle a la funcion "graba este error", pasandole solo los 2 primeros parametros.

Tambien podrias mirar a dar el siguiente paso, usar clases. Con las clases puedes mantener el estado de tu logger. Y ese estado servira para almacenar los datos de conexion.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 23/10/2003, 06:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y otro detalle más .. "normalización" .. Si esos mensajes de error son "predefinidos" .. deberías guardarte en tu "log" sólo los identificadores del mensaje de error producido (el "ID") y en una tabla única los mensajes de errores asociados para que al presentar tu "log" puedas hacer una consulta a esa mini-tabla de "mensajes de error" y mostrar su "texto" correspondiente. Esto te ahorrará muchoooo espacio en tu BD (siempre y cuando los errores sean pre-definidos .. si hay que "logear" mensajes de error como por ejemplo los que pueda dar algo dinámicamente como una llamada a mysql_error() ahí no serviría este metodo .. mm Bueno, si, algo podría hacerse porque tienes mysql_num_error() o algo así que te dá el código del error de Mysql nº y la referencia de esos nº la tienes en Mysql.com)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 23/10/2003, 06:05
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
buaaa, con lo que me has dicho ya tengo para toda la semana... juas, juas,,, gracias por la aclaracion, voy a ver si lo pongo en practica...

sobre las classes... uff, acavo de medio aprender las funciones... y como ves, aun necesitaba este toke de ayuda q me acavas de dar...

... pero las classes son muuu complicadas para mi aun. ;)

... continuo...

umm Cluster, buenas , si los mensajes son tipo:

Código PHP:
$html->asignar('langError1',"Error 1: Error porque faltan datos, rellenalo correctamente.");
$html->asignar('langError2',"Error 2: Error porque faltan datos o no son correctos.");
$html->asignar('langError10',"Error 10: Error porque no puedes borrar todos, debes dejar 1, haz primero 1 y despues borra."); 
tenia pensado, hacer lo mismo que el de errores, con un bucle, si lo metia en la base de datos, pero demomento esta en un fichero de Idioma, ya veremos que hago al final, si lo meto en la base de datos.... , jejeje tengo que hacer otra plantilla para el formulario, y otros paneles, para modificar esos datos... , juas, juas,,, nunca terminare....

pero tu idea es excelente si, llamarlos por el ID de la base de datos... , voy a pensarlo... pq ya me has liao, juas, juas
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 23/10/2003 a las 06:13
  #5 (permalink)  
Antiguo 23/10/2003, 08:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ahí se complica un poco el "modelo de datos" si deseas "normalizar" bien tu BD para tener los "id" de los código de error y asociados los mensajes correspondientes en cada idioma ..

Así sin pensarlo mucho podría ser algo tipo:

Codigos de error (tabla ..)
id_cod_error
Descripción (en algún lenguaje solo como referencia ..)

Mensajes de error asociados al código en varios idiomas (tabla)
id_error_msg
id_cod_error
msg_castellano
msg_ingles
msg_otroidioma
msg_etc

Así sería lo más básico .. se puede "normalizar" mucho más.

Lo que guardarías en este caso en tu tabla de "log" sería sólo el ID del codigo de error (id_cod_error) .. A la hora de presentar esos datos de tu log .. tu usuario podría seleccionar el idioma y de ahí ver esos MSG de error en otros idiomas seleccionando el campo msg_$idioma que corresponda .. Todo esto es posible grácias a la relación 1->N de tu código de error con el mensaje a presentar ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 24/10/2003, 11:07
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
ok... gracias por la idea... a ver que puedo hacer... osea el royo es solo guardar el id... de ese error, ok.
__________________
3w.valenciadjs.com
3w.laislatv.com
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:59.