【问题标题】:Comparing 2 exact same strings returns false比较 2 个完全相同的字符串返回 false
【发布时间】:2011-12-25 05:58:25
【问题描述】:

我有一个通过 html 表单发布的变量:

$_POST['ref']

还有一个从数据库中的表中提取的变量:

$row['ref']

我有一个基本的比较脚本来检查它们是否相同:

$ref = $_POST['ref'];

$result = mysql_query("SELECT * FROM logbook.job");
if (!$result) {
    die("Query to show fields from table failed");
}


    $row = mysql_fetch_array($result);
    $refdb = $row['ref'];
    $refform = $_POST['ref'];

    echo $_POST['ref'] ."<br>". $row['ref'] . "<br><br>";

        if ($refdb == $refform) {
    echo "Yes they are<br><br>";
    }

    else {
    echo "No they are not<br><br>";
    }


    if (is_string($_POST['ref'])) 
 {
 echo "Yes";
 } else {
 echo "No";
 }
echo "<br>";
    if (is_string($row['ref'])) 
 {
 echo "Yes";
 } else {
 echo "No";
 }

哪些输出:

G2mtxW
G2mtxW

No they are not

Yes
Yes

我把它们都呼出来了。比我问他们是否相同。然后我检查每个是否是一个字符串。

他们怎么不一样?我怎样才能让他们匹配

任何帮助将不胜感激

【问题讨论】:

  • 变量中有空格吗?
  • 只是为了验证,你能在每个回显的字符串后面加上*吗?
  • 尝试var_dump($row['ref'],$_POST['ref']); 并以这种方式比较它们,看看是否有任何问题。
  • 尝试使用strlen()trim()进行检查
  • 您好,我发现表单中的所有变量都添加了一个空格。谢谢我用 trim() 清除它们

标签: php mysql forms


【解决方案1】:

尝试对字符串使用二进制安全比较:

result = strcmp($str1, $str2);

如果结果为 0,则两者相同。否则,它们不是。

【讨论】:

  • 这就是解决方案!谢谢!
【解决方案2】:

您的一个字符串(可能是来自数据库的那个)可能以空值结尾。我已经测试了以下

$foo = "abc\0";
$bar = "abc";
echo "$foo\n$bar\n";
if($foo == $bar)
  echo "Equal.";
else
  echo "Not equal."

输出是

abc
abc
Not equal.

【讨论】:

【解决方案3】:

尝试var_dump-ing 这两个值,检查它们的长度并使用视图源检查它们。它们在某种程度上是不同的。

【讨论】:

    【解决方案4】:

         echo $status_message;
         echo "Accepted";
    
         if(strcmp($status_message,"Accepted")==0)
         {
                 echo "equal";
         }
         else
         {
                echo "not equal";
         }
    

    ?>

    $row['status'] 是表中的一个字段

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      相关资源
      最近更新 更多