bonjour a tous,
j'aurais besoin de vos connaissances car je rencontre un petit probleme de requete a partir de 26'30, une fois que j'inclus ma condition WHERE avec: if (isset($req'conditions'])) {
$sql .= 'WHERE '. $req'conditions'];
et que j'actualise ma page, il me revois un tableau vide comme ceci: Array() puis ma page (bienvenue .....).
par contre si je rajoute un ! devant le isset, la ca fonctionne et me renvois bien mon enregistrement correspondant a mon post dans la bdd!
est ce que quelqu'un a deja rencontré ce problème, dois je laisser ma requete écrire avec ce point d'exclamation sans avoir de probleme par la suite?

j'édite car je me suis apercu que si je laisse mon ! lorsque je fais le: die($sql); et que j'actualise je n'ai que mon:
SELECT * FROM posts as Post et pas SELECT * FROM posts as Post WHERE id=1 comme dans la vidéo, donc je suis belle et bien bloqué^^
et si j'enlève ! en laissant mon die($sql); j'ai bien: SELECT * FROM posts as Post WHERE id=1 qui s'affiche et sans le "die" mon tableau Array() mais vide comme expliqué plus haut.
bon c'est un peu compliqué a expliquer dsl.
merci de votre aide

6 réponses


dams1710
Auteur
Réponse acceptée

Alors j'ai trouvé mon problème et il venait simplement du faite que dans ma base de donnée mon post ajouté précédement n'avait pas comme id le 1 mais le 22. Alors honnetement pourquoi avait il cette id, ca je l'ignore!!

dams1710
Auteur

arf 20 vues et meme pas une petite suggestion!

Au lieu de te plaindre, tu pourrais nous mettre un peu plus de code genre celui de ton controller car la vue ce que tu décris tu n'as juste pas passé l'id dans la construction de ta requête.

Ensuite, il y a une bonne méthode aussi, c'est de reprendre le tuto depuis le début et d'analyser ce que fait Grafikart, y a pas de raison que tu n'y arrives pas, d'autres l'ont fait ;)

dams1710
Auteur

Juste pour info ca fait deux fois que je refais le tuto pour justement mieux comprendre la méthodologie poo et deux que je me retrouve avec cette erreur. Je suis passer premium afin de pouvoir comparer mon code avec le sien mais le soucis c'est qu'a la fin du tuto le code a déjà bien evolué.
Mon second post n'avait pour butni de raler ni de me plaindre, c'est juste que je me suis dit 20 vue et pas une petite info ca sent mauvais pour la suite! enfin bref voila mon PageController:

class PagesController extends Controller
{
function view($id)
{
$this->loadModel('Post');
$posts = $this->Post->find(array(
'conditions' => 'id=1'
));
print_r($posts);
}
}
?>

Mon Controller:

class Controller
{
public $request;
private $vars = array();
public $layout = 'default';
private $rendered = false;
function __construct($request)
{
$this->request = $request;
}

public function render($view)
{
if($this->rendered){ return false;}
extract($this->vars);
if(strpos($view, '/') ===0){
$view = ROOT.DS.'view'.$view.'.php';
}else{
$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
}
ob_start();
require($view);
$content_for_layout = ob_get_clean();
require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
$this->rendered = true;
}

public function set($key, $value=null)
{
if (is_array($key)) {
$this->vars += $key;
}else{
$this->vars$key] = $value;
}
}

function loadModel($name)
{
$file = ROOT.DS.'model'.DS.$name.'.php';
require_once($file);
if (!isset($this->name)) {
$this->$name = new $name();
}
}
}
?>
Et le Model

class Model
{

static $connections = array();
public $conf = 'default';
public $table = false;
public $db;

public function __construct()
{
$conf = Conf::$databases$this->conf];
if (isset(Model::$connections$this->conf])) {
$this->db = Model::$connections$this->conf];
return true;
}
try{
$pdo = new PDO('mysql:host='.$conf'host'].';dbname='.$conf'database'].';',
$conf'login'],$conf'password']);
Model::$connections$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if (Conf::$debug >= 1) {
die($e->getmessage());
}else{
die('Impossible de se connecter à la base de donnée');
}
}
if ($this->table === false) {
$this->table = strtolower(get_class($this)).'s';
}
}

public function find($req)
{
$sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).' ';
if (isset($req'conditions'])) {
$sql .= 'WHERE '.$req'conditions'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}

public function findFirst($req)
{

}
}
?>
Voila merci d'avance

Voici le méthode find de la classe Model qui est différente de la tienne:

public function find($req){
        $sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).' ';

        // Construction de la condition
        if(isset($req'conditions'])){
            $sql .= 'WHERE ';
            if(!is_array($req'conditions'])){
                $sql .= $req'conditions']; 
            }else{
                $cond = array(); 
                foreach($req'conditions'] as $k=>$v){
                    if(!is_numeric($v)){
                        $v = '"'.mysql_escape_string($v).'"'; 
                    }

                    $cond] = "$k=$v";
                }
                $sql .= implode(' AND ',$cond);
            }

        }

        $pre = $this->db->prepare($sql); 
        $pre->execute(); 
        return $pre->fetchAll(PDO::FETCH_OBJ); 
    }
dams1710
Auteur

ok merci pour ta réponse mais le but était pour moi de comprendre ou était l'erreur au moment ou elle apparaissait en l’occurrence 26'30 car le code source moi aussi je l'ai, bon c'est cool quand même de t'y être intéressé!