PHP - Redireccionar a otra página PHP

 
Vista:

Redireccionar a otra página PHP

Publicado por Jorge (48 intervenciones) el 06/05/2020 12:56:29
Buenas tardes,

Me estoy volviendo loco con lo que parece una tontería :(

Tengo una página PHP que una vez ha guardado los datos en la base de datos quiero que redireccione a otra página PHP pasándole unas variables PHP por URL (para posteriormente recuperarlas con GET).

Lo hago de la siguiente manera:

1
header("location:realizarSolicitud.php?v=$valor&b1=$be&b2=$bn");

Pero cuando ejecuto la página se me queda en blanco y no va a la página que indico en el location: "realizarSolicitud".

He comprobado que las variables traigan valores y sí que lo traen, excepto "b2" que trae cadena vacía. Pero esto no debería ser un problema, ¿no?

Por otro lado, he mirado la consola del navegador y no viene ningún mensaje de error.

Por favor, ¿podéis ayudarme?

Gracias de antemano!

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccionar a otra página PHP

Publicado por Julio (830 intervenciones) el 06/05/2020 13:02:00
Hola.

¿El header tiene alguna impresión, algún echo o algo así antes? Coloca el código completo si puedes, porque no funciona el header si tiene alguna impresión anterior.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redireccionar a otra página PHP

Publicado por Jorge (48 intervenciones) el 06/05/2020 14:08:54
Hola, gracias por tu respuesta.

A continuación el código fuente completo, no hay ningún echo antes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
<?php
// CABECERA QUE CONTIENE EL HEADER DEL SITE
error_reporting(E_ALL && ~(E_NOTICE & E_WARNING));
 
// INCLUDE DE CONEXION  LA BBDD
session_start();
include ("production/conexion.php");
 
$nombre  =$_SESSION['nombre'];
$usuario =$_SESSION['usuario'];
$perfil  = $_SESSION['idtipo'];
$conces  = $_SESSION['conces'];
 
 
if(!isset($_SESSION['usuario'])) {
    header("Location: index.html");
    exit;
}
 
if (!isset($_GET["modo"])) { $modo=""; } else { $modo = $_GET["modo"]; }
 
$today       = date("d/m/Y");
$hora        = date("H:i:s");
$be = "";
$bn  = "";
//FIN HEADER
 
 
if ($modo == "m")
{
	//Por GET - De MODIFICAR DATOS CONTACTO
	$usua        	= $_GET["usuario"];
	$idCOC       	= $_GET["id"];
	$fechaHora   	= $_GET["fechahora"];
	$usuario      	= $_GET["usuario"];
	$bastidores     = $_GET["bastidores"];
    $comentarios    = $_GET["comentarios"];
	$estadoTriton   = 1; //Pendiente
 
	$concesionario  	= $_POST["concesionario"];
	$direccion  		= $_POST["direccion"];
	$persona  			= $_POST["persona"];
	$tlf  				= $_POST["telefono"];
 
	$opcionSeleccionada = $_POST["opcion"];
 
	if ($opcionSeleccionada == 2)
	{
		//MODIFICAR DATOS CONCESIONARIO
		$sqlModificarDatos = mysqli_query($con,"UPDATE concesionario SET direccion = '$direccion', contacto = '$persona', telefono = '$tlf' WHERE conces = '$conces'");
	}
}
else
{
	//Por POST - De REALIZAR SOLICITUD COC (sin modificar datos del contacto)
	$usua        	= $_POST["usuario"];
	$idCOC       	= $_POST["id"];
	$fechaHora   	= $_POST["fechahora"];
	$concesionario  = $_POST["concesionario"];
	$persona  		= $_POST["persona"];
	$tlf  			= $_POST["telefono"];
	$usuario      	= $_POST["usuario"];
	$bastidores     = $_POST["bastidores"];
	$direccion      = $_POST["direccion"];
    $comentarios    = $_POST["comentarios"];
	$estadoTriton   = 1; //Pendiente
 
}
 
 
$longitud = strlen($bastidores);
 
 
if ($longitud > 17)
{
    //CREAR ARRAY'S DE BASTIDORES E IR INSERTANDO EN LA BBDD (será un caso de masivo)
    $cadenaBastidores = ereg_replace("\n",",",$bastidores);
 
    $arrBastidores = explode(",", $cadenaBastidores);
 
    $cantElementos = count($arrBastidores);
 
    $pos=0;
    while ($pos < $cantElementos)
    {
        $pos++;
    }
 
}
 
 
if ($longitud == 17)
{
 
    $posBastidor = substr($bastidores,0,3);
 
    if ($posBastidor == "WAU" || $posBastidor == "WUA" || $posBastidor == "TRU") { $marca = "AU";}
    if ($posBastidor == "WVG" || $posBastidor == "WVW") { $marca = "VW"; }
    if ($posBastidor == "TMB") { $marca = "SK"; }
    if ($posBastidor == "WV1" || $posBastidor == "WV2") { $marca = "LC"; }
    if ($posBastidor == "VSS") { $marca = "SE"; }
 
    $bastidorSinEspacioAlFinal = trim($bastidores);
 
    //COMPROBAR SI LA PETICIÓN YA EXISTE
    $sqlExiste = "SELECT count(id) FROM coc WHERE bastidor = '$bastidorSinEspacioAlFinal'";
    $rsExiste = mysqli_query($con, $sqlExiste);
 
    while($sqlExiste = mysqli_fetch_array($rsExiste))
    {
        $cantRegistros = $sqlExiste["count(id)"];
    }
 
    if ($cantRegistros == 0)
    {
        // INSERTAR LA SOLICITUD DE COC
        $sql= mysqli_query($con,"INSERT INTO `coc`(`fpeticion`, `conces`, `id`,`bastidor`,`idmarca`,`idestado`, `observaciones`,`direccion`,`fregistro`,`contacto`,`telefono`,`fsolicitado`) VALUES ('$fechaHora','$conces','$idCOC','$bastidores','$marca','$estadoTriton','$comentarios','$direccion','$fechaHora','$persona','$tlf',NOW())");
 
        $valor = 1;
 
        $bn = $bastidores;
    }
    else
    {
        $valor = 2; //Ya existe
 
        $be = $bastidores;
    }
}
 
if ($longitud > 17)
{
    //VIENE MÁS DE UN BASTIDOR, INSERT INTO POR BASTIDOR CON WHILE
    $arrBastidores = explode(",", $cadenaBastidores);
    $cantElementos = count($arrBastidores);
 
    $pos=0;
    while ($pos < $cantElementos)
    {
        $posBastidor = substr($arrBastidores[$pos],0,3);
 
        if ($posBastidor == "WAU" || $posBastidor == "WUA" || $posBastidor == "TRU") { $marca = "AU";}
        if ($posBastidor == "WVG" || $posBastidor == "WVW") { $marca = "VW"; }
        if ($posBastidor == "TMB") { $marca = "SK"; }
        if ($posBastidor == "WV1" || $posBastidor == "WV2") { $marca = "LC"; }
        if ($posBastidor == "VSS") { $marca = "SE"; }
 
        //COMPROBAR SI LA PETICIÓN YA EXISTE
        $bastidorSinEspacioAlFinal = trim($arrBastidores[$pos]);
 
        $sqlExiste = "SELECT count(id) FROM coc WHERE bastidor = '$bastidorSinEspacioAlFinal'";
 
        $rsExiste = mysqli_query($con, $sqlExiste);
 
        while($sqlExiste = mysqli_fetch_array($rsExiste))
        {
            $cantRegistros = $sqlExiste["count(id)"];
        }
 
        if ($cantRegistros == 0)
        {
            $sql= mysqli_query($con,"INSERT INTO `coc`(`fpeticion`, `conces`, `id`,`bastidor`,`idestado`, `observaciones`,`direccion`,`fregistro`,`idmarca`,`contacto`,`telefono`,`fsolicitado`) VALUES ('$fechaHora','$conces','$idCOC','$arrBastidores[$pos]','$estadoTriton','$comentarios','$direccion','$fechaHora','$marca','$persona','$tlf',NOW())");
 
            if ($bn == "") { $bn = $arrBastidores[$pos]; }
            else { $bn = $bn . "," . $arrBastidores[$pos]; }
 
            $valor = 1;
        }
        else
        {
            if ($be == "") { $be = $arrBastidores[$pos]; }
            else { $be = $be . "," . $arrBastidores[$pos]; }
 
            $valor = 2; //Ya existe
        }
 
        $pos++;
    }
}
 
$sqlLimpiarVacios = mysqli_query($con,"DELETE FROM coc WHERE bastidor LIKE '' OR bastidor IS NULL");
 
header("location:realizarSolicitud.php?v=$valor&b1=$be&b2=$bn");
?>

Gracias de antemano!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccionar a otra página PHP

Publicado por javier (547 intervenciones) el 06/05/2020 20:15:33
Hola coloca

1
error_reporting(E_ALL);
antes de las cabeceras, en la primera linea del codigo justo despues de las etiqueta <?php a ver que dice PHP

si hay aunque sea un espacio antes de la etiqueta <?php, eso ya es una salida al navegador.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Redireccionar a otra página PHP

Publicado por Jorge (48 intervenciones) el 07/05/2020 08:32:25
Buenos días,

Gracias por tu consejo. Lo he hecho y me aparecen dos mensajes:

Deprecated: Function ereg_replace() is deprecated in C:\xampp\htdocs\test\coc\guardarSolicitud.php on line 77

Warning: Header may not contain more than a single header, new line detected in C:\xampp\htdocs\test\coc\guardarSolicitud.php on line 183
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccionar a otra página PHP

Publicado por Julio (830 intervenciones) el 07/05/2020 08:39:31
Como te dice el error, ereg_replace está obsoleta y, si estás utilizando PHP 7 (que parece que sí), entonces no existe esa función, por lo que te da error. Tendrás que sustituirla por preg_replace.

Lo otro que te pone creo que es porque hay varias líneas en el string del header, si no he entendido mal. Prueba a poner algo así:

1
2
3
$url = "realizarSolicitud.php?v=$valor&b1=$be&b2=$bn";
$url = str_replace(PHP_EOL, '', $url);
header("Location: $url");

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Redireccionar a otra página PHP

Publicado por Jorge (48 intervenciones) el 08/05/2020 09:12:28
Buenos días,
En primer lugar gracias por tu apoyo.

Con la función que me comentas "preg_replace" queda solucionado el primer error. Por cierto, he tenido que fijar el salto de línea porque tal y como estaba me daba error: "Warning: preg_replace(): Empty regular expression". Así que actualmente es:

1
$cadenaBastidores = preg_replace("/\n/",",",$bastidores);


En cuanto al header, lo he aplicado como me comentas, pero aún así me sigue dando el siguiente warning:

Warning: Header may not contain more than a single header, new line detected in ...

Peta en:
1
header("Location: $url");

¿Qué puedo hacer?

Gracias de antemano!!

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Redireccionar a otra página PHP

Publicado por Julio (830 intervenciones) el 08/05/2020 09:20:23
Es que el error te dice que "header no debe tener más de un simple encabezado, nueva línea detectada". Es como si detectara que en el string que le estás pasando hubiera algún salto de línea.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Redireccionar a otra página PHP

Publicado por Jorge (48 intervenciones) el 08/05/2020 09:33:38
Wow eres un genio!! La verdad es que no entendía ese error :-(

Es cierto que en la url había un espacio en blanco, he aplicado estas líneas, para evitar que tenga espacios en blanco y saltos de línea:

1
2
3
$url1 = "realizarSolicitud.php?v=$valor&b1=$be&b2=$bn";
$url2 = str_replace(' ', '', $url1); //Eliminar espacios en blanco
$url = preg_replace("[\n|\r|\n\r]", "", $url2); //Eliminar saltos de línea

Y ahora sí funciona todo bien!! Mil graciasssssssssssss!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar