2011-03-03 22 views
6

Quizás es una pregunta estúpida, pero ¿cuál es la forma correcta de redirigir al usuario a la página de éxito después de que el formulario se guarda en la base de datos?Forma correcta de redirigir después de enviar formulario

No sé por qué, pero si agrego action="done.php", entonces el formulario no guarda los datos en mi base de datos.

He intentado añadir header ("location:/done.php"); funcionó, pero cuando me mudé a la página inicial del servidor (PHP 4 y MySQL 3.23.5) hay un error cuando estoy tratando de enviar el formulario Warning: Cannot modify header information - headers already sent by ........

Aquí está mi código php :

if(isset($_POST['submit'])) 
{ 
$name=$_POST['name']; 
$email = $_POST['email']; 
$company = $_POST['company']; 
$adress = $_POST['adress']; 
$post = $_POST['post']; 
$phone = $_POST['phone']; 

$sql="INSERT INTO tekstile_users (id, name, email, company, adress, post, phone) 
VALUES 
('', '$name','$email','$company', '$adress', '$post', '$phone')"; 

if (mysql_query($sql,$con)) { 

    header ("location:/done.php"); 
    } 
    else { 
echo "Something is wrong"; 
} 

}//end of submit button 

I arreglar que convertir ese archivo .php a UTF-8 without BOM.

¡Gracias a todos por sus sugerencias!

+4

inyección SQL de Google. – notJim

+0

No es un error de inyección, porque si elimino -header ("location: /done.php"); todo está bien – iKaspars

+4

No quise decir que este problema es causado por la inyección de SQL. Solo quiero decir que tienes un gran defecto de seguridad en tu aplicación. – notJim

Respuesta

0

I arreglar que convertir ese archivo .php a UTF-8 without BOM.

¡Gracias a todos por sus sugerencias!

6

El mensaje "encabezados ya enviados" significa que su secuencia de comandos ya ha generado algo. ¿Hay algo que se muestra en la página web arriba de este mensaje de error? Compruebe si hay espacios en blanco antes de la etiqueta <?php. También verifique cualquier archivo de inclusión para espacios en blanco antes o después de las etiquetas <?php ?>.

La cabecera Location debe tener un espacio después del ":" y debe ser un URI absoluto, similar a los siguientes:

header("Location: http://www.yoursite.com/done.php"); 
+0

No puede haber espacios en blanco, porque es el mismo código, que funciona bien en el servidor local y en mi servidor, pero no en los clientes He intentado su consejo para la URL larga para el encabezado - no funcionó. – iKaspars

+0

Al arreglar el encabezado no se corregirá el error de "encabezados ya enviados". Te perdiste la parte final del mensaje de error. ¿Obtiene "salida iniciada en ..."? Si es así, le dirá qué línea de script ya ha generado algo. – qbert220

+0

Advertencia: No se puede modificar la información del encabezado: encabezados ya enviados por (salida iniciada en /home/virtual/site167/fst/var/www/html/tekstile/index.php:1) en/home/virtual/site167/fst/var /www/html/tekstile/index.php en la línea 27 . Y 27 línea es - encabezado ("ubicación: /done.php"); – iKaspars

4

"headers already sent" muy probablemente significa que hay algo de contenido en su .php archivo antes de su código PHP. Esto podría ser tan simple como el espacio en blanco, o tal vez su código PHP esté incrustado en HTML. En cualquier caso, asegúrese de que nada viene antes de su código PHP, y usted debería estar bien.

En cuanto a la corrección de este método de redirección, creo que es una técnica generalmente aceptada.

1

headers already sent significa que algo ya ha sido enviado al navegador.

¿Está mysql dando un error?

Además, tenga en cuenta que $_POST se introdujo en PHP 4.1 por lo que si está utilizando una versión realmente antigua de php, podría estar causando un error.

+0

Lo siento, mi error PHP Version es 4.3.11. Creo que es un error de php. – iKaspars

+0

@iKaspars Si funcionó en su máquina de prueba y no funciona en el servidor original, supongo que sería un problema de MySQL. ¿La información se inserta en la base de datos? – jeroen

+0

Sí, la información se está insertando en la base de datos. ¿Hay otras maneras de redirigir después del éxito? – iKaspars

2

otros han respondido con respecto a los encabezados ya enviados. Una alternativa es incluir o requerir done.php si la actualización fue exitosa. No olvides la salida después del include/require.

if (mysql_query($sql,$con)) { 

    header ("location:/done.php"); 
    require_once('done.php'); 
    exit(); 
    } 
    else { 
echo "Something is wrong"; 
} 
+0

Hmm .. no funciona de esta manera ether – iKaspars

2

uso ob_start(); en la parte superior de la página y justo después de <?php

+0

Muchas gracias, me estaba rompiendo la cabeza durante las últimas 2 horas. tu código me ayudó mucho – hjaffer2001

Cuestiones relacionadas