Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP相等字符串不匹配_Php_Html_Sql - Fatal编程技术网

PHP相等字符串不匹配

PHP相等字符串不匹配,php,html,sql,Php,Html,Sql,正如标题所说,我试图将数据库中未使用的“代码”与输入文本字段进行比较。然而,即使两者相等,它们也不匹配。我将在下面进一步解释这个问题: SQL(PromoCode.php): 这只会选择数据库中未使用的代码(其中used=0) 这里是用户尝试输入代码的地方(名称=兑换) 下面是数据库和用户输入之间进行比较的文件(membership.php): //连接到SQL选择 需要一次($routePath.\u mc/PromoCode.mc.php”); $mcPromoCode=新的促销代码_M

正如标题所说,我试图将数据库中未使用的“代码”与输入文本字段进行比较。然而,即使两者相等,它们也不匹配。我将在下面进一步解释这个问题:

SQL(PromoCode.php):

这只会选择数据库中未使用的代码(其中used=0)

这里是用户尝试输入代码的地方(名称=兑换)

下面是数据库和用户输入之间进行比较的文件(membership.php):

//连接到SQL选择
需要一次($routePath.\u mc/PromoCode.mc.php”);
$mcPromoCode=新的促销代码_MC();
//用于SQL选择的变量
$coupons3=$mcPromoCode->SelectPromoCode($db);
//设置了“兑换”按钮
如果(isset($\u POST['reduce'])和&$\u POST['reduce']=='reduce'){
$couponCode=$\u POST['lux\u code'];
//循环通过SQL select
foreach($coupons3作为$coupons\u db3){
if($couponCode==$coupons\u db3['coupon\u code'])){
echo$coups_db3[“优惠券代码];
回声“等于”;
echo$couponCode;

?>

奇怪的想法,但是您是否尝试过将您的逻辑放入查询本身

获取所有现有的促销代码可能会导致性能降低和/或漏洞问题

(未经测试,请告诉我任何语法错误等)


我会尝试在它们上面使用
trim
。其中一个可能有一些“额外”的东西,比如空字节
\0

您可以通过下面的代码看到这一点

$foo = "foo\0";  //<-- add a null byte

echo $foo." is ";;

var_dump('foo' == $foo);
var_dump('foo' == trim($foo));

请注意,输出不显示空字节,当比较它们时,它们不相同,因此这里它显然是假的,但是如果我们修剪它,那么它是相同的,并且是真的

您也可以尝试核选项:

 $foo = preg_replace('/[*[:print:]]/', '', $foo);
这样做的目的是删除所有不可打印的字符。您还可以使用
var_export
,它设计用于为PHP打印语法正确的值(如果可以的话),以便您可以将它们粘贴到代码中等。我希望这里的更多人会使用它,我甚至为此写了一篇文章

任何人:

  var_export($foo);
输出

  'foo' . "\0" . ''
我不确定它为什么不只是做“foo\0”
,但不管怎样,我确信语法方面的操作会起作用。但问题是,您可以看到它现在是如何在调试输出时可见的。不幸的是,您没有粘贴实际文本,有时甚至可以将其删除,这取决于它的处理方式

不确定这是否是原因,但正如我在上面所展示的,这是可能的。编程中的逻辑不会自行崩溃


希望有帮助!

您是否检查了输入或数据库中的尾随空格或前导空格。确保在插入数据库时对结果进行
trim
处理。然后在获取用户输入的代码时,
$couponCode=trim($\u POST['lux\u code'])
也许可以尝试使用===而不是==进行比较,因为这两个===和trim都不会改变输出,所有结果仍然显示为不相等。要添加到@JasonBrumwell的注释中,您需要使用
trim($优惠券db3['优惠券代码])
以防数据库中有尾随空格。您还可以将
echo$couponCode;
更改为
echo“{$couponCode}”;
。这将显示数据库中是否有尾随空格。有时会出现“隐藏字符”你看不到但它们在那里。也许还可以尝试转义字符串,这样你就可以检查它们里面没有什么奇怪的东西。如果不起作用,我会使用
像%value%
来表示contains。
foo is bool(false) bool(true)
 $foo = preg_replace('/[*[:print:]]/', '', $foo);
  var_export($foo);
  'foo' . "\0" . ''