Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Tuesday, June 30
    Facebook X (Twitter) Instagram Pinterest Vimeo
    ABS Africa TV
    • Breaking News
    • Trending
    • Africa News
    • World News
    • Features
    • Technology
    • Sports
    • Politics
    • More
      • Culture
      • Lifestyle
      • Travel
      • Business
      • Environment
      • Legal
      • Health
      • Cameroon
      • Ambazonia
      • AfroSingles
      • Environ/Climate
      • Editorial
      • The Leak Magazine
    • Donate
    Subscription
    ABS Africa TV
    Home»Breaking News»Iran draw sends Senegal into last 32 as Africa secures seven knockout spots | The Eastleigh Voice
    Breaking News

    Iran draw sends Senegal into last 32 as Africa secures seven knockout spots | The Eastleigh Voice

    Nouman mBy Nouman mJune 29, 2026No Comments11 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Iran draw sends Senegal into last 32 as Africa secures seven knockout spots | The Eastleigh Voice
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 22

    Iran draw sends Senegal into last 32 as Africa secures seven knockout spots
    Iran draw sends Senegal into last 32 as Africa secures seven knockout spots

    Senegal players celebrating. (Photo: FIFA)

    Read this story aloud

    Listen to the clean text version of this article

    Ready
    5 min listen
    Audio reading is not supported on this browser.

    Although the draw benefited Senegal, Iran remains in contention to reach the World Cup knockout stage for the first time in their history

    Senegal booked their place in the World Cup Round of 32 without kicking a ball on Friday after Iran’s 1-1 draw with Egypt mathematically confirmed the Lions of Teranga as one of the tournament’s eight best third-placed teams.
    Pape Thiaw’s side had done their part emphatically with a commanding 5-0 victory over Iraq to finish their group campaign, but they still needed results elsewhere to go their way.
    Those favours arrived as Uruguay were eliminated following their defeat to Spain, before Iran’s stalemate against Egypt removed another potential challenger for one of the coveted best third-place berths.

    More To Read

    • Records tumble as historic 2026 FIFA World Cup group stage rewrites football history
    • Canada beats <a href="https://absafricatv.com/traveling-to-south-africa-heres-what-to-know-about-the-june-30-protests-travel-noire/" title="Traveling To South Africa? Here’s What To Know About The June 30 Protests – Travel Noire”>South Africa to reach FIFA World Cup round of 16 for first time
    • 2026 World Cup knockout fixtures set after thrilling group stage
    • Messi makes World Cup history as Argentina complete perfect group stage while Algeria survive dramatic finale to seal knockout spot
    • DR Congo end 52-year World Cup wait with historic first victory to reach knockout round
    • Kane becomes England’s all-time World Cup top scorer as Croatia edge Ghana to clinch knockout spot

    The outcome means Senegal is now guaranteed a place in the knockout rounds, becoming the seventh African nation to qualify for the Round of 32.
    Morocco, South Africa, Cape Verde, Ghana, Egypt, the Ivory Coast, and now Senegal have all progressed, while Algeria and DR Congo still have an opportunity to increase Africa’s representation in the knockout phase when they play their decisive final group matches on Saturday.
    Although the draw benefited Senegal, Iran remains in contention to reach the World Cup knockout stage for the first time in their history.

    Latest Stories

    • Second petition asks court to block mandatory inspections for private vehicles under new NTSA rules
    • Teachers urge Ruto to confirm Evaleen Mitei as TSC CEO, citing reforms achieved during her tenure
    • Activists demand accountability over alleged police brutality and enforced disappearances
    • KRA begins investigations as 3,600 litres of suspected uncustomed cooking oil seized in Marsabit

    The Asians finished with three points after drawing all three of their group matches and must now wait for results in the remaining groups to determine whether they finish among the best third-placed teams.
    Iran endured a dramatic evening in Seattle. Egypt struck first in the fifth minute through Mahmoud Saber, but Iran responded after Mehdi Taremi saw his penalty saved, with Ramin Rezaeian smashing home the rebound from a tight angle.
    Late drama almost changed everything as Shoja Khalilzadeh had a goal ruled out after a lengthy VAR review for offside, while Saeid Ezatolahi headed against the crossbar in the seventh minute of stoppage time. Earlier, Taremi had also struck the woodwork, although the referee had already blown for a foul.
    The result ensured Egypt progressed as Group G runners-up after Belgium topped the standings with a victory over New Zealand.
    Iran’s qualification hopes now depend on Saturday’s results. They will progress if any one of the following happens: Croatia lose to Ghana, DR Congo fails to beat Uzbekistan, provided Uzbekistan do not win by seven goals or more, or either Algeria or Austria wins their Group J meeting.

    Belgium roar back to life

    Belgium thrashed New Zealand 5-1. (Photo: FIFA)
    Belgium produced their best performance of the tournament when they thrashed New Zealand 5-1 in Vancouver to secure top spot in Group G on goal difference.
    Leandro Trossard scored twice as the Red Devils bounced back from two underwhelming displays to dominate from start to finish.
    Kevin De Bruyne added a superb long-range strike before substitute Romelu Lukaku marked his introduction with a goal just 56 seconds after coming off the bench, underlining the old football saying about a prolific striker needing only one chance.
    Alexis Saelemaekers completed the scoring in stoppage time after Elijah Just had briefly pulled one back for New Zealand.
    Belgium’s victory, coupled with Egypt’s draw against Iran, saw them finish as group winners and, as things stand, set up a Round of 32 meeting with South Korea.
    Africa’s presence in the knockout rounds continues to grow, with seven nations already through and the possibility of that number rising to nine if Algeria and DR Congo complete the job in their final group fixtures.
    The continent has already witnessed several historic breakthroughs, including Cape Verde reaching the knockout stages on their World Cup debut, South Africa qualifying for the first time, and the Ivory Coast advancing beyond the group stage for the first time in their history.
    Should Algeria and DR Congo also qualify, it would represent one of Africa’s greatest collective performances at a FIFA World Cup.

    Round of 32 picture taking shape

    Nine Round of 32 ties have already been confirmed:

  • Argentina vs Cape Verde
  • Australia vs Egypt
  • USA vs Bosnia and Herzegovina
  • France vs Sweden
  • Norway vs Ivory Coast
  • Netherlands vs Morocco
  • Germany vs Paraguay
  • Other Topics To Read

  • Brazil vs Japan
  • South Africa vs Canada
  • Several other pairings are provisionally set, including Portugal against Ghana, England against Senegal, Belgium against South Korea, Mexico against Ecuador, Switzerland against Iran, Spain against Austria and Colombia against Croatia, though those fixtures remain subject to the outcome of the remaining group-stage matches on Saturday.

    Top Stories Today

    • Teachers urge Ruto to confirm Evaleen Mitei as TSC CEO
    • Second court petition seeks to block new NTSA vehicle inspection rules
    • Kenya pushes for regional AI rules under COMESA framework
    • Civil society demands probe into alleged abductions and police brutality
    • Police seize 3,600 litres of suspected smuggled cooking oil in Marsabit
    • State accused of unconstitutional bid to sell Safaricom shares

    `;
    }

    return “;
    }

    function commentActionsMarkup(comment, canComment) {
    const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
    const likeCount = Number(comment.like_count || 0) > 0
    ? “
    : ”;

    const likeButton = canComment && comment.status === ‘approved’
    ? “
    : “;

    const replyButton = canComment && comment.status === ‘approved’
    ? “
    : ”;

    return `

    `;
    }

    function commentMarkup(comment, canComment, isReply = false) {
    const pendingBadge = comment.status && comment.status !== ‘approved’
    ? “
    : ”;

    const edited = comment.is_edited
    ? “
    : ”;

    const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
    ? `

    `
    : “;

    return `

    `;
    }

    function replyFormMarkup(commentId) {
    return `

    `;
    }

    function setNotice(widget, message, type = ‘info’) {
    const notice = widget.querySelector(‘[data-role=”notice”]’);
    if (!notice) return;

    if (!message) {
    notice.hidden = true;
    notice.textContent = ”;
    notice.classList.remove(‘is-error’);
    return;
    }

    notice.hidden = false;
    notice.textContent = message;
    notice.classList.toggle(‘is-error’, type === ‘error’);
    }

    function setCount(widget, total) {
    const count = widget.querySelector(‘[data-role=”count”]’);
    if (!count) return;

    const num = Number(total || 0);
    count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
    }

    function openReplyBox(widget, commentId) {
    widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
    box.hidden = true;
    box.innerHTML = ”;
    });

    const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (!targetItem) return;

    const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
    if (!replyBox) return;

    replyBox.hidden = false;
    replyBox.innerHTML = replyFormMarkup(commentId);

    const textarea = replyBox.querySelector(‘textarea’);
    if (textarea) textarea.focus();
    }

    function closeReplyBox(container) {
    if (!container) return;
    container.hidden = true;
    container.innerHTML = ”;
    }

    async function initCommentsWidget(widget) {
    const state = {
    articleId: Number(widget.dataset.articleId),
    loadUrl: widget.dataset.loadUrl,
    storeUrl: widget.dataset.storeUrl,
    commentsBaseUrl: widget.dataset.commentsBaseUrl,
    canComment: widget.dataset.canComment === ‘1’,
    page: 1,
    perPage: 10,
    sort: ‘newest’,
    total: 0,
    hasMore: false,
    busy: false
    };

    const list = widget.querySelector(‘[data-role=”list”]’);
    const loading = widget.querySelector(‘[data-role=”loading”]’);
    const empty = widget.querySelector(‘[data-role=”empty”]’);
    const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
    const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
    const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);

    async function loadComments(reset = true) {
    if (state.busy) return;

    state.busy = true;
    setNotice(widget, ”);
    loading.hidden = false;

    if (reset) {
    state.page = 1;
    list.innerHTML = ”;
    empty.hidden = true;
    }

    try {
    const url = new URL(state.loadUrl, window.location.origin);
    url.searchParams.set(‘page’, state.page);
    url.searchParams.set(‘per_page’, state.perPage);
    url.searchParams.set(‘sort’, state.sort);

    const response = await requestJson(url.toString(), {
    method: ‘GET’,
    headers: {
    ‘Accept’: ‘application/json’,
    ‘X-Requested-With’: ‘XMLHttpRequest’
    }
    });

    const items = Array.isArray(response.data) ? response.data : [];
    const meta = response.meta || {};

    state.total = Number(meta.total || 0);
    state.hasMore = !!meta.has_more;

    setCount(widget, state.total);

    if (reset) {
    list.innerHTML = ”;
    }

    if (!items.length && reset) {
    empty.hidden = false;
    } else {
    empty.hidden = true;
    list.insertAdjacentHTML(
    ‘beforeend’,
    items.map(item => commentMarkup(item, state.canComment, false)).join(”)
    );
    }

    loadMoreBtn.hidden = !state.hasMore;
    } catch (error) {
    if (!list.children.length) {
    empty.hidden = false;
    empty.textContent = ‘Unable to load comments right now.’;
    }
    setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
    } finally {
    loading.hidden = true;
    state.busy = false;
    }
    }

    async function submitTopLevelComment(form) {
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘[data-role=”submit-comment”]’);

    if (!textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(state.storeUrl, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    textarea.value = ”;

    if (response?.data) {
    list.insertAdjacentHTML(
    ‘afterbegin’,
    commentMarkup(response.data, state.canComment, false)
    );
    empty.hidden = true;

    if ((response.data.status || ”) === ‘approved’) {
    state.total += 1;
    setCount(widget, state.total);
    }
    }

    setNotice(widget, response.message || ‘Comment posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post comment’;
    }
    }
    }

    async function submitReply(form) {
    const commentId = Number(form.dataset.commentId || 0);
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘.ev-comments__reply-submit’);

    if (!commentId || !textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    if (response?.data) {
    const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (parentItem) {
    const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
    if (repliesWrap) {
    repliesWrap.insertAdjacentHTML(
    ‘beforeend’,
    commentMarkup(response.data, state.canComment, true)
    );
    }
    }
    }

    closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
    setNotice(widget, response.message || ‘Reply posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post reply’;
    }
    }
    }

    async function toggleLike(button) {
    const commentId = Number(button.dataset.commentId || 0);
    if (!commentId) return;

    const originalHtml = button.innerHTML;

    try {
    button.disabled = true;
    button.innerHTML = ‘Working…’;

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({})
    });

    const liked = !!response?.data?.liked;
    const likeCount = Number(response?.data?.like_count || 0);

    button.classList.toggle(‘is-liked’, liked);
    button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
    } catch (error) {
    button.innerHTML = originalHtml;
    setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
    } finally {
    button.disabled = false;
    }
    }

    if (composerForm) {
    composerForm.addEventListener(‘submit’, function (e) {
    e.preventDefault();
    submitTopLevelComment(composerForm);
    });
    }

    if (sortSelect) {
    sortSelect.addEventListener(‘change’, function () {
    state.sort = this.value || ‘newest’;
    loadComments(true);
    });
    }

    if (loadMoreBtn) {
    loadMoreBtn.addEventListener(‘click’, function () {
    if (state.busy || !state.hasMore) return;
    state.page += 1;
    loadComments(false);
    });
    }

    widget.addEventListener(‘click’, function (e) {
    const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
    if (likeBtn) {
    e.preventDefault();
    toggleLike(likeBtn);
    return;
    }

    const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
    if (replyBtn) {
    e.preventDefault();
    openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
    return;
    }

    const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
    if (cancelReplyBtn) {
    e.preventDefault();
    closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
    }
    });

    widget.addEventListener(‘submit’, function (e) {
    const replyForm = e.target.closest(‘.ev-comments__reply-form’);
    if (replyForm) {
    e.preventDefault();
    submitReply(replyForm);
    }
    });

    loadComments(true);
    }

    document.addEventListener(‘DOMContentLoaded’, function () {
    document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
    });
    })();

    Trending

    Why teachers will be required to undergo new five-year training to renew licences
    Somalia’s Deputy Prime Minister breaks silence after Kenya deportation, denies arming militias
    KU student denies charges of unlawful entry, Sh41 million vandalism at parliament during Gen Z Protests
    Government allocates Sh9.3 billion to deploy and train 6,784 healthcare interns in UHC push
    Kenya pushes for common AI rules across COMESA to boost trade and cybersecurity
    NTSA clarifies rollout of new inspection rules, says no immediate penalties for motorists
    Relief for Nairobi motorists as Ruto opens Sh3.58 billion Ngong Road–Naivasha Road flyover to ease city traffic
    How Zablon Ekwam’s Kenyan bracelet became Botswana sprinter Collen Kebinatshipi’s lucky charm
    Hope for NMG Uganda as Gen Muhoozi begins talks to reopen Daily Monitor, NTV Uganda
    Activists demand accountability over alleged police brutality and enforced disappearances

    Draw into Iran sends Senegal
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Nouman m
    • Website

    Related Posts

    More than 20 injured as massive fire breaks out at Haldia Petrochemicals unit in West Bengal

    June 30, 2026

    Delhi Power Grid Triumphs Amid Record

    June 30, 2026

    Four things to know about South Africa’s anti-migrant protests

    June 30, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    South Africa • New French ambassador heads to Pretoria ahead of Ramaphosa’s Paris visit

    June 30, 2026

    CrossBoundary Access Secures $10 Million Equity Investment from IFC Bank

    June 30, 2026

    Tourism Watch: June 2026

    June 30, 2026

    Ealing office building in conservation area set to become block of flats

    June 30, 2026

    Shailesh Pednekar appointed COO – International Business at Bharat Serums and Vaccines

    June 30, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • TikTok
    ABS TV and ABS Network News is a leading Pan-African 24/7 broadcasting network delivering nonstop news, talk shows, lifestyle programs, and digital media content worldwide through Satellite, Streaming Platforms, and Roku TV.
     
    Based in the United States, we connect Africa to the world while empowering creators, journalists, and brands through innovative media and broadcasting services.
    Facebook X (Twitter) Pinterest WhatsApp Instagram

    Our Picks

    Travel

    South Africa • New French ambassador heads to Pretoria ahead of Ramaphosa’s Paris visit

    Environment

    CrossBoundary Access Secures $10 Million Equity Investment from IFC Bank

    Travel

    Tourism Watch: June 2026

    Most Popular

    Environment

    Ealing office building in conservation area set to become block of flats

    Business

    Shailesh Pednekar appointed COO – International Business at Bharat Serums and Vaccines

    Health

    East Africa must rethink insurance as economic uncertainties surge

    © 2026 Copyright. All Rights Reserved by ABSAFRICATV
    • Privacy Policy
    • Terms of Services

    Type above and press Enter to search. Press Esc to cancel.

    We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.