【问题标题】:PHP if / if else statement not working as expected (Probably Simple)PHP if / if else 语句未按预期工作(可能很简单)
【发布时间】:2016-07-11 11:16:33
【问题描述】:

好的,我正在尝试执行一个不符合我预期的 IF / else IF 语句。 我正在尝试检查某人为某些事情输入的 URL 地址。 我这样做的方式可能很垃圾,但我并不擅长编程。

除了这个位 if (strpos($URLcheck, "http://") == false)

它应该检查 URL 中是否包含 http://。但不管它是否这样做,它的行为方式仍然完全相同。

我什至尝试通过去除 http:// 或 https:// 来强制将 http:// 插入 URL。

当我回显变量 ($URLcheck) 时,它显示带有 http://.....so 的 URL 为什么我的代码不起作用? 谢谢

    $URL = htmlspecialchars($_POST["URL"]);

    $URLREMOVESarray = array('https//:', 'http//:');
    $URLhttp = str_replace($URLREMOVESarray, "", $URL);

    $URLcheck = "http://" . $URLhttp;

    $URLsearchcheck2 = 'property-profile/';

    $URLsearchcheckDomain = "domain";


    if (strpos($URL, $URLsearchcheck2) !== false) {

   echo "Test 1";
   }
   else if (strpos($URLcheck, "http://") == false) {
   echo "Test 2";
   echo $URLcheck;
   }
   else if (strpos($URLcheck, $URLsearchcheckDomain) == false) {

   echo "Test 3";
   }
   else if (strpos($URLcheck, $URLsearchcheckDomain) == true) {
         Continue1();
   }

更新:为什么这不起作用仍然没有解决方案?我什至从这个页面复制并粘贴了代码,它仍然不起作用。

【问题讨论】:

  • 您应该使用 === 运算符。 strpos
  • 您强制将 HTTPS 域前缀替换为 http 前缀。这不是一个好方法
  • false 等于 0 如果您在不强制相同类型的情况下进行比较。将具有相同类型的内容与===!== 进行比较
  • 您需要养成accepting answers 的习惯,它可以帮助您解决问题。您将获得积分,并鼓励其他人帮助您。
  • 感谢您的信息,我尝试了所有替代方法 == === !== 但由于某种原因,它们都不起作用

标签: php if-statement


【解决方案1】:

使用相同的!== false 语句:

$URLcheck = 'http://www.google.com';
if (strpos($URLcheck, "http://") !== false) {
   echo "Test 2";
   echo $URLcheck;
}

【讨论】:

  • 感谢该代码。我自己试过了,但没有用。我能理解为什么
【解决方案2】:

strpos($URLcheck, "http://")$URLcheck 字符串中搜索“http://”,如果找到则返回其位置。在您的情况下,它确实位于位置 0($URLcheck 字符串的开头)。

如果strpos() 没有找到它正在寻找的东西,它会返回一个false,它与0 不同,尽管它有时在PHP 中看起来是这样。这是许多经验不足的 php 开发人员感到困惑的根源,我建议至少看看http://php.net/manual/en/types.comparisons.php

无论如何,在您的情况下,然后检查strpos 返回的0 是否等于 false(带有==)。但是由于0 是整数类型而false 是布尔类型,PHP 必须将0 转换为布尔值,并且truefalse 之间的零的最佳匹配显然是false。这就是为什么您的 if 语句的行为如此,它实际上是完全正确的行为。

所以你需要做的是检查你的strpos() 输出是否与false相同,而不是它是否相等。为此,您只需在条件中添加另一个 =,因此它的读数为 strpos($URLcheck, "http://") == false

【讨论】:

  • 感谢您的精彩解释。我也尝试了这段代码,但它也对我不起作用。不知道是什么问题。
【解决方案3】:

好的,我从建议中尝试过没有任何效果,所以我使用了这段代码并且它有效。不知道为什么其他代码不起作用

    $pos = strpos($URLhttp, 'example.com');

    if ($pos === false) {
    echo "Test 1";
    }

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 2020-03-11
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多