-1

ここでまた行きます、私はこれについていくらかの助けが必要です。preg_matchが希望どおりに機能しておらず、サイトリンクを検証していません。コードの何が問題になっているのかを確認するために、2番目の目が必要です。

if (!empty($_POST["url"]))
      {
          if (filter_var($_POST["url"], FILTER_VALIDATE_URL))
          {
              if (!preg_match('/^http(s)?:\/\/(?:[a-z\d-]+\.)*mysite.com(?:(?=\/)|$)/i', $url))
              {
                echo "<strong>Error</strong>: Not a valid Mysite.com link or could shorten link";
              } else {
                  $result = $sql->query("SELECT `id` FROM `shortcuts` WHERE `url`='{$_POST["url"]}'");
                  $id = $result[0]["id"];
                  if (empty($id))
                  {
                      $result = $sql->query("INSERT INTO `shortcuts` (`url`) VALUES ('{$_POST["url"]}')");
                      if ($result)
                      {
                          $id = $sql->get_increment();
                          if (empty($id))
                          {
                              echo "FAILED ENCODE";
                              exit(1);
                          }
                      }
                      $shorturl = "http://mysite.com/".encode($id);
                  }
              }
          }
      }
4

3 に答える 3

2

すでにURLを検証しているので、それを使用parse_url()してホスト名を抽出してみませんか?

if (false === stristr(parse_url($_POST['url'], PHP_URL_HOST), 'mysite.com')) {
    // not valid url
}

または、'mysite.com`をホスト名の最後のビットにする必要がある場合:

if (0 !== substr_compare(parse_url($_POST['url'], PHP_URL_HOST), 'mysite.com', -10, 10, true)) {
    // invalid url
}
于 2012-10-24T13:48:50.130 に答える
0

コードの複雑さを軽減して、デバッグを容易にします。私があなたを正しく理解していれば、あなたはここで特定の問題について心配しています:

if (matches_shorturl_pattern($url) {
    // go on ...
}

自分で関数を作成します。良い点は、何かを送信したりデータベースにアクセスしたりすることなく、分離してテストできることです。

/**
 * is URL a valid shorturl by syntax?
 *
 * @param string $url
 * @return bool
 */
function matches_shorturl_pattern($url) {
    $pattern = '/^http(s)?:\/\/(?:[a-z\d-]+\.)*mysite.com(?:(?=\/)|$)/i';
    $result = preg_match($pattern, $url);
    if ($result === FALSE) {
        throw new Exception('The regex did a poop.');
    }
    return (bool) $result;
}

もう一度テストしたい入力を使用して、この関数を単独でテストする方がはるかに簡単です。また、エラー状態を適切にチェックしています。幸運を。

于 2012-10-24T14:07:05.180 に答える
0

見つけた!、

if (!preg_match('/^http(s)?:\/\/(?:[a-z\d-]+\.)*mysite.com(?:(?=\/)|$)/i', **$url**))  

新着

if (!preg_match('/^http(s)?:\/\/(?:[a-z\d-]+\.)*mysite.com(?:(?=\/)|$)/i', **$_POST["url"]**))
于 2012-10-24T14:20:28.063 に答える