Foros del Web » Programando para Internet » PHP »

header 303 y proicesamiento previo de información

Estas en el tema de header 303 y proicesamiento previo de información en el foro de PHP en Foros del Web. Muy buenos dias, tengo una serie de dudas e inquietudes sobre el uso de Código: header("Location: http://(direccion IP)/prueba.php",true,303); (1)proceso la sesión y creo el cookie ...
  #1 (permalink)  
Antiguo 22/06/2016, 11:03
 
Fecha de Ingreso: agosto-2015
Ubicación: Colombilandia
Mensajes: 10
Antigüedad: 8 años, 8 meses
Puntos: 0
Información header 303 y proicesamiento previo de información

Muy buenos dias, tengo una serie de dudas e inquietudes sobre el uso de
Código:
header("Location: http://(direccion IP)/prueba.php",true,303);
(1)proceso la sesión y creo el cookie (son para el include('_mod_print_6.php'); al final, es una tabla con ventanas modales no interesa aqui).
(2)Carga cuatro funciones: mostrartitulo(); -- p02(); -- p03; -- reenviar(); luego de que las carga ahi si empieza el código que las utiliza, hace varias tonterias y luego viene un Switch que decide que funcion p02(); o p03(); usar, ya que p02(); es para dos cosas: (a)Registrar quien hizo esa tarea y (b)crear un archivo de texto con una base de datos que luego otro software lo toma e imprime algo de ahi. Y la funcion p03(); solo hace unicamente: Registrar quien hizo la tarea.
Luego tengo reenviar();solo crea el archivo pero NO registra la tarea.

Si se fijan tengo header(); en cada final de funcion y condicion, la idea es que la funcion procese TODA y al finalizar se redireccione a la misma pagina pero limpia de POST's o GET's (por eso uso el 303 en el header)! :) porque ese era el problema que tenia en un origen, ya que esta pagina es "multifuncion" cuando alguien enviaba algo por los formularios de el include quedaba en la "memoria"(post) de la pagina o en la URL (get), cuando alguien ejecutaba algo por la forma aveces no se enviaba porque se procesaba el get o post previo!

Todo eso lo resolví con header() ya que me permite limpiar la pagina al recargarla con solicitud 303 y dejarla sin ningun post o get ahi colgado!

LAS DUDAS:
Ya explicandoles todo eso.. tengo varias dudas:
(1) Aveces no se estan registrando en BD algunas tareas. Y tengo la duda con header(), ya que tengo entendido que header, talvez me equivoco, se ejecuta de inmediato, no importa si el resto de instrucciones ya se hayan ejecuado o no.
(2) Observen que eliminé los headers de p02(); para que aparezca una forma con un boton que envia por post un true que activa al regreso reenviar(); que ya explique su función, pero me pasa que aunque quite header() de la condicion de p02() que muestra ese boton, aun asi nose porque se ejecuta header(), porque se refresca sola y no me muestra el boton.

He de aclarar que las funciones y parametros que hacen que se ejecuten las funciones trabajan al 100%. Osea antes de usar header() si yo leia por segunda vez una etiqueta(osea se repetia un valor unico) se cumple en p02 el mostrar el boton "reenviar", pero ahora ya no lo hace aunque como ya dije, quite header() de la condicion que me muestra ese BOTON.

DISCULPEN DE ANTEMANO EL "PERIODICO"

Código PHP:
<!--código html5 que no interesa explicar aqui-->

<?php
function mostrartitulo($show_id_uni)
{
//no es importante para el caso
}

function 
leer_p02($show_id_uni)
{
  
/* MODULO FRAGMENTACION CODIGO */
  
$id6 = (substr($show_id_uni,-3,4));
  
$id6 intval($id6);
  
$show_id_uni_a = (substr($show_id_uni,2,12));
  
$show_id_short = (substr($show_id_uni_a,0,12));
  
$show_id_short_a = (substr($show_id_short,0,8)); //-->> Opcion 1
  
$año = (substr($show_id_short_a,0,4));
  
$mes = (substr($show_id_short_a,4,2));
  
$dia = (substr($show_id_short_a,6,2));
  
$time $dia.'-'.$mes.'-'.$año;
  
$show_id_short_b=(substr($show_id_short,-4,4)); //  <<--
  
include('_conexion.php');

  
$prohibicion pg_query("SELECT bol_plastificado_send FROM tab_cabeza_prod WHERE date_same = '".$time."' AND id_numerounico = ".$show_id_short_b."");
  
$prohibicionb pg_fetch_array($prohibicion);
  
if (
't' == $prohibicionb['bol_plastificado_send']) {
    
mostrartitulo("Ese código ya fué impreso");

    
//aqui código para reenviar
    
reenviar('f',0);
    echo 
'<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-sm">¿Volver a enviar?</button>

    <div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel">
      <div class="modal-dialog modal-sm">
        <div class="modal-content">
          <div class="modal-header">

            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title" id="myModalLabel">¿Está seguro de volver a enviar este código?</h4>

          </div>
          <div class="modal-body">

            <form class="form-horizontal" action="" method="post" name="leercode_2">
              <fieldset>
                <input type="hidden" name="bol" value="t">
                <input type="hidden" name="show_id_uni" value="'
.$show_id_uni.'">
                <input type="hidden" name="show_id_short" value="'
.$show_id_short.'">
                <button type="button" class="btn btn-default" data-dismiss="modal">No</button>
                <button type="submit" class="btn btn-primary" name="enviar">Sí, enviar</button>
              </fieldset>
            </form>

          </div>
        </div>
      </div>
    </div>'
;
  }else{
    
/* MÓDULO DE REGISTRO DE TAREAS */
    
$show_id_uni_prefix = (substr($show_id_uni,0,2)); 

    
$show_id_uni_a = ($show_id_uni_a.$show_id_uni_prefix); 
    
$consulta pg_query("SELECT fun_preupdater1('".$show_id_uni_a."',".$id6.")"); 
    
$mensaje pg_last_notice($conexion);
 
    
/* MÓDULO DE IMPRESION SEGUNDA ETIQUETA */
    
$consulta2 pg_query("SELECT fun_p02('".$show_id_short."')");
    
$receptor pg_last_notice($conexion);

    
$nombreFichero "p02.txt";
    
$fi fopen("p02/".$nombreFichero ,"a")
    or die(
"Problemas al crear el archivo");

    
fwrite($fi$receptor);
    
fwrite($fi, .PHP_EOL);
    
fclose($fi);
    
//echo 'leerp02 FUNCION else F prohibicion';
    //header("Location: http://10.10.200.11/leer_imprimir_6_v4.php",true,303);  
    //exit();
  
}
}

function 
leer_p03($show_id_uni)
{
  include(
'_conexion.php');
    
/* MÓDULO DE REGISTRO DE TAREAS */
  
$id6 = (substr($show_id_uni,-3,4));
  
$id6 intval($id6);
  
$show_id_uni_a = (substr($show_id_uni,2,12));
  
$show_id_uni_prefix = (substr($show_id_uni,0,2)); 
  
$show_id_uni_a = ($show_id_uni_a.$show_id_uni_prefix); 
  
$consulta pg_query("SELECT fun_preupdater1('".$show_id_uni_a."',".$id6.")"); 
  
$mensaje pg_last_notice($conexion);

  
header("Location: http://10.10.200.11/leer_imprimir_6_v4.php",true,303);  
  exit(); 
}

function 
reenviar($bol,$show_id_short)
{
  if (
't' == $bol) {
    include(
'_conexion.php');
    
/* MÓDULO DE IMPRESION SEGUNDA ETIQUETA */
    
$consulta2_alt pg_query("SELECT fun_p02('".$show_id_short."')");
    
$receptor_alt pg_last_notice($conexion);

    
$nombreFichero "p02.txt";
    
$fi fopen("p02/".$nombreFichero ,"a")
    or die(
"Problemas al crear el archivo");

    
fwrite($fi$receptor_alt);
    
fwrite($fi, .PHP_EOL);
    
fclose($fi);
    
mostrartitulo("Se reenvió el código");

    
header("Location: http://10.10.200.11/leer_imprimir_6_v4.php",true,303);  
    exit(); 
  }elseif (
'f' == $bol OR empty($bol)) {
    
header("Location: http://10.10.200.11/leer_imprimir_6_v4.php",true,303);  
    exit(); 
  }
}
  
echo 
'<form action="" method="post" name="leercode">
<fieldset><center>
  <legend><h2 style="font-family:courier;"><b>REGISTRAR TAREAS & GENERAR ETIQUETA PLASTIFICADO:</b></h2></legend>
  <input autofocus name="id_uni" type="text" id="exampleInputEmail2" style="text-align:left; width:600px; height:75px; font-size:48px; font-family:courier;">
</center></fieldset>
</form>'
;

  if (!empty(
$_POST['id_uni'])) {
    
// -> CODIGO QUE ELIGE LA FUNCION CORRECTA <-

    
$show_id_uni $_POST['id_uni'];
    
$show_id_uni_a = (substr($show_id_uni,2,12));
    
$show_id_uni_prefix = (substr($show_id_uni,0,2));

    
mostrartitulo($show_id_uni);

    
$siete '07';
    
$seis '06';
    
$cinco '05';
    
$cuatro '04';
    
$tres '03';
    
$dos '02';

    if (empty(
$show_id_uni)) {
      
mostrartitulo("Lea el código");
    }else{
        switch (
$show_id_uni_prefix) {
          case 
$siete//plastificado
              
mostrartitulo("Tarea de plastificado/Imprimiendo");
              
leer_p02($show_id_uni);
            break;
          case 
$seis//plastificado
              
mostrartitulo("Tarea de plastificado/Imprimiendo");
              
leer_p02($show_id_uni);
            break;
          case 
$cinco//cerrado
              
leer_p03($show_id_uni);
              
mostrartitulo("Tarea NO es de plastificado/No imprimir");
            break;
          case 
$cuatro//chuzado 
              
leer_p03($show_id_uni);
              
mostrartitulo("Tarea NO es de plastificado/No imprimir");
            break;
          case 
$tres//chuzado
              
leer_p03($show_id_uni);
              
mostrartitulo("Tarea NO es de plastificado/No imprimir");
            break;
          case 
$dos//costura
              
leer_p03($show_id_uni);
              
mostrartitulo("Tarea NO es de plastificado/No imprimir");
            break;
        }
    }
  }elseif (!empty(
$_POST['bol'])) {
      
$show_id_short $_POST['show_id_short'];
      
reenviar($_POST['bol'],$show_id_short);
  }

include(
'_mod_print_6.php');
?>

<!--mas código html5-->
  #2 (permalink)  
Antiguo 22/06/2016, 13:27
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: header 303 y proicesamiento previo de información

No me termina de quedar claro cual es tu problema la verdad o si te da algún error en concreto.

Lo que si veo que haces mal el uso de header.
Del manual

Cita:
Recuerde que header() debe ser llamado antes de mostrar nada por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP. Es un error muy común leer código con funciones como include o require, u otro tipo de funciones de acceso de ficheros que incluyen espacios o líneas en blanco que se muestran antes de llamar a la función header(). Sucede el mismo problema cuando se utiliza un solo fichero PHP/HTML.
No puedes hacer lo siguiente como ocurre en tu código.

Código PHP:
Ver original
  1. echo 'Lo que sea...';
  2. header ('lo que sea');

Por lo tanto primero deberás determinar que cabecera ( header ) tienes que utilizar, y luego mostrar todo lo demás.
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 22/06/2016, 14:04
 
Fecha de Ingreso: agosto-2015
Ubicación: Colombilandia
Mensajes: 10
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: header 303 y proicesamiento previo de información

Cita:
Iniciado por xerifandtomas Ver Mensaje
No me termina de quedar claro cual es tu problema la verdad o si te da algún error en concreto.

Lo que si veo que haces mal el uso de header.
Del manual



No puedes hacer lo siguiente como ocurre en tu código.

Código PHP:
Ver original
  1. echo 'Lo que sea...';
  2. header ('lo que sea');

Por lo tanto primero deberás determinar que cabecera ( header ) tienes que utilizar, y luego mostrar todo lo demás.
(1)Pero yo no tengo echos antes de los headers .-., es mas los headers redireccionan bien hasta el momento.
(2)Tengo tanto una inquietud como un problema:
-->En algunas ocasiones las funciones que ves aqui al parecer no estan funcionando, como ya dije, ellas reciben un código único en el formulario, pero cuando miro el resultado del dia de por ejemplo 100 registros hechos por los empleados, solo veo registrados en la base de datos 85.. entonces nose si es que el header no permite aveces que se procese todaaa la funcion (osea tal vez pienso que la trunca) y por ese motivo no se procesa todo el trabajo que php deberia hacer. ¿Es eso correcto, o estoy equicado? Esa es mi inquietud.
-->Y el problema como ya dije tambien, es que en la funcion p02 no me muestra el echo que permite mostrar un boton, si te das cuenta, ese echo no tiene header al finalizar, entonces viene la pregunta: ¿Porque aun asi se ejecuta un header cuando el codigo pasa por ahi, si no tiene header por ningun lado esa condición?
  #4 (permalink)  
Antiguo 22/06/2016, 14:12
 
Fecha de Ingreso: agosto-2015
Ubicación: Colombilandia
Mensajes: 10
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: header 303 y proicesamiento previo de información

Recorte el código para mostrar exclusivamente el problema:

Código PHP:
Ver original
  1. <?php
  2. function leer_p02($show_id_uni)
  3. {
  4.   /* MODULO FRAGMENTACION CODIGO */
  5.   if ('t' == $prohibicionb['bol_plastificado_send']) {
  6.     echo '<!-- Aqui hay que mostrar un boton con formulario oculto -->';
  7.     =====>>> Si se fijan en esta condición(IF) aqui no hay ningun header! Deberia mostrar el codigo html! Pero se salta como si tuviera un header! <<<===
  8.   }else{
  9.     /* MÓDULO DE REGISTRO DE TAREAS */
  10.      
  11.     /* MÓDULO DE IMPRESION SEGUNDA ETIQUETA */
  12.    
  13.     //header("Location: http://10.10.200.11/leer_imprimir_6_v4.php",true,303);  
  14.     //exit();
  15.    =====>>>Si se fijan en esta codicion(ELSE) antes habia un header y lo desactive pensado que eso afectaba a la otra condición(IF) <<<===
  16.   }
  17. }
  18. ?>

Si la variable $prohibicionb['bol_plastificado_send'] es TRUE que me muestre un ECHO, de lo contrario que haga otra cosa.
He aqui el problema, la condicion se cumple, pero la pagina refresca de una, como si hubiera un header al finalizar esa condición, yo pense que depronto el header que estaba en ELSE afectaba en algo a la ejecucion de IF, entonces como ven lo comente o desactive, pero sigue igual, se sigue refrescando la pagina como si hubiera un HEADER, cuando ni IF ni ELSE tienen headers ya, ¿porque?

Última edición por milangue10; 22/06/2016 a las 14:24
  #5 (permalink)  
Antiguo 22/06/2016, 14:48
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: header 303 y proicesamiento previo de información

Cita:
(1)Pero yo no tengo echos antes de los headers .-., es mas los headers redireccionan bien hasta el momento.
Siento llevarte la cortaría, te funcionen las redireccion es o no. Estas utilizando header después de utilizar echo.

A ver si me explico:
Código PHP:
Ver original
  1. //defines las funciones con header
  2. function mi_funcion (){
  3.     header ('lo que sea');
  4. }
  5. //luego imprimes cosas
  6. echo 'Esto es un echo';
  7. //luego utilizas funciones con header;
  8. mi_funcion ();

Cita:
-->Y el problema como ya dije tambien, es que en la funcion p02 no me muestra el echo que permite mostrar un boton, si te das cuenta, ese echo no tiene header al finalizar, entonces viene la pregunta: ¿Porque aun asi se ejecuta un header cuando el codigo pasa por ahi, si no tiene header por ningun lado esa condición?
Sí miramos tu función encontramos lo siguiente:

Código PHP:
Ver original
  1. function leer_p02($show_id_uni)
  2. {
  3. /* variables  */
  4.  
  5. // llamada a función, que no sabemos que hace
  6. mostrartitulo("Ese código ya fué impreso");
  7.  
  8. // llamada a función reenviar
  9. reenviar('f',0);
  10.  
  11. /* resto de código */
  12.  
  13. }
  14.  
  15. /* si vamos a la función reenviar vemos que tienes exit al final */
  16. function reenviar($bol,$show_id_short)
  17. {
  18. // tienes uno header aquí
  19. header("Location: http://10.10.200.11/leer_imprimir_6_v4.php",true,303);
  20. // en lugar de exit deberías utilizar return
  21. //exit; // fin de la ejecucion
  22. return; // fin de la función,  continúa la ejecución del resto del codigo
  23. }

Ten en cuenta que si el intérprete de php encuentra un exit, finaliza la ejecución, en este caso no es lo que requieres, para salir de la función puedes utilizar return.
__________________
Unset($vida['malRollo']);

Etiquetas: dudas, header
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 04:57.