WAMP by RedRaven
WAMP: PHP


PHP. Índice de trucos, ideas, tips ...    


1.- Cada POST individual. De $_POST a cada uno de sus componentes concretos.
2.- Función debugSystemMonitor(). Para ver todos los POST´s ó GET´s recibidos de una sola tacada.
3.- Función rem(). Depurando es un gerundio que nos hace mucha falta.
4.- Warning: session_start() Cannot send session cookie Cualquier caracter vale para causar este error de PHP

PHP3

 Cada POST individual. De $_POST a cada uno de sus componentes concretos.

   La estructura básica de un módulo PHP que "edita" un registro de una tabla, le forma que yo he adoptado, consiste en general en las siguientes tareas sucesivas (en orden de ejecución, de arriba a abajo) : 

  Recupero Datos recibidos vía POST.
  Si no hay POST{
    Leo BDD y/o Asigno valores iniciales si procede.
  }
  Si hay POST{
    Compruebo si hay Errores.
    Si no hay Errores{
       Actualizo datos en BDD.
    }
    Si hay Errores{
       Marco los errores encontrados.
    }
  }
  Presento form con los distintos edit
  
   Con respecto al primer punto, Recupero Datos recibidos vía POST, a mi me gusta trabajar con variables individuales, no hacer referencia directa a los valores recibidos vía $_POST (Recordad que si tenemos un input cuyo "name" es MiEdit recibiremos el valor tecleado en el mismo dentro de la variable $_POST["MiEdit"]). 

   A mi me gusta recoger $_POST["MiEdit"] sobre $MiEdit y trabajar con ésta última variable, así ademas si tengo que manipularla por cualquier causa tendré disponible el original $_POST["MiEdit"] y podría, caso de ser necesario, manipularla de nuevo, recuperarla ... etc. 

   La vía mas directa sería escribir simplemente: 

$MiEdit = $_POST["MiEdit"];

   Para una sola variable (ó dos, ó tres) no es mala opción, pero si tenemos formularios con docenas de edit´s (yo los tengo) puede ser un trabajo lento y farragoso. No solo escribirlos la primera vez, sino también si simplemente le cambiamos el "name" a uno de ellos se nos queda obsoleta automáticamente la asignación y tenemos que cambiarla también. 

   Mi solución para esto es montar un "variabilizador automático de los POST recibidos": o sea crear automáticamente una variable cuyo nombre sea el "name" del Edit y cuyo valor sea el recibido vía $_POST. 

   Éste código PHP hace exactamente eso: 

    /** Recupero Variables enviadas por POST ***/
    $mynpost  = count($_POST);            // cuento las variables que hay
    $mytags   = array_keys($_POST);       // obtiene los nombres de las variables
    $myvalues = array_values($_POST);     // obtiene los valores de las variables
    // crea las variables y les asigna el valor
    for($i=0;$i<$mynpost;$i++){ 
      $$mytags[$i]= trim(strtoupper($myvalues[$i]));
      $tmp=$mytags[$i].'_E';
      $$tmp='';
    } // for($i=0;$i<$mynpost;$i++)

   Antes de ejecutarse este código sólo tengo una variable $_POST, tras él tengo las misma $_POST y tantas variables individuales como hayan sido recibidas vía POST, cada una con su valor correspondiente. 

    

   Volver 

PHP1

 Función debugSystemMonitor(). Para ver todos los POST´s ó GET´s recibidos de una sola tacada.

   Cuando estamos trabajando con páginas que reciben valores vía POST ó GET tenemos la necesidad de saber exactamente qué valores son los que realmente estamos recibiendo cada vez que se ejecuta nuestro script PHP. 

   Para poder automatizar este monitoreo de los valores recibidos vía POST ó GET me he construido una pequeña función que explota dos características de PHP:  

   1.- Que PHP me envía todos los valores POST y GET mediante dos variables llamadas $_POST y $_GET que son del tipo Array y ... 

   2.- Que PHP permite crear variables creando su nombre mediante el contenido de otra variable. 

   Con estos dos recursos hago un bucle que recorre todos los valores del Array que le pase a la función (ya sea $_POST o sea $_GET) y extraigo de cada uno de ellos el nombre y el valor y creo una variable local con el nombre extraido y le asigno el valor correspondiente. 

   Después solo tengo que mostrar esos nombres y valores mediante una tabla. 

   La función completa es: 

  /* Monitoriza todos los post recibidos en una página */
 
  function debugSystemMonitor($title,$arrayvars){
    /* Recupero Variables almacenadas en arrayvars */
    $mynarrayvar  = count($arrayvars);        // cuento las variables que hay
    $mytags   = array_keys($arrayvars);       // obtiene los nombres de las variables
    $myvalues = array_values($arrayvars);     // obtiene los valores de las variables
    for($i=0;$i<$mynarrayvar;$i++){           // crea las variables y les asigna el valor
      $$mytags[$i]=$myvalues[$i];
    }
    echo($title);
    for($i=0;$i<$mynarrayvar;$i++){
      echo($i." ".$mytags[$i]." ".$$mytags[$i]);
    }
  }
 
   Para llamarla solo tenemos que hacerlo con 

  debugSystemMonitor("Mis POST",$_POST);
  debugSystemMonitor("Mis GET",$_GET);
 
   Probadlo y vereis como la depuración de vuestros scripts PHP es mucho más fácil. 

   Volver 

PHP2

 Función rem(). Depurando es un gerundio que nos hace mucha falta.

   En el mismo sentido que casi todos nuestros tip´s, éste es muy útil también a la hora de depurar nuestros scripts PHP. 

   Hay innumerables ocasiones en que tenemos que comprobar qué valor tiene tal o cual variable, yo por ejemplo quiero saber exactamente qué contenido tiene cada script MySQL que ejecuto, pero no deseamos que aparezcan visualmente en la pantalla del navegador. 

   Para ello me he construido una pequeñísima función que simplemente "comenta" en HTML el contenido de lo que le envíe y lo inserta en el código HTML que sirve mi Apache. Esta función no puede ser mas simple ... ni mas útil: 

  /**
  * Vuelca como comentario un texto
  */
  function rem($content){
    echo ("\r\n");
    echo ("");
    echo ("\r\n");
  }
     

   Así cuando si tengo un script MySQL que voy a ejecutar en una variable llamada $sql puedo ver su contenido llamando antes a rem(): 

  $sql="SELECT ver_c_version FROM versiones ORDER by ver_c_version DESC";
  rem($sql);
  $resultado=$DB->consulta($sql);
     

   Después de ejecutada desde mi página en el navegador miro el código fuente HTML que éste ha procesado y en él me encuentro el contenido exacto de la consulta realizada: 

< !--- SELECT ver_c_version FROM versiones ORDER by ver_c_version DESC --- >
     

    Y esto es válido para cualquier contenido que deseemos ir monitorizando. No olvideis quitar estos rastros de vuestra página cuando las pongáis en explotación, no es cuestión de ir dándole información grátis de estos temas a posibles visitantes malintencionados. 

   Lo suyo es hacer que rem() dependa de una variable global del estilo $debug=true; que podemos activar/desactivar fácilmente. 

  /**
  * Vuelca como comentario un texto
  */
  function rem($content){
    global debug;
    if(debug){
      echo ("\r\n");
      echo ("");
      echo ("\r\n");
    }
  }
   Volver 

PHP4

 Warning: session_start() Cannot send session cookie Cualquier caracter vale para causar este error de PHP

   Error PHP: Warning: session_start() Cannot send session cookie  

    

   Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by 

   Warning: session_start(): Cannot send session cache limiter - headers already sent 

    

   Primer Motivo 

   Este error se presenta habitualmente porque en el script PHP existen espacios o caracteres extraños antes o después del código PHP. 

   Para solucionarlo, debe revisar que no existan espacios, saltos de línea o caracteres antes de: 

    

   
   (donde comienza el script PHP) 

   Y que no existan también después de: 

   ?> 

   (donde finaliza el script o archivo PHP) 

    

   Incluso esa etiqueta de cierre de código se puede omitir, no es necesaria. 

   Esto debe hacerse en el script que está generando el error. Sabrá cuál es pues el mensaje de advertencia menciona el script o archivo que está generando el error. 

    

   Segundo motivo 

    

   En algunas ocasiones el error puede aparecer porque la configuración de PHP en el servidor tiene activa (en On) la directiva display_errors 

   Al apagar (poner en Off) la directiva display_errors, el error puede desaparecer. Esta directiva se puede modificar mediante un archivo .htaccess o php.ini. Mediante .htaccess, se puede hacer poniendo una línea de este modo: 

   php_value display_errors "Off" 

    

   Tercer Motivo 

    

   session_start() debe ser ejecutado antes de cualquier salida HTML porque envía headers HTTP al navegador. Pida a un desarrollador en PHP que edite el código para solucionarlo.  

   Volver 


Visitas
Totales : 3786 Hoy: 2 Activas: 1 Vistas: 3786

Esta página fue modificada el 07-08-2010 15:44:04

           
 DmSoft PicManía Escribir Unreal