如果表单字段不为null,则运行函数

时间:2010-02-22 15:16:17

标签: php

是否可以像这样发布isset密码?

我认为它应该是if(isset($_POST['username']) && isset(md5($_POST['password']))) - 因为它将其加密发布,但是如果我将md5包装在密码周围w / i条件,它就无法正常工作。

if(isset($_POST['username']) && isset($_POST['password'])) {
 //run authentication
} else {
 //show form
}

3 个答案:

答案 0 :(得分:1)

布拉德,是的,没关系。发布密码哈希(未加密)确实没有任何好处。首先,你必须使用javascript来做到这一点,并且它很容易被规避。提交密码的哈希应该在服务器端完成,以与存储的哈希值进行比较。

修改

另外,运行以下内容,看看你得到了什么:

<?php echo md5(NULL);

因此,md5 总是返回一个值。

最重要的是尝试运行以下内容:

<?php var_dump(isset(md5($_POST['password'])));

您会看到以下内容:Fatal error: Can't use function return value in write context

isset()只能与变量一起使用。

修改

hashingencryption之间存在差异。 MD5是一个简单的哈希,甚至不是加密安全的。

是的,您不应该以明文方式向您的服务器提交密码,但是客户端的哈希是同样的东西。您应该使用HTTPS来提交密码表单,这就是加密服务器与客户端之间通信的方式。

答案 1 :(得分:1)

的全部目的
if(isset($_POST['username']) && isset($_POST['password'])) {

检查两个POST参数是否都已设置/可用。没有涉及身份验证,甚至没有关于两个元素类型的假设(可能是字符串,数组,......)。只有“请求中有这样的参数”和“我可以在不提出通知的情况下访问此元素:未定义的索引”。

不要将其与isset(md5($_POST['password']))进行比较 md5()接受一个字符串,所以md5($ _ POST ['password'])做了两个假设 a)有一个元素$ _POST ['password'],这是“原始”测试检查的内容 b)(字符串)$ _ POST ['password']是有道理的,因为无论你传递给md5()的是什么都被强制转换为字符串。如果传递数组,则结果与md5('Array')相同;
另外,md5()总是返回一个字符串(输入的哈希的字符串表示),因此isset()总是为真,并且在那里没有多大意义。 (编辑:永远为真,如果isset()可以与函数的返回值一起使用。但它不能,请参阅注释)

底线; “原始”版本提供“明确定义”的目的,isset(md5(..))版本不是那么多; - )

答案 2 :(得分:-2)

如果字段位于提交的表单中,则这些值始终isset。您可能想要检查的是它们是否为空。一种简单的方法是与空字符串进行比较,但这需要您首先检查变量是否已设置,否则,当表单尚未提交时,您将获得“数组键不存在”警告。值得庆幸的是,有一个名为empty()的方便方法,用于检查给定变量是否已设置是否具有非假值 - 因此您通常需要检查某些内容是否为为空。

$x = "";
!empty($x);  // false
isset($x);   // true :(

// beware though:
$x = "0";
!empty($x);  // false

将其视为此的简写:

isset($x) && $x != false