通过 FromSubmit 创建变量 (PHP)

Create Variables by FromSubmit (PHP)

我是新手,所以我不知道专业术语:(

所以,我的代码处理过程:

  1. 读出 FormValues,作为字符串接收

  2. 从接收到的字符串生成“变量”(HTML 具有相应值(表单输入)的表单 (id))

      $variableX1 = "Value1";
      $variableX2 = "Value2";
      ...
    

我的代码的目的: 不再需要手动编写 POST 变量来处理这些表单

     generate variables & values:     $loginmail = "email@gmail.com";
     instead of write:                $loginmail = $_POST['email'] 

我的代码示例:

class formHandler {  

    //Get FormInput, Read out Properties---------------------------------------------------------------------
    function getVariables(){ 
        
        $formString = $formArray = $value = $formInput = $variable = "";

        $formString = $_POST['formInit'];                           //Get String from serverRequest.js
        
        $formArray = explode('&', $formString);                     //Create Array from String > separate FormInput

        foreach($formArray as $value) {
            
            $formInput = explode('=', $value);                      //Create Array from every From Input

            ${$formInput[0]} = urldecode($formInput[1]);            //Creates Variables & URLdecoded Values
            
        }
        
        include_once 'fileHandler.php';
    }
}

问题/疑问: 此代码工作正常

  1. 一般:像这样处理表格是一种安全且明智的方法吗?
  2. 当我收到所有数据作为字符串时,它对安全或流程有影响吗?例如。注册、输入密码或年龄(整数)

3.Furthermore,还需要Prepared Statements才能往DB中插入数据?

请问有哪位大神可以告诉我解决办法,或者需要注意的地方:) 非常感谢。

回答你的第一个问题:它是否安全取决于你打算用它做什么,但既然你想把它保存到数据库中,那么目前它是不安全的。你用第三个问题自己回答了你的问题。始终使用准备好的语句。

我还要说它不是那么聪明。当然,它在某种程度上很聪明,您不需要关心任何新变量等。但是如果

会发生什么
  • 您正在重新设计您的数据库?然后,你不知道有些字段用在什么地方
  • 用户只需从 POST 请求中添加更多字段(或删除字段)(通过更改表单或手动发送请求?)然后一切都会失败,因为您将尝试插入未知字段进入数据库
  • 重构时,您无法在 IDE 自动生成的变量中搜索用法。 (这也是我不喜欢通过字符串连接或类似方式调用方法的原因)

简单地说:我会避免使用“魔法”来创建变量、方法或其他任何东西。不要考虑什么是容易编程的。想想什么东西容易维护,方便以后阅读!没有人会仅仅通过阅读就知道这段代码中发生了什么,而这应该始终是#1 priority


回答您的第二个问题:字符串不比任何其他数据类型更不安全。密码应始终加密(我不再积极开发 PHP,所以不知道这是否是当前标准,但请查看:https://www.php.net/manual/de/function.password-hash.php


我想为您想要实现的目标做的是 serialization/deserialization

symfony 框架对此有一个很好的图形

来源:https://symfony.com/doc/current/components/serializer.html

因此,既然您已经有了一个数组,那么对您来说这就是去名化。您可以编写一个非规范化器,它除了将数组转换为模型外什么都不做。

我不知道这是否已经太高级了,但你可以看看