0

コードはたくさんありますが、そのほとんどは無関係なので、スニペットを投稿します

$error_message = "";

function died($error) // if something is incorect, send to given url with error msg
{
    session_start();
    $_SESSION['error'] = $error;
    header("Location: http://mydomain.com/post/error.php");
    die();
}

これは正常に動作し、ユーザーにエラー セッションを送信します。これにより、error.php にエラーが表示されます。

function fetch_post($url, $error_message) {

    $sql      = "SELECT * FROM inserted_posts WHERE name = '$name'";
    $result   = mysqli_query($con, $sql);
    $num_rows = mysqli_num_rows($result);

    if ($num_rows > 0) {
        $error_message .= $url . " already exists in the database, not added";
        return $error_message;
    }
}

これも問題なく動作し、データベースに「投稿」が存在するかどうかを確認し、存在する場合は、変数 $error_message にエラーを追加します

while ($current <= $to) {

    $dom   = file_get_html($start_url . $current); // page + page number
    $posts = $dom->find('div[class=post] h2 a');

    $i = 0;
    while ($i < 8) {

        if (!empty($posts[$i])) { // check if it found anything in the link

            $post_now = 'http://www.somedomain.org' . $posts[$i]->href; // add exstension and save it

            fetch_post($post_now, &$error_message); // send it to the function
        }

        $i++;
    }

    $current++; // add one to current page number
}

これはメインループです。私が持っているいくつかの変数をループし、外部 Web サイトから投稿を取得し、URL と error_message を関数 fetch_posts に送信します

(私はそれを一緒に送ります、そして私はこれがそれをグローバルに保つ唯一の方法だと思いますので参照してください???)

if (strlen($error_message > 0)) {
    died($error_message);
}

そして、これはループの直後の最後のスニペットです。エラー メッセージに文字が含まれている場合、エラー メッセージを関数 error に送信することになっていますが、文字が検出されませんか?

4

1 に答える 1

4

あなたがしたい:

strlen($error_message) > 0

いいえ

strlen($error_message > 0)

また、call-time pass-by-reference は 5.3.0 以降非推奨となり、5.4.0 以降は削除されているため、次のように関数を呼び出すのではなく:

fetch_post($post_now, &$error_message);

次のように定義します。

function fetch_post($url, &$error_message) {

    $sql      = "SELECT * FROM inserted_posts WHERE name = '$name'";
    $result   = mysqli_query($con, $sql);
    $num_rows = mysqli_num_rows($result);

    if ($num_rows > 0) {
        $error_message .= $url . " already exists in the database, not added";
        return $error_message;
    }
}

ループ内でエラー メッセージを返す場合は、次のようにすることをお勧めします。

$error_messages = array();

// ... while loop

if ($error = fetch_post($post_now))
{
  $error_messages[] = $error;
}

// ... end while

if (!empty($error_messages)) {
    died($error_messages); // change your function to work with an array
}
于 2013-03-26T21:05:29.723 に答える