【问题标题】:string matching via if statement PHP通过 if 语句 PHP 匹配字符串
【发布时间】:2014-10-03 01:46:15
【问题描述】:

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

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


    ?>

它确实有效,但方式错误。我输入的每一个字母都是“你写了一个”。我只希望它在用户输入 a 时回显。否则,回显 'You did not write a' 。

编辑:当我尝试 == 而不是 = 时,它会说“你没有为所有内容写 a”。即使我输入 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>

查询.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";
    }


?>

解决方案:

修剪()

【问题讨论】:

  • 他们都在告诉您,您正在将字母“a”分配给变量 $input。要比较两者,必须使用 ==。闭上眼睛接受答案:)
  • 好的,能把第一页和第二页的完整代码贴出来吗?我可以自己试试吗?
  • 您真的只在文本区域中输入一个a 吗?你真正想要比较的是什么 - 可能在字符串的开头出现a
  • 添加了两个页面的完整代码

标签: php if-statement


【解决方案1】:

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

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

编辑:在此处再次插入 - 在您发布的代码中(我复制粘贴它),默认情况下您的文本区域中有空格。

不要在 and 标记之间放置换行符。这会在“a”的开头添加空格。

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

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

【讨论】:

  • 如果str1小于str2则返回 如果 str1 大于 str2,则为 0,如果它们相同,则为 0。
  • @Ryan Murphy 这一定是在堆栈的更底层。你可以发布你的表格的代码吗?也许它的 enctype 是错误的?如果传入的数据是字符串并且只包含“a”,那么这两种比较都应该有效。
  • 感谢您添加剩余代码。你能运行 print_r($_POST);在响应页面中并发布其内容?
  • 它想出了:数组([textarea] => a [send] => Translate)
  • @Ryan Murphy - 出于另一个可能的原因进行了编辑 - 在您的 textarea 标签中附加了额外的空格,“a”被附加到。让我知道这是否有效。
【解决方案2】:

您的问题是 === 运算符之间的混淆。

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

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

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

注意,还有一个三等号运算符===,也是用来比较的,这里也想比较两边的数据类型。对于基本使用,双等号通常就足够了,但手册页会为您提供有关两者之间差异的更多信息。

[编辑]

重新编辑 - 所有建议 == 而不是 = 的 cmets 都是正确的。单等号运算符是错误的。如果双等号运算符仍然存在问题,那么$input 实际上并不等于a

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

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

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

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

如果您不担心空白,请使用trim() 函数来消除它。

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

[再次编辑]

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

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

这将导致创建文本区域时使用换行符作为默认内容,因为开始和结束&lt;textarea&gt; 标记位于不同的行上。如果您只是在其中输入a,那么您实际提交的内容将是a 加上一个换行符。

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

【讨论】:

    【解决方案3】:

    使用运算符== 而不是=

    【讨论】:

    • $input = $_POST["textarea"]; // 这里使用 = || if($input == "a"){ // 在这里使用 ==
    【解决方案4】:

    【讨论】:

    • @Ryan,我已经看到了;这就是为什么我要求提供两个页面的完整脚本,以便我可以看到发生了什么。
    猜你喜欢
    • 2019-06-26
    • 2012-02-07
    • 2013-04-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多