2

ifコマンドの関数内でelse関数を使用しようとしていますpreg_match

$month1dataCURLからフェッチされ、動作することが確認されています。

次のコードは次のとおりです。

global $attempt;
$attempt = mysql_escape_string($_GET['attempt']);

if (preg_match('/<td colspan=8(.*)<\/table/s', $month1data, $matches)) {
    //Content found do stuff here

    unset ($ch);
    unset ($cache);
    unset ($firstmonthdata);
    unset ($matches);
} else { // start else preg match
    if ($attempt = '3') { //start if attempt = 3

        echo 'failed 3 times - showing error';
        echo '<script type="text/javascript">
        <!--
        window.location = "http://www.website.com/error.php?error=2"
        //-->
        </script>';

    } // end if attempt = 3
    else { //start if attempt dont = 3

        echo 'keep trying for 3 times';
        $attempt = $attempt +1;
        echo '<script type="text/javascript">
        <!--
        window.location = "http://www.website.com/page.php?email=' . $email . '&password=' . $password . '&attempt=' . $attempt . '"
        //-->
        </script>';
    }// end if attempt dont 3 else
} // end else preg match

ただし、ページが読み込まれると、エラーページに直接移動します。

"http://www.website.com/error.php?error=2"

他のいくつかの投稿を見ましたが、何が問題なのかわかりません。これらのメソッドをこのように実装することは可能ですか、それとも何か足りないものがありますか?

4

2 に答える 2

5

そのはず:

if ($attempt === '3') {
             ^^^

に割り当て3てい$attemptます。

または、データベースが含まれていないように見えるので、さらに良いです:

$attempt = (int) $_GET['attempt'];

...

if ($attempt === 3) {

編集:それとは別に、訪問者はクエリ文字列を簡単に操作できるため、この種のチェックの試行にはセッションを使用する方がよいでしょう。

于 2013-01-02T13:27:08.277 に答える
2

以下

if ($attempt = '3')

する必要があります

if ($attempt == '3')
于 2013-01-02T13:28:34.347 に答える