字符串匹配通过if语句PHP

RSM*_*RSM 4 php if-statement

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

$input
Run Code Online (Sandbox Code Playgroud)

然后通过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";
    }


    ?>
Run Code Online (Sandbox Code Playgroud)

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

编辑:当我尝试==而不是=它说'你没有为所有东西写'.即使我打字了.

编辑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>
Run Code Online (Sandbox Code Playgroud)

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";
    }


?>
Run Code Online (Sandbox Code Playgroud)

解:

修剪()

Dea*_*ado 10

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

if($input == "a"){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

编辑: 在这里另一个刺 - 在你发布的代码中(我复制粘贴它)默认情况下你的textarea中有空格.

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

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

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


Spu*_*ley 9

你的问题是===运营商之间的混淆.

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

使用本身就是一个单一的等号将设置到左边的值的权值(根据其在代码示例的第一行使用).

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

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

[编辑]

重新编辑 - 所有评论都表明==不是=正确的.单等运算符是错误的使用方法.如果你仍然遇到双等运算符的问题,那么$input实际上并不相等a.

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

为了证明这一点,您可能希望像这样打印:

print "<pre>[".$input."]</pre>";
Run Code Online (Sandbox Code Playgroud)

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

如果您不担心空白区域,请使用该trim()功能来消除它.

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

[再次编辑]

好的,看看你的HTML代码,我会说这绝对是白色空间问题.

<textarea name="textarea" id="textarea">
</textarea>
Run Code Online (Sandbox Code Playgroud)

这将导致使用换行符创建textarea作为其默认内容,因为开始和结束<textarea>标记位于单独的行上.如果您只是输入a它,您实际提交的内容将a加上换行符.

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