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
}

这是主循环,它循环我拥有的一些变量,并从外部网站获取帖子并将 URL 和 error_message 发送到函数 fetch_posts

(我把它发送了,我通过参考来做,因为我认为这是让它保持全球性的唯一方法???)

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

这是循环之后的最后一个片段,如果错误消息包含任何字符,它应该将错误消息发送到函数错误,但它没有检测到任何字符?

4

1 回答 1

4

你要:

strlen($error_message) > 0

不是

strlen($error_message > 0)

此外,调用时传递引用自 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 回答