MVC : requete double

Eléphanteau du PHP | 30 Messages

03 janv. 2014, 17:36

Bonjour, je développe un site php simple et j'ai tenter dernièrement de passer sur un modèle MVC ce dernier. Je débute mais lorsque je souhaite afficher mes news sur la page d'accueil je peux voir afficher mes 6 news de tests dédoubler. En effet chaque news apparaissent deux fois avec la même idée mais pas moyen de mettre la main sur ce qui fait cela dans mon script.

Voici le script en question :
Index.php:
<?php
session_start();
mysql_connect("localhost","root","");
	mysql_select_db("alcudia");
	mysql_query ('SET NAMES "UTF8"');

if (!empty($_GET['page']) && is_file('controleurs/'.$_GET['page'].'.php'))
{
        include 'controleurs/'.$_GET['page'].'.php';
}
else { include 'controleurs/accueil.php'; } ?>
J'utilise une class model contenant des requetes pré-faite dont celle qui doit afficher les news :
public function find($data=array()) {

		$conditions = "1=1";
		$donnee = "*";
		$limite = "";
		$order = "id DESC";
		if(isset($data['conditions'])) {  $conditions = $data['conditions']; }
		if(isset($data['donnee'])) {  $donnee = $data['donnee']; }
		if(isset($data['limite'])) {  $limite = " LIMIT ".$data['limite']; }
		if(isset($data['order'])) {  $order = $data['order']; }
		$sql = "SELECT $donnee FROM ".$this->table." WHERE $conditions $limite ORDER BY $order $limite";
		$req = mysql_query($sql) or die(mysql_error(). "<br> => ".mysql_query());
		$d = array();
		while ($data = mysql_fetch_assoc($req)) {
			$d[] = $data;
		}
		return $d;
	}
Une class News qui extend cette fonction avec le nom de la table. Le tout est appelé sur le controleur :
include(dirname(__FILE__).'/../modeles/model.php');
$news = Model::charger_Class('news');
if (!empty($_POST)) {
	$news->sauvegarde_Donnee($_POST);
	$_GET['id'] = $news->id;   
}
if (isset($_GET['suppr'])) {
	$news->del($_GET['suppr']);
}
$billet = $news->find(array(
							
							"donnee" => "news.id, id_auteur, titre, date_news, resume, nom, prenom",
							"where" => "WHERE membre.id = news.id_auteur",
							"order by" =>  "news.id DESC" 
					));
include(dirname(__FILE__).'/../vues/accueil.php');
Et enfin la vue qui affiche le rendu :
foreach($billet as $n)
{
   echo '
     <article>
              <h2 class="titre_article"><a href="index.php?page=page&id='.$n['id'].'">'.$n['titre'].'</a></h2>
		<div class="contenu_article">
		<a href="#"><img src="vues/images/img_article.jpg" alt="'.$n['titre'].'" class="img_article"></a>	
		<p class="paragraphe_article">'.$n['resume'].'
		<span class="detail_article">'.$n['date_news'].' par <span class="auteur_article">'.$n['nom'].' '.$n['prenom'].'</span></span>
		</p>
                </div>
</article>'; }
Lorsque je test un print_r de $billet je peux voir :
Array ( [0] => Array ( [id] => 99 [...]
Array ( [1] => Array ( [id] => 99 [...]

Ma news à l'id 99 y est deux fois =(

Voilà si quelqu'un voit d'où pourrait venir cette erreur cela me débloquerai bien =)

Merci d'avance !

Eléphant du PHP | 453 Messages

03 janv. 2014, 19:05

Salut,

public function find($data=array()) {

                $conditions = "1=1";
                $donnee = "*";
                $limite = "";
                $order = "id DESC";
                if(isset($data['conditions'])) {  $conditions = $data['conditions']; }
                if(isset($data['donnee'])) {  $donnee = $data['donnee']; }
                if(isset($data['limite'])) {  $limite = " LIMIT ".$data['limite']; }
                if(isset($data['order'])) {  $order = $data['order']; }
                $sql = "SELECT $donnee FROM ".$this->table." WHERE $conditions $limite ORDER BY $order $limite"; // ???? 
                $req = mysql_query($sql) or die(mysql_error(). "<br> => ".mysql_query()); //????
                return mysql_fetch_assoc($req));
        }
Au passage :
- le pattern MVC est un agrégat de plusieurs autres patterns (factory, singleton, strategy, observer, decorateur, etc., etc.). En lisant ton code, je vois de grossières erreurs (voir mes points interrogations entres autres).
- Le B-A BA est qu'une fonction fasse une unique chose mais la fasse bien.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia