【问题标题】:Creating and Populating Values to Variable Variables为变量变量创建和填充值
【发布时间】:2018-11-10 04:06:59
【问题描述】:

我以前做过这个没有问题,但现在似乎无法让它工作。从一个数组中,我想创建值的变量,然后填充任何已由表单提交的变量,或者如果它们尚未提交,则为它们分配一个空值。

$Fields 数组,其中包含数据库列名并从查询中自动生成,如下所示:

Array
(
    [0] => ID
    [1] => Name
    [2] => EMail
    [3] => Message
    [4] => Site
)

PHP 代码是:

// Create variables from table columns and populate on post
foreach ($Fields as $key => $val) :
    if (isset($_POST) && isset($_POST[$val])) :
        $$key = $val;
        $val = $_POST[$val];
    else :
        $$key = $val;
        $val = "";
    endif;
endforeach;

【问题讨论】:

  • 在你的 foreach 循环中,$key 是一个数字。你不能用它来命名变量。
  • 我想了很多,但是用 $$val 替换 $$keys 仍然会出现其他地方使用的变量丢失的错误。

标签: php variables


【解决方案1】:

如果您正在尝试根据选定的 $_POST 元素的值设置一些变量,并且默认为空,请执行以下操作:

$fields = ["ID", "Name", "Email", "Message", "Site"];
foreach ($fields as $field) {
    $$field = $_POST[$field] ?? "";
}

但是变量变量不是经常使用的东西;最好坚持从数组中调用它们。它使您的代码更清楚地了解值的来源。要设置默认值,您可以在空数组上使用 array_merge()

$fields = ["ID" => "", "Name" => "", "Email" => "", "Message" => "", "Site" => ""];
$posts = array_merge($fields, $_POST);

【讨论】:

  • 感谢您的协助。只是为了澄清一下,该数组来自对表列的查询,而不是来自帖子,因此它的结构将始终是 key=>value 但我希望任何帖子都可以填充可能提交的值。表单始终使用实际的列名提交。
  • 我没有关注你。如果此代码没有达到您想要的效果,请尝试编辑问题以使您的问题更加清晰。
  • “表单总是使用实际的列名提交”可能不太清楚。我的意思是表单已经有与数据库的列名匹配的字段名。
【解决方案2】:

我同意你应该坚持使用数组而不是创建变量变量,但是因为你无论如何都在这样做并且你知道你需要哪些;你可以改$Fields:

$Fields = array("ID"=>"", "Name"=>"", "Email"=>"", "Message"=>"", "Site"=>"");

然后只需添加数组并提取:

extract($_POST + $Fields);

【讨论】:

  • 谢谢,但我不知道我提前需要的那些,这就是这样做的重点。 $Fields 来自对各种表的查询并提供数组,但我在原始问题中将其硬编码为数组结构的示例。无论如何,它现在运行良好。
  • 好的,然后array_flip($Fields),很简单。
【解决方案3】:

在 miken32 的帮助下,它现在可以正常工作,并且大大简化了我原来冗长的代码:

// Create variables from table columns and populate on post
foreach ($Fields as $val) :
        $$val = (isset($_POST[$val])) ?  $_POST[$val]  : "";
endforeach;

这将从列名数组创建变量,当表单提交给自身时,只要表单字段的名称与列名匹配,它就会获取帖子值以保持字段填充。.

【讨论】:

  • 我在答案中包含的空合并运算符与您的 isset() 内容完全相同,如果您不使用它,将 $key 拉入循环是没有意义的。跨度>
  • 谢谢,我在这里从我的开发副本中删除了 $key,但也从上面的代码中删除了它。在空合并运算符上,我没有看到它,但我尝试使用更接近我通常的代码编写“风格”的代码。至于变量变量,我很惊讶它们没有被更多地使用,尽管我认为可能存在一些安全问题。
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
相关资源
最近更新 更多