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())
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