php - 检查带有===''的空字符串不起作用

时间:2011-08-29 15:24:31

标签: php mysql string

当我测试我的表单中的textarea是否为空以进行重定向,因此它不会在php中提交它时,它不起作用。

textarea命名为$_POST['message'],我知道变量存在,因为如果我这样做的话;

if (isset($_POST['message'])) {
    header('Location:/');
    exit();
}

然后它总是重定向回索引页面,所以变量必须存在,但是如果我这样做的话;

if (empty($_POST['message'])) {
    header('Location:/');
    exit();
}

它不起作用,也尝试使用= / == / ===

的所有三个组合
if ($_POST['message'] === '') {
    header('Location:/');
    exit();
}

还有......

if (empty(trim($_POST['message']))) {
    header('Location:/');
    exit();
}

为什么会发生这种情况?我怎么能阻止它,我真的需要停止它,因为我不想在我的mysql表中使用空值。

我做了一些研究,似乎其他人有这个问题,但我还没有看到答案。

3 个答案:

答案 0 :(得分:2)

你可能在字符串中有一些空格,而这些空格不会被trim()去掉。

在它上面做一个strlen()来看看是什么,然后逐字节地记录它(http://stackoverflow.com/questions/591446/how-do-i-get-the-byte-values-of -a-字符串中的PHP)。

您可以考虑的一件事是确保您的textarea在标记中没有任何内容(空格,符号,等等),如下所示:

<textarea></textarea>

答案 1 :(得分:2)

如果你做得对,我很确定你的最后一次尝试会起作用,这个:

if (empty(trim($_POST['message']))) {
    // ...
}

...是语法错误。 empty是一种语言结构,不接受表达式。尝试:

$message = isset($_POST['message']) ? trim($_POST['message']) : '';
if (empty($message)) {
    // $_POST['message'] is empty
}

答案 2 :(得分:0)

这将忽略3个字符以下的所有输入长度:

if (isset($_POST['message']) && strlen(trim($_POST['message'])) < 3) {
    header('Location:/');
    exit();
}

但是,如果您只想查看,如果提交了表单,请提交提交按钮:

<input type="submit" name="submit" value="send" />

php代码将是

if (!array_key_exists('submit', $_POST)) {
    header('Location:/');
    exit();
}