Bonsoir,

Je suis sur la série des tutos site de A à Z et au tuto Jour-3 dans la fonction find(), lorsque que notre ami ajoute les $req'conditions'] ma requête SQL déconne, je m'explique.

Avant cette modif des conditions les résultats des articles m'étaient retourné correctement mais depuis, avec un die($sql); il me retourne ceci :

SELECT * FROM posts as Post WHERE id==1 AND type="page"

et du coup avec le ID== ça ne fonctionne plus.

Voici le code de ma function find() de la page MODEL.PHP:

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_real_escape_string($v).'"';
                    }
                    $cond] = "$k=$v";
                }
            $sql .= implode(' AND ', $cond);
            }
        }        
        die($sql);

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

Si l'un ou l'une de vous à une idée svp.

-----------------------[EDIT]-----------------------

J'ai ajouté ça temporairement car je sais que ce n'est pas la bonne solution mais au moins je peux continuer les tutos ...

$k = str_replace('=', '', $k);

juste avant :

$cond] = "$k=$v";

et pour le moment ça fonctionne ...

2 réponses


wilose
Réponse acceptée

Bonjour,
Ce code fonctionne chez moi..
je n'est pas refait tous le tuto donc j'ai tappé sa:

<?php 
$sql = 'SELECT * FROM table as Post ';
$req'conditions'] = array('id' => 5, 'name' => 'dupon');
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_real_escape_string($v).'"';
            }
            $cond] = "$k=$v";
        }
    $sql .= implode(' AND ', $cond);
    }
}        
die($sql);
?>

Et j'ai bien SELECT * FROM table as Post WHERE id=5 AND name="dupon"
Tu a entré quoi dans le tableau 'conditions'? Tu as du mettre un égale.
Donc si c'est le cas, soit tu les enlève tous, ou tu change la valeur de count sans str_replace:

$count] = $k . $v;

Pfffoouuaaa oui c'était bien dans mes conditions ...

function view($id){
        $this->loadModel('Post');
        $d'page'] = $this->Post->findFirst(array(
            'conditions' => array('id='=>$id,'type'=>'page')
        ));

Remplacer par:

function view($id){
        $this->loadModel('Post');
        $d'page'] = $this->Post->findFirst(array(
            'conditions' => array('id'=>$id,'type'=>'page')
        ));

MERCI BEAUCOUP Wilose, c'est bien cool.