【问题标题】:!empty(trim($_POST['username']!empty(trim($_POST['用户名']
【发布时间】:2013-06-04 00:19:47
【问题描述】:

好的,问题是当我使用修剪功能时不起作用,但是当我在没有修剪功能的情况下运行代码时,它可以正常工作,但不能正常工作(表单接受空格)

<?php
session_start();
unset($_SESSION['username']);

 if (isset($_SESSION['username']))
    {echo "You are in already";}

 else if ($_SERVER['REQUEST_METHOD'] == 'POST')
 {      

 if (!empty(trim($_POST['username'])) && !empty(trim($_POST['email'])))
    {
        $uname = htmlentities($_POST['username']);
        $email = htmlentities($_POST['email']);
  $_SESSION['username'] = $uname;

            echo "THANKS: " . $uname . "<br />";
    }
 else { echo "fill the goddemn field"; }


  } else { ?>

<form action="index.php" method="post">
 <label for="username">USERNAME:</label>
 <input type="text" name="username" />
 <label for="E-MAIL">E-mail:</label>
 <input type="text" name="email" />
 <input type="submit" value="Enter" />
</form>


<?php    } ?>

我尝试了手册http://php.net/manual/en/function.trim.php,但它很难阅读,我什么也没弄明白。

【问题讨论】:

  • 您不能将trim() 的结果直接传递给empty()。打开错误报告,您将看到与之相关的错误。 empty() 需要一个 变量 作为它的参数,所以你必须先将 trim($_POST[]) 存储到 vars 中,然后通过 empty() 进行测试
  • error_reporting(E_ALL); ini_set('display_errors', 1);总是在开发代码时这样做。
  • 旁注:似乎与unset 一个变量相反,然后立即检查它是否设置为isset
  • 看看at the empty() docs,从 PHP 5.5 开始,它将最终支持任意表达式,而不是被任何不是真实变量的东西阻塞。

标签: php trim fatal-error is-empty


【解决方案1】:

正如PHP manual 所说:

empty — 判断一个变量是否为空

在您的情况下,trim 是一个函数调用,而不是一个变量。

如果你真的想内联你的if 语句,你可以使用类似的东西:

if (!empty($var=trim($_POST['username'])) && !empty($var=trim($_POST['email'])))

但更好的实现应该是:

$username = array_key_exists('username', $_POST) ? trim($_POST['username']) : null;
$email = array_key_exists('email', $_POST) ? trim($_POST['email']) : null;

if (!empty($username) && !empty($email))
{
    (...)

【讨论】:

  • 函数empty() 将不接受任何任意表达式(低于 PHP 5.5),因此函数调用将不起作用,以及作为变量赋值,呈现您的内联示例无效。
  • 有没有办法快速检查函数返回是否为空
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 2021-03-28
  • 2012-10-14
相关资源
最近更新 更多