[PHP问题]如何用$_POST拿多个data?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PHP问题]如何用$_POST拿多个data?相关的知识,希望对你有一定的参考价值。
我一个php里面有一个form
echo ("<input name=Food_ID type=hidden value=".$row["Food_ID"].">");
我跳向下一版
$id=print_r($_POST["Food_ID"]);
echo $id;
这样会出一个food_id
但我明明很多个food_id要拿,请问有什麼方法呢?
你可以把所有要提交的Food_ID先在客户端用js组合在一起,假设你有3个Food_ID分别是1、2和3,先组合成一个字符串"1,2,3",然后把这个字符串作为post的一个变量值传给服务器,这个变量可以叫Food_IDs。
服务器端读取Food_IDs的字符串值,就是"1,2,3",然后用字符串分割的方法再还原成3个单独的数据,这样你这3个ID就传上去了。 参考技术A <input name="idList[]" type=hidden value=".$row["Food_ID"].">
然后获取的时候就直接
foreach($_POST['idList'] as $id)
echo $id;
追问
有用,不过我想问
我有2个food_id
刚刚要同时拿三项资料,用了三次foreach然後insert入database
只需要insert两次,但insert八次,是2x2x2这样加上去?有解决方法吗,感谢你!
print_r($_POST["Food_ID"];
name 为数组形式就行了
PHP:如何用 strip_tags($_POST[...]) 批量替换 $_POST[...]
【中文标题】PHP:如何用 strip_tags($_POST[...]) 批量替换 $_POST[...]【英文标题】:PHP: How to mass replace $_POST[...] with strip_tags($_POST[...]) 【发布时间】:2011-04-03 12:51:05 【问题描述】:我目前正从一次严重的 XSS 攻击中恢复过来,并意识到我从未对我网站上的几个表单上的输入进行清理。我使用 Notepad++ 的 Find In Files 功能在我的所有 PHP 文件中搜索 $_POST
,并获得了近 5,000 个结果。现在,我真的不想去手动将strip_tags
添加到这些结果中的每一个,但是全部替换并不能解决问题……而且我完全是个菜鸟,比如正则表达式。
有什么办法可以让这件事变得不那么乏味吗?
【问题讨论】:
【参考方案1】:只需使用array_map()
。
$Clean = array_map('strip_tags', $_POST);
或者如果你想让它回到$_POST
变量:
$_POST = array_map('strip_tags', $_POST);
尽管使用不同的变量并将文件中所有出现的$_POST
更改为$Clean
,这可能是一个更好的主意。
【讨论】:
【参考方案2】:嗯,我认为array_walk_recursive
可以解决问题:
function custom_strip(&$val, $index)
$val = strip_tags($val);
array_walk_recursive($_POST, 'custom_strip');
【讨论】:
【参考方案3】:你可以把它放在一个文件中(例如safe.php)
foreach ($_POST as $key => $value)
$_POST[$key] = is_array($key) ? $_POST[$key]: strip_tags($_POST[$key]);
然后将 require_once("safe.php");
放入每个 php 文件(或所有 php 文件已包含的文件)
这是一个丑陋的黑客......但它可以节省你的时间。
【讨论】:
太棒了。这正是我想要的。 当表单字段名称如foo[bar]
或foo[]
PHP 会自动转换为数组时,这将无法防止XSS。
@Tgr:是的,这绝对会像你说的那样失败,但我认为他有根据自己的需要定制的想法【参考方案4】:
非常简单。把它放在你的每个文件的顶部,或者放在一个公共的头文件中,每次都在开始时调用它:
function mystriptag(&$item)
$item = strip_tags($item);
array_walk($_POST, mystriptag);
【讨论】:
当表单字段的名称如foo[bar]
或foo[]
PHP 自动转换为数组时,这将无法防止XSS。【参考方案5】:
你可以只用array_map
strip_tags
到$_POST
,但是编写一个自定义函数来从中获取数据要好得多:
function post_data($name)
global $post_cache;
if (in_array($name, $post_cache))
return $post_cache[$name];
$val = $_POST[$name];
if (is_string($val))
$val = strip_tags($val);
else if (is_array($val))
$val = array_map('strip_tags', $val);
$post_cache[$name] = $val;
return $val;
这将使您的代码更具可读性(其他研究它的人通常会认为$_POST['foo']
是表单字段foo
中的数据,而不是您已经预处理过的数据),不会导致您出现插件或库问题它尝试直接访问 $_POST ,可以轻松地向$_POST
预处理添加更多逻辑(启用magic quotes 时不转义是一种常见的逻辑),而无需查找代码中使用过POST数据的所有位置,并且当您意识到有一些 POST 字段确实需要 HTML 标记时,可以让您免于头疼。一般来说,直接更改任何超全局变量是一个非常糟糕的主意。
此外,最好在输出上而不是输入上清理数据。不同的用途需要不同的方法,例如,如果你使用
<div class="user_photo">
<img src="<?php echo photo_path($user_id) ?>" />
</div>
那么$user_name
是XSS 攻击向量,strip_tags
根本无济于事;你需要htmlspecialchars。如果将用户数据用作 URL,则需要另一种方法来防御 javascript:
URL 等。
【讨论】:
以上是关于[PHP问题]如何用$_POST拿多个data?的主要内容,如果未能解决你的问题,请参考以下文章