字符串匹配通过if语句PHP

时间:2011-03-10 17:57:20

标签: php if-statement

我有一个输入文本区域,当填写并发送时,将输入的内容放入变量

$input

然后通过if语句检查它是否是字母a。如果它是回声 - 你写了字母a,否则 - 你没有写字母a。

<?php    
 $input = $_POST["textarea"];

    echo $input;
    echo "<br />";

    if($input = "a"){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }


    ?>

它确实有效,但方向错误。我输入的每个字母都是'你写的'。如果用户输入一个,我只希望它回应这个。否则,回声'你没有写'。

编辑:当我尝试==而不是=它说'你没有为所有东西写'。即使我输入了一个。

编辑2:当我尝试字符串比较参数时,它没有用。  我出错的任何建议?

两页的完整文章:

的index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

</head>

<body>
<h1>Fun Translator</h1>

<form method="post" action="query.php">
 <textarea name="textarea" id="textarea">
 </textarea>
 <input type="submit" name="send" value="Translate" />
</form>


</body>
</html>

query.php

<?php
$input = $_POST["textarea"];

echo $input;
echo "<br />";

if(strcmp($input,'a')==0){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }


?>

解决方案:

修剪()

4 个答案:

答案 0 :(得分:9)

==是比较的条件。 =是赋值运算符。

if($input == "a"){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }

您可能希望使用strcmp,因为它是二进制安全的。

if(strcmp($input,'a')==0){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }

http://php.net/manual/en/language.operators.comparison.php

http://php.net/manual/en/function.strcmp.php

编辑:在此处再次尝试 - 在您发布的代码中(我复制粘贴它)默认情况下,您的textarea中有空格。

不要在和标签之间放置换行符。这会在'a'的开头添加空格。

删除它使我在测试中正常工作。

编辑:根据接受的答案和重新发布的代码,trim()实际上是删除所有前导和尾随空格的正确函数。

答案 1 :(得分:7)

您的问题是===运营商之间的混淆。

如果要在PHP中比较两个值,则必须使用==(即两个等号一起)。

单独使用一个等号将右侧的值设置为左侧的值(根据代码示例第一行中的使用)。

请参阅php手册上的此页:http://www.php.net/manual/en/language.operators.comparison.php

注意,还有一个tripple-equal operator ===,它也用于比较,你也想要比较双方的数据类型。对于基本用途,双倍相等通常就足够了,但手册页将为您提供有关两者之间差异的更多信息。

<强> [编辑]

重新编辑 - 提示==代替=的所有评论都是正确的。单等运算符是错误的使用方法。如果您仍然遇到双等运算符问题,那么$input实际上不等于a

在这种情况下,您可能需要调试输入。假设您的echo $input;行确实显示a,我会说最有可能的情况是您正在输入一些空格,可能是回车或类似的东西。

为了证明这一点,你可能想要这样打印:

print "<pre>[".$input."]</pre>";

这将显示您可能输入的任何意外的额外字符。

如果您不担心空白区域,请使用trim()功能将其删除。

您还可以使用strlen()之类的函数来检查字符串的长度等等。

[再次编辑]

好的,看看你的HTML代码,我会说这肯定是白色空间问题。

<textarea name="textarea" id="textarea">
</textarea>

这将导致使用换行符创建textarea作为其默认内容,因为打开和关闭<textarea>标记位于不同的行上。如果您只是在其中输入a,那么您实际提交的内容将是a加上换行符。

在检查输入之前,最好的建议可能是trim()

答案 2 :(得分:2)

使用运算符==代替=

答案 3 :(得分:0)