Thursday, 30 August 2018

foreach loop does not work with include

Would someone of you know why I'm not able to use a (long)piece of code within a foreach loop?

The code in the foreach loop is only executed once.
This code at topictweets.php works fine on its own but I want to repeat it for each forum. The foreach loop works fine without the include. I also tried to have the code from topic tweets.php plainly in the foreach loop, this didn't work either of course.
The code it includes is used to get topics of a forum from the database and find related tweets, and save those in the database.
Is there some other way to do this?
foreach ($forumlist as $x => $fID) {

    echo 'id:'.$fID.'<br>';

    include 'topictweets.php';
    /////////

    ////////
}

bunch of code in topic tweets.php
 <?php

//?/ VVVV ---- SELECT TOPICS FOR CURRENT FORUM ----- VVVV ////

echo $fID;

$sql = "SELECT Topics_TopicID
FROM Topics_crosstable
WHERE Forums_ForumID = '$fID'";

$result = mysql_query($sql);

if (!$result) {
//echo 'The topiclist could not be displayed, please try again later.';
} else {
if (mysql_num_rows($result) == 0) {
    // echo 'This topic doesn&prime;t exist.';
} else {
    while ($row = mysql_fetch_assoc($result)) {
        //display post data
        // echo $row['Topics_TopicID'];
        // echo': ';

        $topic = "SELECT Name
    FROM Topics
        WHERE TopicID = " . mysql_real_escape_string($row['Topics_TopicID']);

        $topicname = mysql_query($topic);

        if (!$topicname) {
            // echo 'The topic could not be displayed, please try again later.';
        } else {
            if (mysql_num_rows($topicname) == 0) {
                //  echo 'This topic doesn&prime;t exist.';
            } else {
                while ($row = mysql_fetch_assoc($topicname)) {
                    //display post data
                    // echo $row['Name'];
                    // echo'<br>';
                    $topiclist[] = $row['Name'];
                }
            }
        }
    }
}
}

foreach ($topiclist as $key => $value) {
    $terms .= "" . $value . ",";
}
//echo'<p>';
//echo rtrim($terms, ",");
//echo'<p>';
//echo'<p>';
//echo $terms;
//$terms="vintage";
//Twitter account information
$username = "Username";
$password = "Password";

while (true) {

//$terms="vintage";
//echo "search terms: " . substr_replace($terms, "", -1) . "\n";
$url = "https://stream.twitter.com/1/statuses/filter.json";
$cred = sprintf('Authorization: Basic %s', base64_encode("$username:$password"));
$param = "track=" . urlencode(substr_replace($terms, "", -1));
$opts = array(
    'http' => array(
        'method' => 'POST',
        'header' => $cred,
        'content' => $param,
        'Content-type' => 'application/x-www-form-urlencoded'),
    'ssl' => array('verify_peer' => false)
);
$ctx = stream_context_create($opts);
$handle = fopen($url, 'r', false, $ctx);
//var_dump($handle);
$content = "";
$flag = true;
while ($flag) {
    $buffer = fread($handle, 100);
    //$buffer = stream_get_line($handle, 1024, "\n");

    $a = explode("\n", $buffer, 2);
    $content = $content . $a[0];
    #var_dump($a);
    if (count($a) > 1) {
        #echo $content;
        #echo "\n";
        $r = json_decode($content, true);
        #var_dump($r);
        //  echo '<p>';
        //  echo "text: " . $r["text"];
        //  echo '<br>';
        //  echo "\nrceated_at: " . $r["created_at"];
        //  echo '<br>';
        //  echo "\nuser screen name: " . $r["user"]["screen_name"];
        //  echo '<br>';
        //  echo "\nuser id: " . $r["user"]["id"];
        //  echo '<br>';
        //  echo "\nid : " . $r["id"];
        //  echo '<br>';
        //  echo "\nin_reply_to_status_id: " . $r["in_reply_to_status_id"];
        //  echo '<p>';
        // echo "\n\n";
        $created_at = $r["created_at"];
        $created_at = strtotime($created_at);
        $mysqldate = date('Y-m-d H:i:s', $created_at);
        //

        // echo'<p>';
        foreach ($topiclist as $key => $value) {
            // echo'getshere!';
            //$whichterm = $r["text"];
            $whichterm = '"' . $r["text"] . '"';
            //echo $whichterm;
            if (stripos($whichterm, $value) !== false) {
                // echo 'true:' . $value . '';
                //find topicid
                $whattopic = "SELECT TopicID
                FROM Topics
                WHERE Name = '$value'";

                //var_dump($whattopic);
                $tID = mysql_query($whattopic);
                //var_dump($tID);

                if (!$tID) {
                    // echo 'topic id not found.';
                } else {
                    if (mysql_num_rows($tID) == 0) {
                        // echo 'This topic doesn&prime;t exist.';
                    } else {
                        while ($rec = mysql_fetch_assoc($tID)) {

                            $inserttweets = "INSERT INTO
                Tweets(Topics_TopicID, AddDate, Tweetcontent)
            VALUES('" . mysql_real_escape_string($rec['TopicID']) . "',
                                   '" . mysql_real_escape_string($mysqldate) . "',
                                   '" . mysql_real_escape_string($r["text"]) . "')";

                            //WHERE TopicID = " . mysql_real_escape_string($row['Topics_TopicID'])
                        }
                    }
                    $addtweet = mysql_query($inserttweets);
                    if (!$addtweet) {
                        //something went wrong, display the error
                        //echo 'Something went wrong while adding tweet.';
                        //echo mysql_error(); //debugging purposes, uncomment when needed
                    } else {
                        echo 'Succesfully added tweet';
                    }
                }
            }
        }

        die();
        $content = $a[1];
    }
}
fclose($handle);
}

?>


"Pasting" a bunch of code inside a loop isn't a great practice. In fact, what you're looking for is a function or the use of a defined class. So, if you can, define a function in your topictweets.php that will contain your code and use it in your loop:
include 'topictweets.php';
foreach ($forumlist as $x => $fID) {

    echo 'id:'.$fID.'<br>';
    processYourForums($fID);

    /////////

    ////////
}

0 comments:

Post a Comment