Предупреждение: неверный аргумент указан для foreach () -> для попытки сделать подкачку на динамической странице

1

Этот вопрос НЕ имеет ответа здесь: PDO Statement Возвращает FALSE 1 ответ

Вышеупомянутый вопрос - это только обработка ошибок, чтобы увидеть ошибки, которые я получаю! (уже есть обработка ошибок), и все мои запросы работают, если я запускаю их в phpmyadmin.

Привет, я пытаюсь получить пейджинг на моей динамической странице. Но я получаю предупреждение:

Предупреждение: неверный аргумент, предоставленный foreach() в строке 137

Я попытался это исправить, но я могу заставить его работать. Я попытался изменить

foreach($results as $row)

Для того, чтобы:

foreach($row = $results->fetch(PDO::FETCH_ASSOC)) 

А также

foreach($row = $results->fetchAll())

Но чем я получу ошибку:

Ошибка анализа: синтаксическая ошибка, неожиданная ')' в строке 137

Я попытался найти ответ в Интернете, но я могу найти тот, который исправляет эту проблему.

Кто-нибудь знает, как я могу это исправить? И что я делаю неправильно... Я пытаюсь работать с PDO. Я еще немного новичок в PHP и PDO.

Мой код:

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<?php 
    include('php/loginHandlerconnect.php'); 

    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);

    $db = loginHandlerconnect(); 

    //$tableName="vacature";        
    $targetpage = "vacatureoverzicht";  
    $limit = 10; 

    $query = "SELECT COUNT(vacatureID) as num FROM vacature";
    $res = $db->query($query);
    $total_pages = $res->fetch(PDO::FETCH_ASSOC);
    $total_pages = $total_pages['num'];

    $stages = 3;
    $page = $db->quote($_GET['page']);
    if($page){
        $start = ($page - 1) * $limit; 
    }else{
        $start = 0; 
    }

    $sql = 'SELECT vacature.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacature LEFT JOIN werkgever ON (vacature.werkgeverID = werkgever.werkgeverID) ORDER BY vacature.datum DESC LIMIT '. $start .', '. $limit .''; 
    $results = $db->query($sql); 

    // Initial page num setup
    if ($page == 0){$page = 1;}
    $prev = $page - 1;  
    $next = $page + 1;                          
    $lastpage = ceil($total_pages/$limit);      
    $LastPagem1 = $lastpage - 1;                    


    $paginate = '';
    if($lastpage > 1)
    {   
        $paginate .= "<div class='paginate'>";
        // Previous
        if ($page > 1){
            $paginate.= "<a href='$targetpage?page=$prev'>previous</a>";
        }else{
            $paginate.= "<span class='disabled'>previous</span>";   }

        // Pages    
        if ($lastpage < 7 + ($stages * 2))  // Not enough pages to breaking it up
        {   
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page){
                    $paginate.= "<span class='current'>$counter</span>";
                }else{
                    $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
            }
        }
        elseif($lastpage > 5 + ($stages * 2))   // Enough pages to hide a few?
        {
            // Beginning only hide later pages
            if($page < 1 + ($stages * 2))       
            {
                for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>$counter</span>";
                    }else{
                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
                }
                $paginate.= "...";
                $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
                $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";       
            }
            // Middle hide some front and some back
            elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
            {
                $paginate.= "<a href='$targetpage?page=1'>1</a>";
                $paginate.= "<a href='$targetpage?page=2'>2</a>";
                $paginate.= "...";
                for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>$counter</span>";
                    }else{
                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
                }
                $paginate.= "...";
                $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
                $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";       
            }
            // End only hide early pages
            else
            {
                $paginate.= "<a href='$targetpage?page=1'>1</a>";
                $paginate.= "<a href='$targetpage?page=2'>2</a>";
                $paginate.= "...";
                for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>$counter</span>";
                    }else{
                        $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
                }
            }
        }

                // Next
        if ($page < $counter - 1){ 
            $paginate.= "<a href='$targetpage?page=$next'>next</a>";
        }else{
            $paginate.= "<span class='disabled'>next</span>";
            }

        $paginate.= "</div>";       
    }
    echo $total_pages.' Results';
    // pagination
    echo $paginate; 

    /*
    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);
    */
    /* 
    * Nu hebben we een resultset met de volgende data per row 
    * vacatureID 
    * werkgeverID 
    * functie 
    * datum 
    * omschrijvingKort 
    * omschrijving 
    * image (werkgever) 
    * plaats (werkgever) 
    * provincie (werkgever) 
    * naamBedrijf (werkgever) 
    */ 
    foreach($results as $row) // line 137
    { 
        //Clean record 
        cleanRecord($row);
        echo generateDiv($row); 
    }

    function cleanRecord($row) 
    { 
        if (strlen($row['functie']) > 20) { 

            // truncate string 
            $stringCut = substr($row['functie'], 0, 20); 

            // make sure it ends in a word so assassinate doesn't become ass... 
            $row['functie'] = substr($stringCut, 0, strrpos($stringCut, ' ')).'...'; 
        } 
        if (strlen($row['naamBedrijf']) > 25) { 

            // truncate string 
            $stringCut2 = substr($row['naamBedrijf'], 0, 14); 

            // make sure it ends in a word so assassinate doesn't become ass... 
            $row['naamBedrijf'] = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
        } 
        if (strlen($row['omschrijvingKort']) > 63) { 

            // truncate string 
            $stringCut2 = substr($row['omschrijvingKort'], 0, 63); 

            // make sure it ends in a word so assassinate doesn't become ass... 
            $row['omschrijvingKort'] = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
        } 

        return $row; 
    } 
    function generateDiv($row) 
    { 
        $date = date("d-m-Y", strtotime($row['datum'])); 
        return " 
            <div class='vacatureinfo2'> 
                <img class='userimg2' src='../../uploads/userimage/". $row['image'] ."' id='imge'/> 
                <p class='func-br-pl pull-left'>". $row['functie'] ." - ". $row['naamBedrijf'] ." - ". $row['plaats'] ."</p><p class='dtm pull-right'>". $date ."</p> 
                <div class='omschrijvingkort2'> 
                    ". $row['omschrijvingKort'] ." 
                </div> 
                <p class='pull-right'><a href='reactie?id=" . $row['vacatureID'] . "'>Reageer</a> | <a href='informatie-vacature?id=" . $row['vacatureID'] . "'>Meer informatie</a></p> 
            </div> 
            <hr> 
        "; 
    }
?>

ОБНОВИТЬ:

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<?php 
    include('php/loginHandlerconnect.php'); 

    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);

    $db = loginHandlerconnect(); 

    $targetpage = "vacatureoverzicht";  
    $limit = 10; 

    $query = "SELECT COUNT(vacatureID) as num FROM vacature";
    $res = $db->query($query);
    $total_pages = $res->fetch(PDO::FETCH_ASSOC);
    $total_pages = $total_pages['num'];

    $stages = 3;
    $page = $db->quote($_GET['page']);
    if($page){
        $start = ($page - 1) * $limit; 
    }else{
        $start = 0; 
    }

    $sql = $db->query('SELECT vacature.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacature LEFT JOIN werkgever ON (vacature.werkgeverID = werkgever.werkgeverID) ORDER BY vacature.datum DESC LIMIT '. $start .', '. $limit .''); 
    $results = $sql->fetchAll();

    // Initial page num setup
    if ($page == 0){$page = 1;}
    $prev = $page - 1;  
    $next = $page + 1;                          
    $lastpage = ceil($total_pages/$limit);      
    $LastPagem1 = $lastpage - 1;                    


    $paginate = '';
    if($lastpage > 1)
    {   
        $paginate .= "<div class='paginate'>";
        // Previous
        if ($page > 1){
            $paginate.= "<a href='". $targetpage ."?page=". $prev ."'>previous</a>";
        }else{
            $paginate.= "<span class='disabled'>previous</span>";   
        }

        // Pages    
        if ($lastpage < 7 + ($stages * 2))  // Not enough pages to breaking it up
        {   
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page){
                    $paginate.= "<span class='current'>". $counter ."</span>";
                }else{
                    $paginate.= "<a href='". $targetpage ."?page=". $counter ."'>". $counter ."</a>";}                  
            }
        }
        elseif($lastpage > 5 + ($stages * 2))   // Enough pages to hide a few?
        {
            // Beginning only hide later pages
            if($page < 1 + ($stages * 2))       
            {
                for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>". $counter ."</span>";
                    }else{
                        $paginate.= "<a href='". $targetpage ."?page=". $counter ."'>". $counter ."</a>";}                  
                }
                $paginate.= "...";
                $paginate.= "<a href='". $targetpage ."?page=". $LastPagem1 ."'>". $LastPagem1 ."</a>";
                $paginate.= "<a href='". $targetpage ."?page=". $lastpage ."'>". $lastpage ."</a>";     
            }
            // Middle hide some front and some back
            elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
            {
                $paginate.= "<a href='". $targetpage ."?page=1'>1</a>";
                $paginate.= "<a href='". $targetpage ."?page=2'>2</a>";
                $paginate.= "...";
                for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>". $counter ."</span>";
                    }else{
                        $paginate.= "<a href='". $targetpage ."?page=". $counter ."'>". $counter ."</a>";}                  
                }
                $paginate.= "...";
                $paginate.= "<a href='". $targetpage ."?page=". $LastPagem1 ."'>". $LastPagem1 ."</a>";
                $paginate.= "<a href='". $targetpage ."?page=". $lastpage ."'>". $lastpage ."</a>";     
            }
            // End only hide early pages
            else
            {
                $paginate.= "<a href='". $targetpage ."?page=1'>1</a>";
                $paginate.= "<a href='". $targetpage ."?page=2'>2</a>";
                $paginate.= "...";
                for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page){
                        $paginate.= "<span class='current'>". $counter ."</span>";
                    }else{
                        $paginate.= "<a href='". $targetpage ."?page=". $counter ."'>". $counter ."</a>";}                  
                }
            }
        }

                // Next
        if ($page < $counter - 1){ 
            $paginate.= "<a href='". $targetpage ."?page=". $next ."'>next</a>";
        }else{
            $paginate.= "<span class='disabled'>next</span>";
            }

        $paginate.= "</div>";       
    }
    echo $total_pages.' vacatures';

    /*
    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);
    */
    /* 
    * Nu hebben we een resultset met de volgende data per row 
    * vacatureID 
    * werkgeverID 
    * functie 
    * datum 
    * omschrijvingKort 
    * omschrijving 
    * image (werkgever) 
    * plaats (werkgever) 
    * provincie (werkgever) 
    * naamBedrijf (werkgever) 
    */ 
    foreach($results as $row) 
    { 
        //Clean record 
        cleanRecord($row);
        echo generateDiv($row); 
    }

    function cleanRecord($row) 
    { 
        if (strlen($row['functie']) > 20) { 

            // truncate string 
            $stringCut = substr($row['functie'], 0, 20); 

            // make sure it ends in a word so assassinate doesn't become ass... 
            $row['functie'] = substr($stringCut, 0, strrpos($stringCut, ' ')).'...'; 
        } 
        if (strlen($row['naamBedrijf']) > 25) { 

            // truncate string 
            $stringCut2 = substr($row['naamBedrijf'], 0, 14); 

            // make sure it ends in a word so assassinate doesn't become ass... 
            $row['naamBedrijf'] = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
        } 
        if (strlen($row['omschrijvingKort']) > 63) { 

            // truncate string 
            $stringCut2 = substr($row['omschrijvingKort'], 0, 63); 

            // make sure it ends in a word so assassinate doesn't become ass... 
            $row['omschrijvingKort'] = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
        } 

        return $row; 
    } 
    function generateDiv($row) 
    { 
        $date = date("d-m-Y", strtotime($row['datum'])); 
        return " 
            <div class='vacatureinfo2'> 
                <img class='userimg2' src='../../uploads/userimage/". $row['image'] ."' id='imge'/> 
                <p class='func-br-pl pull-left'>". $row['functie'] ." - ". $row['naamBedrijf'] ." - ". $row['plaats'] ."</p><p class='dtm pull-right'>". $date ."</p> 
                <div class='omschrijvingkort2'> 
                    ". $row['omschrijvingKort'] ." 
                </div> 
                <p class='pull-right'><a href='reactie?id=" . $row['vacatureID'] . "'>Reageer</a> | <a href='informatie-vacature?id=" . $row['vacatureID'] . "'>Meer informatie</a></p> 
            </div> 
            <hr> 
        "; 
    }

    // pagination
    echo $paginate; 
?>

ОБНОВЛЕНИЕ 2:

Может быть, когда что-то не так с изменением кода ниже PDO?

<?php
include('connect.php'); 

$tableName="vacature";      
$targetpage = "testpaging2.php";    
$limit = 10; 

$query = "SELECT COUNT(vacatureID) as num FROM $tableName";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];

$stages = 3;
$page = mysql_escape_string($_GET['page']);
if($page){
    $start = ($page - 1) * $limit; 
}else{
    $start = 0; 
}   

// Get page data
$query1 = "SELECT vacature.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacature LEFT JOIN werkgever ON (vacature.werkgeverID = werkgever.werkgeverID) ORDER BY vacature.datum DESC LIMIT $start, $limit";
$result = mysql_query($query1);

// Initial page num setup
if ($page == 0){$page = 1;}
$prev = $page - 1;  
$next = $page + 1;                          
$lastpage = ceil($total_pages/$limit);      
$LastPagem1 = $lastpage - 1;                    


$paginate = '';
if($lastpage > 1)
{   
    $paginate .= "<div class='paginate'>";
    // Previous
    if ($page > 1){
        $paginate.= "<a href='$targetpage?page=$prev'>previous</a>";
    }else{
        $paginate.= "<span class='disabled'>previous</span>";   }

    // Pages    
    if ($lastpage < 7 + ($stages * 2))  // Not enough pages to breaking it up
    {   
        for ($counter = 1; $counter <= $lastpage; $counter++)
        {
            if ($counter == $page){
                $paginate.= "<span class='current'>$counter</span>";
            }else{
                $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
        }
    }
    elseif($lastpage > 5 + ($stages * 2))   // Enough pages to hide a few?
    {
        // Beginning only hide later pages
        if($page < 1 + ($stages * 2))       
        {
            for ($counter = 1; $counter < 4 + ($stages * 2); $counter++)
            {
                if ($counter == $page){
                    $paginate.= "<span class='current'>$counter</span>";
                }else{
                    $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
            }
            $paginate.= "...";
            $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
            $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";       
        }
        // Middle hide some front and some back
        elseif($lastpage - ($stages * 2) > $page && $page > ($stages * 2))
        {
            $paginate.= "<a href='$targetpage?page=1'>1</a>";
            $paginate.= "<a href='$targetpage?page=2'>2</a>";
            $paginate.= "...";
            for ($counter = $page - $stages; $counter <= $page + $stages; $counter++)
            {
                if ($counter == $page){
                    $paginate.= "<span class='current'>$counter</span>";
                }else{
                    $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
            }
            $paginate.= "...";
            $paginate.= "<a href='$targetpage?page=$LastPagem1'>$LastPagem1</a>";
            $paginate.= "<a href='$targetpage?page=$lastpage'>$lastpage</a>";       
        }
        // End only hide early pages
        else
        {
            $paginate.= "<a href='$targetpage?page=1'>1</a>";
            $paginate.= "<a href='$targetpage?page=2'>2</a>";
            $paginate.= "...";
            for ($counter = $lastpage - (2 + ($stages * 2)); $counter <= $lastpage; $counter++)
            {
                if ($counter == $page){
                    $paginate.= "<span class='current'>$counter</span>";
                }else{
                    $paginate.= "<a href='$targetpage?page=$counter'>$counter</a>";}                    
            }
        }
    }

            // Next
    if ($page < $counter - 1){ 
        $paginate.= "<a href='$targetpage?page=$next'>next</a>";
    }else{
        $paginate.= "<span class='disabled'>next</span>";
        }

    $paginate.= "</div>";       


}
 echo $total_pages.' Results';



    while($row = mysql_fetch_array($result))
    {

    echo "
        <div class='vacatureinfo2'> 
            <img class='userimg2' src='../../uploads/userimage/". $row['image'] ."' id='imge'/> 
            <p class='func-br-pl pull-left'>". $row['functie'] ." - ". $row['naamBedrijf'] ." - ". $row['plaats'] ."</p><p class='dtm pull-right'>". $date ."</p> 
            <div class='omschrijvingkort2'> 
                ". $row['omschrijvingKort'] ." 
            </div> 
            <p class='pull-right'><a href='reactie?id=" . $row['vacatureID'] . "'>Reageer</a> | <a href='informatie-vacature?id=" . $row['vacatureID'] . "'>Meer informatie</a></p> 
        </div> 
        <hr>";

    }
 // pagination
 echo $paginate;

Потому что, когда я запускаю эту страницу, она работает! Но это не PDO... См. Код перед этим обновлением, чтобы увидеть, как я изменил код на PDO, обратите внимание, что я также использую функции в этом коде! Если я знаю, что я делаю неправильно, изменив его на PDO, возможно, это устранит эту проблему? Но я не знаю, что я делаю неправильно!

Теги:
foreach
pagination
pdo

1 ответ

-1

Попробуйте обновить

$sql = 'SELECT vacature.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacature LEFT JOIN werkgever ON (vacature.werkgeverID = werkgever.werkgeverID) ORDER BY vacature.datum DESC LIMIT '. $start .', '. $limit .''; 
$results = $db->query($sql); 

к

$sql = $db->query('SELECT vacature.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacature LEFT JOIN werkgever ON (vacature.werkgeverID = werkgever.werkgeverID) ORDER BY vacature.datum DESC LIMIT '. $start .', '. $limit .''); 
$results = $db->fetchAll($sql);

На самом деле без выполнения fetchAll ваш результат $ был объектом запроса PDO

И с foreach($row = $results->fetch(PDO::FETCH_ASSOC)) вы только что инициализировали переменную $ row, которую вы забыли определить значение $ там, поэтому синтаксис должен был быть foreach($array = $results->fetch(PDO::FETCH_ASSOC) as $row) Хотя я не слишком уверен в том, что мы можем иметь $array = $results->fetch(PDO::FETCH_ASSOC) в foreach или нет

  • 0
    Привет, спасибо за ваш ответ, но когда я изменяю $results = $db->query($sql); в $results = $db->fetchAll($sql); , добавьте $db->query к моему sql-запросу и мой foreach к foreach($array = $results->fetch(PDO::FETCH_ASSOC) as $row) Но теперь я получаю ошибку: Fatal error: Call to undefined method PDO::fetchAll() on line 24 И я также получаю уведомление: Notice: Undefined index: page on line 16
  • 0
    Вы также изменили запрос на $sql = $db->query('SELECT vacature.*, werkgever.image, werkgever.plaats, werkgever.provincie, werkgever.naamBedrijf FROM vacature LEFT JOIN werkgever ON (vacature.werkgeverID = werkgever.werkgeverID) ORDER BY vacature.datum DESC LIMIT '. $start .', '. $limit .'');
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню