2011-03-03 83 views
6

也許這是一個愚蠢的問題,但是將表單保​​存到數據庫之後,將用戶重定向到成功頁面的正確方法是什麼?表單提交後重定向的正確方式

我不知道爲什麼,但如果我添加action="done.php",比窗體不會保存數據到我的數據庫。

我嘗試添加header ("location:/done.php");它的工作,但是當我移動到頁面原始服務器(PHP 4和MySQL 3.23.5)存在,當我試圖發送表單Warning: Cannot modify header information - headers already sent by ........

以下錯誤我的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 

解決它是PHP文件轉換爲UTF-8 without BOM

謝謝大家的建議!

+4

谷歌SQL注射後。 – notJim 2011-03-03 16:08:42

+0

它不是注入錯誤,因爲如果我刪除-header(「location:/done.php」);一切正常 – iKaspars 2011-03-03 17:01:52

+4

我不是說這個問題是由SQL注入引起的。我的意思是你在你的應用程序中有一個巨大的安全漏洞。 – notJim 2011-03-05 00:12:11

回答

0

解決它是PHP文件轉換爲UTF-8 without BOM

謝謝大家的建議!

6

「標題已發送」消息意味着您的腳本已經輸出了一些內容。此錯誤消息上方的網頁上是否顯示任何內容?檢查<?php標記之前是否有空格。在<?php ?>標籤之前或之後檢查任何包含文件的空白。

Location頭應該後有空間「:」,應該是一個絕對URI,類似以下內容:

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

有沒有空格,因爲它是相同的代碼,適用於本地主機和我的服務器上,但不在客戶端上 我試過你的建議爲長的網址頭 - 沒有工作。 – iKaspars 2011-03-03 16:06:46

+0

修復標題不會修復「標題已發送」錯誤。您錯過了錯誤消息的結尾部分。你的「輸出開始於...」嗎?如果這樣會告訴你哪一行腳本已經輸出了某些內容。 – qbert220 2011-03-03 16:44:42

+0

警告:無法修改標頭信息 -/home/virtual/site167/fst/var中已經發送的標頭(輸出開始於/home/virtual/site167/fst/var/www/html/tekstile/index.php:1) /www/html/tekstile/index.php 27行 。 27行是 - header(「location:/done.php」); – iKaspars 2011-03-03 16:46:54

4

「已經發送了頭」很可能意味着有一些內容你.php文件在您的PHP代碼之前。這可能和空白一樣簡單,或者你的PHP代碼被嵌入到HTML中。無論哪種情況,請確保沒有任何出現在您的PHP代碼之前,並且您應該沒問題。

至於這種重定向方法的正確性,我認爲這是一種普遍接受的技術。

1

headers already sent表示有東西已經發送到瀏覽器。

mysql是否給出錯誤?

此外,請注意$_POST是在PHP 4.1中引入的,所以如果您使用的是真正舊版本的php,那可能會導致錯誤。

+0

對不起,我的錯誤PHP版本是4.3.11。 我認爲這是一個PHP錯誤。 – iKaspars 2011-03-03 16:03:05

+0

@iKaspars如果它在你的測試機器上工作,並且它在原始服務器上不起作用,那麼我的猜測會是一個mysql問題。信息是否被插入到數據庫中? – jeroen 2011-03-03 16:06:29

+0

是的,信息被插入到數據庫中。 成功後還有其他方式重定向嗎? – iKaspars 2011-03-03 16:09:21

2

其他人已經回答了已發送的標題。如果更新成功,另一種方法是包含或需要done.php。不要忘記包含/需求後的退出。

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

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

嗯..它不會這樣工作乙醚 – iKaspars 2011-03-03 16:16:12

2

使用 ob_start(); 在頁面的頂部,只是<?php

+0

非常感謝,我在過去的2小時,我的頭腦。你的代碼幫了我很多 – hjaffer2001 2012-06-18 11:56:46