2016-05-13 47 views
1

我有一個預覽輸入數據的腳本,在用戶接受同一個腳本之前,它需要重新發布表單數據才能最終處理它,其中一些數據是數組形式&我找了一個高效的函數來執行的,是我沒找到,所以我創造了這個:

function repost_array ($value, $key, $mkey) { 
      echo draw_hidden_field($mkey.'[' . $key . ']', htmlspecialchars(stripslashes($value))); 
    } 
    /* Re-Post all POST'ed variables */ 
    reset($_POST); 
    while (list($key, $value) = each($_POST)) if (!is_array($_POST[$key])) echo draw_hidden_field($key, htmlspecialchars(stripslashes($value))); 
    reset($_POST); 
    while (list($key, $value) = each($_POST)) if (is_array($_POST[$key])) array_walk_recursive($_POST[$key], 'repost_array', $key); 

請告知,如果有更好的辦法,或者如果我錯過了什麼(I`ve沒有測試如何遞歸函數的功能將會起作用)。

+0

我不確定你到底在做什麼。您正在收到帖子,但是希望用戶再次發帖爲什麼? – Webeng

+2

不要求用戶重新發布它。將它保存在一個會話變量中,當它們確認時只使用會話變量。 – Barmar

+0

或保存在數據庫表中,其中包含isProcessed –

回答

1

您可以重新發布的價值觀,但我建議使用像$_SESSION超級全球,類似的東西其他選擇:

<?php 
session_start();//session start has to be at the very top of your page! 
?> 

<!-- ... your html code --> 

<?php 

// ... your php code... 

$_SESSION['key'] = $_POST['key']; 

從那裏,你可以使用$_SESSION['key']在你的代碼的任何地方,以獲得儲值(只要會話處於活動狀態,這取決於您的配置通常在30分鐘左右,但可以變得更長,例如7天)

+0

當前的輸入代碼查找匹配的$ _POST變量以填充字段,如果從預覽返回或輸入錯誤被標記,那麼只需執行$ _SESSION ['key'] = $ _POST,然後如果返回編輯恢復$ _POST變量$ _POST = $ _SESSION ['key']是一個有效的方法,還是會增加安全問題?使用該方法的 – Matt

+0

肯定會添加一層安全性。例如,Imagiine是一個「黑客」,它創建了一個網頁,當有人輸入時,重定向到您的頁面,但通過'POST'方法發送信息,這可能包括XSS腳本或其他惡意內容。你會阻止這種攻擊。你不應該把自己限制爲只使用'$ _SESSION',你還應該過濾掉從用戶輸入中獲得的任何特殊字符。 'SUMMARY',是的,這將是一個有效的方法,是的,它爲上述原因增加了一層安全性。 – Webeng