Autor Tema: header php no funciona intentar redireccionar a otra web con php o javascript  (Leído 44377 veces)

laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola a todxs,
Estoy escribiendo una pequeña aplicación web para introducir unos datos en una BBDD.
Tengo una doc index.php con un formulario, una vez validados los datos los inserto en la BBDD mediante el doc registro.php. Una vez hecha la inserción quiero redireccionar a una página donde se muestre un mensaje que indique el registro ha sido correcto o no, lo hago con esta línea de código:
Código: [Seleccionar]
header('Location: success.html');El caso es que si despuro desde Netbeans me redirecciona correctamente, pero al ejecutar la aplicación, aunque me guarda los datos bien en la BBDD, la página index.php se mantiene intacta.  >:( >:( >:( >:( >:(
Lo he intentado también desde javacript con este código:
Código: [Seleccionar]
echo "<script language="javascript">window.location="success.html"</script>
¡Me estoy volviendo loca! ¿Alguna idea de lo que puede estar pasando?
Gracias por adelantado
« Última modificación: 14 de Enero 2015, 10:52 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2659
    • Ver Perfil
Re:Cambiar de página después de validad un formulario en php
« Respuesta #1 en: 14 de Enero 2015, 10:51 »
Hola, el header de php no se puede usar para direccionar una página en cualquier punto. Unicamente se puede utilizar si es exactamente la primera salida que se envía, si no lo es no funcionará (por tanto no se puede usar en un punto intermedio de una web)

Por ejemplo:

<?php
echo 'hola';
header('Location: success.html');
?>

Esto no es válido porque antes de enviar el header se ha enviado una salida previa.

Sí puedes hacer un redireccionamiento con javascript usando algo como esto:

echo '<script type="text/javascript">
alert("Probando vamos a proceder a redireccionar");
window.location.assign("success.html");
</script>';

Ten en cuenta que el archivo success.html tiene que estar en la misma carpeta o directorio que el archivo desde el que invoques esta instrucción. Si está en otro directorio deberías poner la ruta correcta.

También ten en cuenta (supongo que es así) que el archivo con el que estés trabajando tiene que tener extensión .php (veo que quieres redireccionar a un .html, lo cual es posible pero si estás trabajando con php quizás es preferible que todo tenga extensión php).

Salu2

laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Gracias por tu respuesta.
No sabía que no se podía redicreccionar en cualquier punto de una web.

Estoy intentando redirecionar con el script que me indicas, pero no lo consigo.
De hecho incluso he intentado redireccionar en registro.php antes de guardar los datos pero nada.
He cambiado la página de destino y he escrito otro doc .php para que esté todo homogéneo.
Tengo un poltergeist en mi aplicación  ;D ;D ;D

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2659
    • Ver Perfil
Crea un archivo prueba.php con este código:

Código: [Seleccionar]
echo 'entrando en la página';
echo '<script type="text/javascript">
alert("Probando vamos a proceder a redireccionar");
window.location.assign("success.html");
</script>';
echo 'salida de la página';

Comprueba a ver qué ocurre cuando accedas a prueba.php


laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Si pongo el código que me indicas funciona.
Si creo otro archivo .php con la llamada a header también.
¿Puedes ser que esté enviando algún dato erróneo al hacer el POST del formulario?
Para validar el formulario estoy usando Ajax, no sé si tendrá algo que ver.
He probado también a redireccionar antes de guardar los datos en la BBDD y tampoco funciona.
Sé que hay algo que se me escapa pero no consigo verlo...

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2659
    • Ver Perfil
Pega el código de la página de validación y de la página donde llegas después de la validación para verlo... (para pegar código usa el botón # del editor del foro y pulsa previsualizar primero)

Salu2

laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Este es el script de validación:

Código: [Seleccionar]

 <script type="text/javascript">

        $().ready(function() {
         
 
           
           
            $("#formAlbaran").validate({
                   
               //  debug: true,
                 errorElement: "errorlabel",
                rules: {
                    nombre_unidad: {required: true},
                    matricula: {required: true},
                    tipo_residuo: {required: true},
                    albaran: { required: true, digits: true},
                    peso: { required:true, digits: true},
                    datepicker: { required:true}
               
                },
                messages: {
                    nombre_unidad: "Debe seleccionar una unidad de tratamiento.",
                    matricula: "Debe seleccionar una matrícula.",
                    tipo_residuo: "Debe seleccionar un tipo de residuos.",
                    albaran: "Debe introducir el número de albarán (sólo dígitos).",
                    peso: "Debe introducir el peso recogido (sólo dígitos).",
                    datepicker: "Debe seleccionar una fecha."
                   
                },
               
             
               submitHandler: function(form){
                 
       
               
                var stringDatos = 'nombre_unidad='+$('#nombre_unidad').val()+'&matricula='+$('#matricula').val()+'&tipo_residuo='+$('#tipo_residuo').val()+'&albaran='+$('#albaran').val()+'&peso='+$('#peso').val()+'&datepicker='+$('#datepicker').val();
                             
                    $.ajax({
                            type: $(form).attr("method"),
url: "pruebaaaa.php",
                                data: stringDatos,
dataType : "json",
             
                            success: function(data){
               
                            }
                       
                       
                     
                 
            });
       
                }
            });
        });
    </script>

Una vez validado el form, hago el POST a pruebaaaa.php, que tiene el código que me indicabas antes
pruebaaaa.php:

Código: [Seleccionar]
<?php echo 'entrando en la página';
echo 
'<script type="text/javascript">
alert("Probando vamos a proceder a redireccionar");
window.location.assign("success.html");
</script>'
;
echo 
'salida de la página';
?>

Podría estar el error en la funcion success???
Muchísimas gracias

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2659
    • Ver Perfil
¿Y el resto del código? ¿Qué ocurre si no haces la validación?

laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
No hace nada, el script del principio es el que valida los campos.
Si no son correctos, muestras un mensaje al lado de los campos de texto.
Te copio el código entero (está un poco guarrete  :-[ )
Código: [Seleccionar]
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->

<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
    <head>
        <meta charset="UTF-8">
        <title>Gestion Residuos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <link href="css/jquery-ui.min.css" rel="stylesheet" type="text/css">
        <link href="css/estilos.css" rel="stylesheet" type="text/css">
        <link rel="stylesheet" type="text/css" href="css/default.css" />
        <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.7.2.custom.css" />
      <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
        <script src="./js/jquery-1.7.2.min.js" type="text/javascript"></script>
        <script src="./js/jquery.ui.datepicker.validation.min.js" type="text/javascript"/>

       
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
        <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
        <script type="text/javascript">
       
        jQuery(function($){
$.datepicker.regional['es'] = {
closeText: 'Cerrar',
prevText: '&#x3c;Ant',
nextText: 'Sig&#x3e;',
currentText: 'Hoy',
monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
'Jul','Ago','Sep','Oct','Nov','Dic'],
dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
weekHeader: 'Sm',
dateFormat: 'dd-mm-yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''};
                $.datepicker.setDefaults($.datepicker.regional['es']);
              //  $("#datepicker").datepicker({showButtonPanel: true});
        });   

        $(document).ready(function() {
           
           $("#datepicker").datepicker({showButtonPanel: true});
        });
    </script>
       

       
    <script type="text/javascript">

        $().ready(function() {
         
 
           
           
            $("#formAlbaran").validate({
                   
               //  debug: true,
                 errorElement: "errorlabel",
                rules: {
                    nombre_unidad: {required: true},
                    matricula: {required: true},
                    tipo_residuo: {required: true},
                    albaran: { required: true, digits: true},
                    peso: { required:true, digits: true},
                    datepicker: { required:true}
               
                },
                messages: {
                    nombre_unidad: "Debe seleccionar una unidad de tratamiento.",
                    matricula: "Debe seleccionar una matrícula.",
                    tipo_residuo: "Debe seleccionar un tipo de residuos.",
                    albaran: "Debe introducir el número de albarán (sólo dígitos).",
                    peso: "Debe introducir el peso recogido (sólo dígitos).",
                    datepicker: "Debe seleccionar una fecha."
                   
                },
               
             
               submitHandler: function(form){
                 
       
               
                var stringDatos = 'nombre_unidad='+$('#nombre_unidad').val()+'&matricula='+$('#matricula').val()+'&tipo_residuo='+$('#tipo_residuo').val()+'&albaran='+$('#albaran').val()+'&peso='+$('#peso').val()+'&datepicker='+$('#datepicker').val();
                             
                    $.ajax({
                            type: $(form).attr("method"),
url: "Pruebaaaaa.php",
                                data: stringDatos,
dataType : "json",
             
                            success: function(data){
               
                            }
                       
                       
                     
                 
            });
       
                }
            });
        });
    </script>
       
       
    </head>
    <body>
       
         
        <div class="group">
            <!action="registro.php">
  <form  method="POST" clas="ui-widget" id="formAlbaran" >
     <h2><em>Introducir datos de albarán</em></h2>
 
     
      <label for="unidad_tratamiento">Seleccione la unidad de tratamiento <span></span></label>
      <select id="nombre_unidad" name="nombre_unidad" >
            <option value="" selected="selected">- selecciona -</option>
             <?php
                
include ('BD_mysql.php');
               
$nombreBasededatos 'gestion_residuos';
               
$servidor 'localhost';
               
$usuario 'root';
               
$clave '*******';
               
$miconexion = new BD_mysql ;
               
$miconexion->conectar($nombreBasededatos$servidor$usuario$clave);
               
$miconexion->consulta("SELECT * FROM unidad_tratamientos");
               
$miconexion->escribirSelect(); 
       
          
?>

         
      </select>
 

     
     
      <label for="camiones">Seleccione la matrícula del camión <span></span></label>
      <select id="matricula" name="matricula" >
            <option value="" selected="selected">- selecciona -</option>
             <?php
                
//Consultamos la BBDD de las unidades de tratamiento
               
            
               
$miconexion->consulta("SELECT * FROM camiones");
               
$miconexion->escribirSelect(); 
       
          
?>

         
        </select>
     
      <label for="residuos">Seleccione tipo de residuo <span></span></label>
      <select id="tipo_residuo" name="tipo_residuo"  >
            <option value="" selected="selected">- selecciona -</option>
             <?php
            
               $miconexion
->consulta("SELECT * FROM residuos");
               
$miconexion->escribirSelect(); 
       
          
?>

      </select>
     
      <label for="albaran">Introduzca número de albarán <span></span></label>
      <input type="text" id="albaran" name="albaran" maxlength="6"  /> <!class="form-input" Formato >
     
     <label for="albaran">Introduzca el peso <span></span></label>
      <input type="text" id="peso" name="peso"   />
     
     <label for="fecha_recogida">Seleccione la fecha de recogida <span></span></label>
     <script type="text/javascript">
        $(document).ready(function() {
           $("#datepicker").datepicker();
        });
     </script>   
     <input type="text" name="datepicker" id="datepicker" readonly="readonly" size="12" />
       
     <center> <input  type="submit" value="Guardar" /></center>
    <?php
   
// mysql_close($miconexion);
    
?>

  </form>
</div>
       
    </body>
</html>

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2659
    • Ver Perfil
¿Pero has llegado a comprobar de alguna manera (con validación o sin ella) si te inserta los datos en la base de datos?

laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Sí, la BBDD se actualiza bien

el toba

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
el redireccionamiento deberías colocarlo en el archivo registro.php, podrías colocar el código de ese archivo?? porque si registra a la DB pero no redirecciona en algun punto de ese archivo le estas errando y me gustaría ver ese archivo, yo en muchos scripts tuve enredos de este tipo asique tal vez te pueda ayudar

saludos

laurasn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Lo que me tiene mareada, es que he probado a quitar todo el código de registro.php y sólo llamar a header o al script de redireccionamiento y tampoco lo hace.
Ahora lo copio

el toba

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
bien, no me quiero adelantar pero seguramente luego que haces la comprobación (porque me imagino que la haces  :o) de si el registro fué correcto o no, si fué correcto haces el header('Location: index.php') sino mostras algún mensaje de error o algo, eso sería la forma correcta de poder redireccionar asegurandote 2 cosas, 1º comprobar que los datos se hayan registrados y 2º que si al comprobar algo como (¿fué correcto? == si) { forzas a redireccionar} sino {mostras algun mensaje de error}

digamos que eso no es un código real... es a modo de ejemplo... se entiende

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".