Principiante aquí No entiendo por qué no aparece ninguna alerta cuando uso la instrucción de encabezado, pero la alerta aparece bien cuando elimino la línea de ubicación del encabezado. Realmente confundido :(

<?php
include "connect.php";
session_start();
// if(isset($_SESSION['user_id'])
if(isset($_POST['register'])){
echo '<script language="javascript">';
echo 'alert("message successfully sent")';
echo '</script>';
$name=$_POST["name"];
$roll=$_POST["roll"];
$year=$_POST["year"];
$pass=$_POST["register_password"];
$sql="INSERT INTO students (roll_id,name,year,password) VALUES 
('$roll','$name','$year','$pass')";
$query=mysqli_query($conn,$sql);
if(!$query)
{
   echo "Not Inserted" . mysqli_error($conn);
 }
 header("location:index.php?registered=true");
}
?>
0
mr_mohapatra 9 sep. 2018 a las 08:46

3 respuestas

La mejor respuesta

El problema es que header() debe enviarse antes de CUALQUIER salida para redirigir la página a otra URL. En ese momento, ya estás repitiendo las cosas, por lo que las redirecciones a través de encabezados no funcionarán.

En un caso como este, (donde desea que aparezca un mensaje emergente y luego redirigir), debe usar una redirección de JavaScript:

echo '<script language="javascript">';
echo 'window.location.replace("/index.php?registered=true");';
echo '</script>';

Esto generará su mensaje emergente. Después de que el usuario presione OK, se ejecutará el código de redirección de JavaScript y redirigirá la página a /index.php?registered=true.

Además, también puede agregar el cuadro de alerta a la página que está redirigiendo. Vea este archivo de ejemplo index.php:

<?php

if (isset($_GET['registered'])) {
    echo '<script>alert("You have registered!");</script>';
}

//Continue with rest of page.

Si sigue esta ruta, no incluya NINGUNA salida (Sin eco) en la página de registro, de modo que header() s sean su única salida. Idealmente, esta sería una mejor experiencia para el usuario, ya que no tienen una página emergente blanca ya que están haciendo clic en un cuadro que dice alert("message successfully sent").

1
Goodbye StackExchange 9 sep. 2018 a las 05:55

Echo así:

echo "<script>alert('message sent'); window.location.href='url';</script>";
0
Lux 9 sep. 2018 a las 05:52

Esto se debe a que el encabezado de ubicación redirige a una página diferente antes de que se muestre la alerta de JavaScript.

Agregue la alerta a la página de destino y se mostrará allí.

1
EvE 9 sep. 2018 a las 05:49