Php 有没有更简单的方法来执行$name=$请求[";name";];?

Php 有没有更简单的方法来执行$name=$请求[";name";];?,php,html,forms,Php,Html,Forms,所以我是PHP新手,正在尝试创建一个表单。我接受一组参数,并希望在同一页中处理它们。如果没有包含整个页面的巨型if-else作为if($\u POST),我不知道如何做到这一点。这似乎并不理想 此外,我发现我做了以下很多。有没有办法缩短这个时间?所有的名字都保持不变 $name = $_REQUEST["name"]; $gender = $_REQUEST["gender"]; $age = $_REQUEST["age"]; 我有很多行正在这样做,它似乎非常低效如果..否则..如果你必须发

所以我是PHP新手,正在尝试创建一个表单。我接受一组参数,并希望在同一页中处理它们。如果没有包含整个页面的巨型if-else作为
if($\u POST)
,我不知道如何做到这一点。这似乎并不理想

此外,我发现我做了以下很多。有没有办法缩短这个时间?所有的名字都保持不变

$name = $_REQUEST["name"];
$gender = $_REQUEST["gender"];
$age = $_REQUEST["age"];

我有很多行正在这样做,它似乎非常低效

如果..否则..如果你必须发布代码,我们可以让你知道如何缩短

可以使用extract函数避免为每个变量赋值

extract($_POST);

但是请注意,如果与输入控件同名,则可能会覆盖现有变量。

此处应使用
$\u POST
而不是使用
$\u REQUEST

$keys = array('name', 'gender', 'age');
foreach ( $keys as $key ) {
  if ( isset($_POST[$key]) ) {
    $$key = $_POST[$key];
  }
  // optional:
  else {
    $$key = ''; // default value
  }
}
魔术语录

您可以使用该函数来执行此操作。但它有一个安全缺点:如果有人将变量添加到帖子头中,现有变量可能会被覆盖


编辑:hsz的解决方案更好

停止使用$\u请求,因为它是$\u COOKIE、$\u POST和$\u GET的组合。
这会成为一种安全风险。

首先,扭转局面。不要这样做

if ($_POST) {
 // Your handling code
} else {
 echo "No data!";
}

但是,您可以使用,这意味着您在当前范围内引入了许多您(可能不知道)的变量

我的建议是在数组中循环,并对其中的变量进行处理(例如验证)


另外,不要使用
$\u REQUEST
,除非您确实想检查$\u GET、$\u POST和$\u COOKIE。在访问变量时使用适当的数组,否则人们可能会发送您意想不到的数据

为什么要执行变量重命名?只需使用数组即可访问该值<代码>对我来说很好。对于表单:我使用以下结构:……GeneSys暗示,知道变量是来自您还是来自用户是件好事。改名后,就很难说了。您可能需要考虑一些安全预防措施以及重命名。“现代世界的规则:装出恶意。”危险的举动!如果用户将在地址(GET)中设置一些值,则会导致用户覆盖您的变量!你真的不应该。有一个原因是这些天默认情况下,
register\u globals
处于关闭状态。它会带来更多的麻烦,这与extract()几乎相同。使用
extract
您无法控制传递的数据。您也无法控制此处的任何内容<代码>isset()不是安全功能。使用extract,将前缀应用于传入变量或数组映射转义函数更容易。我的意思是,如果用户将发布附加变量,如
$\u post['password']
,则使用
extract
函数,它将被覆盖,
rapidash
将不知道这一点-它会造成更多值得的麻烦。好吧,你说得对。您正在筛选变量名。但是
EXTR\u SKIP
也是如此。在我看来,
EXTR\u PREFIX\u ALL
对于OP想要什么似乎是一个更好的选择。(提取VAR的代码更少)它没有。“安全风险”是一种错误归因。它所带来的问题是“cookie固定”,这取决于用例,会导致可用性不便,而不是安全问题;特别是在OPs示例中。(我知道这只是粗略地讲了一下,但仍然如此。)
if (!$_POST) {
 die("No data!");
}
// Your handling code
foreach ($_POST as $key => $valu) {
   //do something with the variables
}