我想在/ 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']);
你能告诉我哪里出错了,我能做些什么来改进或给我一个更好的方法,谢谢你们!
Ĵ
答案 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)。这使您和读取代码的任何其他人都知道数据应该做什么(不追逐另一个包含文件或猜测设置变量的位置)。我们使用了清晰的变量名称,因此我们知道数据是什么。