Heey,

Ik heb sinds kort het project "Restaurond" over genomen. Nu ben ik bezig met de PDO classes en de functies te verwerken, alleen ik krijg een foutmelding waar ik absoluut niet uit kom. Zouden jullie mij kunnen helpen?

Foutmelding:
Warning: Invalid argument supplied for foreach() in /home/aruter/domains/randomdomein.nl/public_html/rs/includes/classes/restaurants.class.php on line 40


Het script waar de fout zich in bevindt:
<?php
if (!defined("USER_IN"))
{
    header("Location: ../../../index.php");
    die;
}

class restaurants
{
    private $ownerid;
    
    public function __construct ($owner)
    {
        $this->ownerid = $owner;
    }
    
    
    public function takeRestaurantValue ($colname, $restaurantid = "")
    {
        if(!empty($restaurantid))
        {
            $where = " AND id = '" . $restaurantid . "'";
        }
        
        $res = publicSQL::gotosql("query", "SELECT `" . $colname . "` FROM restaurants WHERE owner = '" . $this->ownerid . "'" . $where)->fetch(PDO::FETCH_ASSOC);
        return $res[$colname];
    }
    
    
    public function loadRestaurants ($who)
    {
        return publicSQL::gotosql("query", "SELECT id, name, week_bruto, plaats FROM restaurants WHERE owner = '" . $who . "'");
    }
    
    
    public function mkRestaurantsTable ($restaurants)
    {
        $GLOBALS['tpl']->define("actie", "subcategories/management/my_restaurants_table.tpl");
        $table = false;
        foreach($restaurants as $t)
        {
            $GLOBALS['tpl']->assign("{LOCATIE}", namen_actie::get_city($t['plaats']));
            $GLOBALS['tpl']->assign("{EMPLOYEES}", employee::countEmployees($t['id']));
            $GLOBALS['tpl']->assign("{WEEKOMZET}", groot($t['week_bruto']));
            
            $table .= $GLOBALS['tpl']->fetch($GLOBALS['tpl']->parse("MAIN", "actie"));
        }
        return $table;
    }
}
?>


Alvast bedankt!

Groetjes,
Alex

(Geen online voorbeeld beschikbaar aangezien de rest nog even achter de schermen dient te blijven ;):)
Alex

Deze code kunnen we nog niet veel mee, het lijkt erop dat de variabele $restaurants geen array is. En daarom dus niet kan worden gebruikt voor de foreach lus.
public function mkRestaurantsTable ($restaurants)
Ik werk niet zo heel veel met functies, maar is dit niet altijd maar 1 variabel?
return $restaurants; eens en echo hem dan
Beste,

Dat klopt, dit heb ik al van verschillende mensen gehoord. Maar ik begrijp dat niet precies welke array die mist en waar dit geplaatst zal moeten worden.

my_restaurants.php De pagina die de leden bereiken (Waar ook de foutmelding komt)
restaurants.class.php (De code die jullie hier boven dus zien)
Je roept die functie (mkRestaurantsTable) aan en geeft daar een waarde aan mee tussen de (). Deze waarde (of variabele) moet een array zijn en dat is nu dus niet het geval.
Zet eens dit in je class:
<?php
public function mkRestaurantsTable ($restaurants) {
$GLOBALS['tpl']->define("actie", "subcategories/management/my_restaurants_table.tpl");
$table = false;
// dit is de regel waar het om gaat
// nu krijg je op je scherm te zien wat voor type de variabele $restaurants is
// en wat er in zit
echo '<pre>' . print_r ($restaurants, true) . '</pre>';
foreach($restaurants as $t) {
$GLOBALS['tpl']->assign("{LOCATIE}", namen_actie::get_city($t['plaats']));
$GLOBALS['tpl']->assign("{EMPLOYEES}", employee::countEmployees($t['id']));
$GLOBALS['tpl']->assign("{WEEKOMZET}", groot($t['week_bruto']));
$table .= $GLOBALS['tpl']->fetch($GLOBALS['tpl']->parse("MAIN", "actie"));
}
return $table;
}
?>
Dit krijg ik terug van het resultaat:




Warning: Invalid argument supplied for foreach() in /home/aruter/domains/randomdomein.nl/public_html/rs/includes/classes/restaurants.class.php on line 43


En dit is in users.class.php...

Notice: Undefined index: in /home/aruter/domains/randomdomein.nl/public_html/rs/includes/classes/users.class.php on line 125


Regel 119 t/m 159
Fout zit op dit stukje op lijn 6


    function showstatus($offset)
    {
        $status_user = array("Beginner");
        //De statussen die je kunt krijgen

        return $status_user[$offset];
    }

    function getUser($userid, $select = "*", $join = "")
    {

        $select = str_replace("+", ", ", $select);

        if (publicSQL::gotosql("query", "SELECT " . $select . " FROM users " . $join . " WHERE userid = '" . $userid . "'")->rowCount() > 0) {

            return publicSQL::gotosql("query", "SELECT " . $select . " FROM users " . $join . " WHERE userid = '" . $userid . "'")->fetch(PDO::FETCH_ASSOC);

        } else {

            return FALSE;

        }
    }

    function colorcrew($user)
    {

        $user = self::getUser($user, "admin+moderator+username");

        if ($user['admin'] == "True")
        {
            $user['username'] = '<font color="red"><b>' . $user['username'] . '</b></font>';
        }
        elseif ($user['moderator'] == "True")
        {
            $user['username'] = '<font color="blue"><b>' . $user['username'] . '</b></font>';
        }

        return $user['username'];
    }
Verder geholpen door iemand anders alles is verholpen hij haalt alleen de gegevens niet op uit de database

Gelieve Niet Bumpen:

Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.

SanThe.
Wat je in dat geval toch kan doen:

bv.

<?php
public function mkRestaurantsTable ($restaurants)
{
if (! is_array($restaurants) )
return false; // of return null
...
?>

Gebruik nooit een foreach als je niet zeker bent dat de var een array is.
Indien die array uit db gegevens wordt gegenereerd, controleer je best altijd.
Bedankt voor je reactie. Ik heb het geplaatst maar krijg nu deze foutmelding:



Parse error: syntax error, unexpected ';', expecting T_FUNCTION in /home/aruter/domains/randomdomein.nl/public_html/rs/includes/classes/restaurants.class.php on line 55


De code die ik nu heb:
<?php
if (!defined("USER_IN"))
{
    header("Location: ../../../index.php");
    die;
}

class restaurants
{
    private $ownerid;
    
    public function __construct ($owner)
    {
        $this->ownerid = $owner;
    }
    
    
    public function takeRestaurantValue ($colname, $restaurantid = "")
    {
        if(!empty($restaurantid))
        {
            $where = " AND id = '" . $restaurantid . "'";
        }
        
        $res = publicSQL::gotosql("query", "SELECT `" . $colname . "` FROM restaurants WHERE owner = '" . $this->ownerid . "'" . $where)->fetch(PDO::FETCH_ASSOC);
        return $res[$colname];
    }
    
    
    public function loadRestaurants ($who)
    {
        return publicSQL::gotosql("query", "SELECT id, name, week_bruto, plaats FROM restaurants WHERE owner = '" . $who . "'");
    }
    
    
    public function mkRestaurantsTable ($restaurants)
    {
    if (! is_array($restaurants) )
      return false;  // of return null
    {
        $GLOBALS['tpl']->define("actie", "subcategories/management/my_restaurants_table.tpl");
        $table = false;

        foreach($restaurants as $t)
        {
            $GLOBALS['tpl']->assign("{LOCATIE}", namen_actie::get_city($t['plaats']));
            $GLOBALS['tpl']->assign("{EMPLOYEES}", employee::countEmployees($t['id']));
            $GLOBALS['tpl']->assign("{WEEKOMZET}", groot($t['week_bruto']));
            
            $table .= $GLOBALS['tpl']->fetch($GLOBALS['tpl']->parse("MAIN", "actie"));
        }
        return $table;
    }
}
?>
Zo te zien moet regel 40 weg.

Reageren