2016-05-13 67 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