Bonjour
je suis en train de faire le tuto de grafikart POO et Création de models (environ vers les 35 minutes et + (39:46)) mais j'ai cette erreur:
Warning: Invalid argument supplied for foreach() in D:\xampp\xampp\htdocs\mvc\model\model.php on line 14
voici les codes
de model.php

<?php
class Model{

    public $table;
    public $id;
    public function read($fields = null){
        global $pdo;
        if($fields == null){ $fields = "*"; }
        $sql = "SELECT $fields FROM ".$this->table." WHERE id = ".$this->id;
        $req = $pdo->prepare($sql);
        $req->execute();
        $data = $req->fetch(PDO::FETCH_ASSOC);
        foreach($data as $k => $v){
            $this->$k = $v;
        }
    }
    public function save($data){
        global $pdo;
        if(isset($data'id']) && !empty($data'id'])){
            $sql = "UPDATE ".$this->table." SET ";
            foreach($data as $k => $v){
                if($k != "id"){
                    $sql .= "$k = ".$pdo->quote($v).",";
                }
            }
            $sql = substr($sql,0,-1);
            $sql .= " WHERE id = ".$data'id'];
        }else{
            $sql = "INSERT INTO ".$this->table." (";
            unset($data'id']);
            foreach($data as $k => $v){
                $sql .= "$k,";
            }
            $sql = substr($sql,0,-1);
            $sql .= ") VALUES (";
            foreach($data as $k => $v){
                $sql .= "$v,";
            }
            $sql = substr($sql,0,-1);
            $sql .= ")";
        }
        $req = $pdo->prepare($sql);
        $req->execute();
        if(!isset($data'id'])){
            $this->id = $pdo->lastInsertId();
        }else{
            $this->id = $data'id'];
        }
    }
    static function load($name){
        require "$name.php";
        return new $name();
    }
}
?>

de index.php (au cas ou)

<?php
include 'core.php';
$category = Model::load('category');
if(!empty($_POST)){
    $category->save($_POST);
    $_GET'id'] = $category->id;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
            <form method="post" action="index.php">
                <?php
                if(isset($_GET'id'])){
                    $id = $_GET'id'];
                    $category->id = $id;
                    $category->read();
                    $name = $category->name;
                }else{
                    $id = "";
                    $name = $id;
                }
                ?>
            <input type="hidden" name="id" value="<?php echo $id; ?>" />
            <input type="text" name="name" value="<?php echo $name; ?>" />
            <input type="submit" value="Envoyer">
            </form>
    </body>
</html>

J'espère avoir votre aide sur mon problème.

EDIT:
la ligne 14 est celle ci:

foreach($data as $k => $v){
            $this->$k = $v;
        }

(le foreach de la fonction read())

2 réponses


domix24
Auteur
Réponse acceptée

ma table category n'est pas vide
preuve:

EDIT
j'ai trouvé une partie de l'erreur si je ne met pas ?id=(chiffre) je peut cliquer sur Envoyer mais lorsque j'ai cliqué sur Envoyer, la page d'apres me donne l'erreur Warning : Invalid argument supplied for foreach() in model.php on line 14
je pense qu'il a une erreur avec la condition..

EDIT2
problème résolu!
j'ai rajouter

&& !empty($_GET'id'])

dans la condition et tout est parfait!
Merci

Dans ton phpmyadmin, ta table category ne serait pas vide par hasard ?