andyderuyter
andyderuyter

Reputation: 1111

nested foreach loop doesn't work

I have following code:

foreach($RSS_DOC->channel->item as $RSSitem) {

    $item_id    = md5(str_replace(array('\'', '"'), '', $RSSitem->title));
    $fetch_date = date("Y-m-j G:i:s"); //NOTE: we don't use a DB SQL function so its database independant
    $item_title = str_replace(array('\'', '"', '(', ')', ' - ', '.'), '', $RSSitem->title); 
    $item_date  = date("Y-m-j G:i:s", strtotime($RSSitem->pubDate));
    $item_url   = $RSSitem->link;

    $words = explode(' ', $item_title);

    echo "Processing item '" , $item_id , "' on " , $fetch_date     , "<br/>";
    echo $item_title, " - ";
    echo $item_date, "<br/>";
    echo $item_url, "<br/>";

    // Does record already exist? Only insert if new item...

    $item_exists_sql = "SELECT item_id FROM rssingest where item_id = '" . $item_id . "'";
    $item_exists = mysql_query($item_exists_sql, $db);
    if(mysql_num_rows($item_exists) < 1) {

        echo "<font color=green>Inserting new item..</font><br/>";
        $item_insert_sql = "INSERT INTO rssingest(item_id, feed_url, item_title, item_date, item_url, fetch_date) VALUES ('" . $item_id . "', '" . $feed_url . "', '" . $item_title . "', '" . $item_date . "', '" . $item_url . "', '" . $fetch_date . "')";
        $insert_item = mysql_query($item_insert_sql, $db);

        foreach ($words as $value) {

            $word_exists_sql = "SELECT id FROM words WHERE word = '" . $value . "'";
            $word_exists = mysql_query($word_exists_sql, $db);

            if (mysql_num_rows($word_exists) < 1) {
                $word_insert_sql = "INSERT INTO words(word, count) VALUES ('" . $value . "', '1')";
                $insert_word = mysql_query($word_insert_sql, $db);
                echo "<font color=green>Inserting word ".$value."..</font><br/>";

            } else {
                $word_update_sql = "UPDATE words SET count = count+1 WHERE word = '" . $value . "'";
                $update_word = mysql_query($word_update_sql, $db);
                echo "<font color=green>Updating count for word ".$value."..</font><br/>";
            }
        }



    } else {
        echo "<font color=blue>Not inserting existing item..</font><br/>";
    }

    echo "<br/>";
}

The first foreach works as expected, the second one only inserts the first word of the first rss item in the DB, even though the echo's for the rest of the words are displayed correctly.

What am I missing?

Upvotes: 0

Views: 235

Answers (1)

paxdiablo
paxdiablo

Reputation: 881223

$word_insert_sql = "INSERT INTO words(word, count) VALUES ('" . $value . "', count+1)";

Where exactly is that count + 1 supposed to be coming from. Surely that should just be 1.

In any case, where you're attempting DB operations, it's usually a good idea to check that they've worked before continuing.

Upvotes: 1

Related Questions