MVC : requete double

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : MVC : requete double

Re: MVC : requete double

par niuxe » 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.

MVC : requete double

par yosaku » 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 !