Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: laurasn en 14 de Enero 2015, 10:22

Título: header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 14 de Enero 2015, 10:22
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
Título: Re:Cambiar de página después de validad un formulario en php
Publicado por: Ogramar 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
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 14 de Enero 2015, 11:34
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
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: Ogramar en 14 de Enero 2015, 12:44
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

Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 14 de Enero 2015, 12:55
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...
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: Ogramar en 14 de Enero 2015, 13:56
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
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 14 de Enero 2015, 14:20
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
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: Ogramar en 14 de Enero 2015, 15:47
¿Y el resto del código? ¿Qué ocurre si no haces la validación?
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 15 de Enero 2015, 12:20
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>
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: Ogramar en 15 de Enero 2015, 16:08
¿Pero has llegado a comprobar de alguna manera (con validación o sin ella) si te inserta los datos en la base de datos?
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 16 de Enero 2015, 08:16
Sí, la BBDD se actualiza bien
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: el toba en 16 de Enero 2015, 09:08
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
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: laurasn en 16 de Enero 2015, 09:18
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
Título: Re:header php no funciona intentar redireccionar a otra web con php o javascript
Publicado por: el toba en 16 de Enero 2015, 11:15
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