我想编写一个使用$ _POST [' first_name']和$ _POST ['密码']作为参数的函数

时间:2016-03-20 01:12:36

标签: php function post

我想在/ check登录详细信息中为-log用户编写一个函数 - 使用$ _POST [' first_name']和$ _POST ['密码']作为参数。我一定是在做傻事。有人可以帮帮我吗?

function log_user_in($_POST['first_name'],$_POST['password']) {

if ( !empty($_POST['first_name'])  &&  !empty($_POST['password']) )  {

$first_name = $_POST['first_name'];
$first_name = mysqli_real_escape_string($dbc, $first_name);

$password = $_POST['password'];
$password = mysqli_real_escape_string($dbc, $password);

  ---mysqli queries----

session_start();
redirect_user('page.php');

} // close if all set

} // close function log user in

我感觉,$ _POST [&#39;信息&#39;]不能用作函数中的参数/参数,我可能错了,在这种情况下如何将它们替换为变量或其他东西,例如< / p>

function log_user_in ($a, $b) {
if ( !empty($a) &&  !empty($b) )   {
$first_name = $a;
$first_name = mysqli_real_escape_string($dbc, $first_name);
$password = $b;
$password = mysqli_real_escape_string($dbc, $password);

--- mysqli stuff ---

session_start();
redirect_user('page.php');

} // close if all set
} // close function log_user_in

然后致电 -

log_user_in($_POST['first_name'],$_POST['password']);

你能告诉我哪里出错了,我能做些什么来改进或给我一个更好的方法,谢谢你们!

Ĵ

2 个答案:

答案 0 :(得分:2)

正如评论者所说,你的第二个代码是正确的。

但它可以简化:

  • 您不需要为新变量分配参数,例如$first_name = $a;:直接使用$first_name作为参数名称。
  • 此处不需要
  • session_start()(您不使用任何$_SESSION[...])。
  • 无论如何,即使你在这里需要它,它也应该位于其他地方(通常在文件的最开头),因为它必须只存在一次,并且在使用$_SESSION[...]的任何其他地方之前。< / LI>

最后一点,你的redirect_user('page.php');似乎有点奇怪。实际上你应该用返回的TRUE|FALSE结果结束你的函数(取决于你的mysql的东西),然后在调用函数时使用它。

实际上是这样的:

session_start();

// ... other stuff ...

function log_user_in ($first_name, $password) {

  $first_name = mysqli_real_escape_string($dbc, $first_name);
  $password = mysqli_real_escape_string($dbc, $password);

  --- mysqli stuff ---

  return // TRUE|FALSE depending on your mysql stuff result
}

if (log_user_in($_POST['first_name'],$_POST['password'])) {
  redirect_user('page.php');
} else {
  // echo some deny message...
}

答案 1 :(得分:2)

所以,让我们在这里谈谈好的编码。函数参数不能是超全局因为你定义你正在使用的变量,而不是它们实际上是什么值。谢天谢地PHP won't let you do this

char *rmlast (char *s)
{
    if (!*s) return s;  /* return if empty-string */
    char *p = s;

    for (; *p; p++) {}  /* advance to end of str  */
    *--p = 0;           /* overwrite last w/nul   */

    return s;
}

结果

  

致命错误:无法在第3行的/ in / INsWe中重新分配自动全局变量_POST

至少在PHP7之前(它会引发不同的错误,但仍然无法正常工作)

所以你的第二个功能是正确的。定义您的参数(应该是明确的名称,而不仅仅是function log_user_in($_POST['first_name'],$_POST['password']) { echo $_POST['first_name']; } log_user('Bob', 'Smith'); ,因此您知道哪些数据是哪个)然后使用您的超全局值调用该函数。在您的情况下,您还必须通过$a连接。所以,让我们做对了

mysqli

因此我们避免在函数内使用任何全局变量或超全局变量(称为dependency injection)。这使您和读取代码的任何其他人都知道数据应该做什么(不追逐另一个包含文件或猜测设置变量的位置)。我们使用了清晰的变量名称,因此我们知道数据是什么。