Bonjour,
J'ai suivi à la lettre le tuto "créer un site de A à Z". Le site fonctionne parfaitement en local mais depuis que je l'ai transféré sur mon hébergeur (MUTU OVH 2014), l'accès à la DB ne fonctionne plus correctement. J'ai un user, un article, des catégories et un event (module perso) en DB mais, sur le site, il ne m'affiche que les catégories. Et donc pas possible de me connecter à l'admin.
A mon sens, cela doit venir des requêtes SQL mais dans la mesure ou 1) tout fonctionne en local et 2) la manière de procéder est la même pour chaque modules (user, article, catégories, event) je ne comprend vraiment pas pourquoi ça ne fonctionne pas.
Quelqu'un aurait-il eu le même problème et/ou une solution ?
Merci d'avance
Bonjour,
Après de longues heures de recherche, j'ai finalement une solution :
Il suffit de retirer mysql_real_escape_string($v) et de laisser uniquement $v dans la fonction Find.
Tout fonctionne correctement !
Ici, le code du fichier Model exécutant les requêtes:
/**
* Permet de récupérer plusieurs enregistrements
* @param $req Tableau contenant les éléments de la requête
**/
public function find($req = array()){
$sql = 'SELECT ';
if(isset($req'fields'])){
if(is_array($req'fields'])){
$sql .= implode(', ',$$req'fields']);
}else{
$sql .= $req'fields'];
}
}else{
$sql.='*';
}
$sql .= ' FROM '.$this->table.' as '.get_class($this).' ';
// Liaison
if(isset($req'join'])){
foreach($req'join'] as $k=>$v){
$sql .= 'LEFT JOIN '.$k.' ON '.$v.' ';
}
}
// 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);
}
}
if(isset($req'order'])){
$sql .= ' ORDER BY '.$req'order'];
}
if(isset($req'limit'])){
$sql .= ' LIMIT '.$req'limit'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
Voici le code des catégories :
/**
* Permet de récup la liste des catégories pour le blog
**/
function index(){
$this->loadModel('Category');
$cats = $this->Category->find();
return $cats;
}
/**
* ADMIN ACTIONS
**/
/**
* Liste les différentes catégories
**/
function admin_index(){
$this->loadModel('Category');
$condition = array('type'=>'Category');
$d'categories'] = $this->Category->find(array(
'fields' => 'id,name',
));
$this->set($d);
}
Et celui des articles:
<?php
class PostsController extends Controller{
/**
* Blog, liste les articles
**/
function index(){
$perPage = 10;
$this->loadModel('Post');
$condition = array('online' => 1,'type'=>'post');
$d'posts'] = $this->Post->find(array(
'conditions' => $condition,
'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
'order' => 'created DESC',
'limit' => ($perPage*($this->request->page-1)).','.$perPage,
'join' => array('categories as Category'=>'Category.id=Post.category_id')
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
En fait, c'est le code tel quel du tuto qui fonctionne parfaitement en local.
Merci