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

Php 如果表单字段不为空,则运行函数,php,Php,这样发布isset密码可以吗 我认为应该是ifisset$_POST['username']和&issetmd5$_POST['password']——因为它对它进行了加密,但是如果我将md5包装在带有条件的密码周围,它就不能正常工作 if(isset($_POST['username']) && isset($_POST['password'])) { //run authentication } else { //show form } 布拉德,是的,没关系。发布未加密

这样发布isset密码可以吗

我认为应该是ifisset$_POST['username']和&issetmd5$_POST['password']——因为它对它进行了加密,但是如果我将md5包装在带有条件的密码周围,它就不能正常工作

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

布拉德,是的,没关系。发布未加密的散列密码确实没有任何好处。首先,您必须使用javascript来实现这一点,而且很容易规避。应在服务器端对提交的密码进行散列,以与存储的散列值进行比较

编辑:

另外,运行以下命令,看看您得到了什么:

<?php echo md5(NULL);
因此,md5总是返回一个值

在此基础上,尝试运行以下命令:

<?php var_dump(isset(md5($_POST['password'])));
您将看到以下内容:致命错误:无法在写上下文中使用函数返回值

只能与变量一起使用

编辑:

和之间有区别。MD5是一个简单的散列,甚至在加密方面都不安全

是的,您不应该向服务器提交明文密码,但在客户端对密码进行散列也是一样的。您应该使用密码表单提交,这是您加密服务器和客户端之间通信的方式。

密码表单提交的全部目的

if(isset($_POST['username']) && isset($_POST['password'])) {
检查两个POST参数是否都已设置/可用。没有涉及身份验证,甚至没有假设两个元素的类型都可以是字符串、数组等等。。。。只有在请求中有这样的参数,我才能访问这个元素而不引起注意:未定义索引

不,让我们将其与issetmd5$\u POST['password']进行比较 md5接受一个字符串,因此md5$_POST['password']做出两个假设。 有一个元素$u POST['password'],正是原始测试检查的东西。 b string$\u POST['password']有任何意义,因为传递给md5的任何内容都将转换为string。如果您传递一个数组,结果与md5“array”的结果相同; 加上md5总是返回一个字符串,即输入哈希的字符串表示形式,因此isset总是true,在这里没有多大意义。编辑:如果isset可以与函数的返回值一起使用,则始终为真。但它不能,请参见评论


底线;原始版本有一个明确的用途,即issetmd5。。版本没有那么多-

如果字段的格式是提交的,那么这些值将始终设置为isset。您可能要检查的是它们是否为空。一种简单的方法是与空字符串进行比较,但这要求您首先检查变量是否已设置,否则,当表单尚未提交时,您将收到数组键不存在警告。谢天谢地,有一个名为的简便方法,用于检查给定变量是否已设置,以及它是否具有非假值-因此,您通常需要检查某个变量是否为空

可以将其视为以下内容的简写:

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

我只是担心发布未加密的密码是不好的,即使是在有条件的情况下。如果您想要密码安全,请使用SSL。除此之外,你能做的事情没有什么是无法回避的。布拉德:你不明白什么是加密的。md5不是加密,而是散列。此外,PHP代码与数据提交方式无关。在执行条件时,密码已经以任何形式从客户端提交。您可以随意更改PHP,这不会影响发布的数据。是否可以使用条件设置设置$_POST['password']w/i?只是确定一下甚至更简单。isset无法将函数作为输入,md5将散列任何内容,甚至为NULL。没错,issetfn导致了一个致命错误:无法在写上下文中使用函数返回值。好的,那么它不仅在逻辑上没有意义,在实践中也不可能=]和md5null===md5,因为stringnull===-1:这并没有真正解决OP造成的几个基本误解中的任何一个。具体来说,OP并没有清楚地了解表单提交、哈希或加密的工作原理。“empty和什么有什么关系?”hobodave嗯,看起来他好像在试图判断字段中是否有值。
isset($x) && $x != false