Signaler

Problème avec mon $where=array(); [Résolu]

Posez votre question thermos111 16Messages postés dimanche 30 octobre 2016Date d'inscription 25 novembre 2016 Dernière intervention - Dernière réponse le 25 nov. 2016 à 21:25
Bonjour,
J'ai un modèle de classe que mon prof de programmation ma données pour intialiser une requête selectwhere automatiquement sans la réécrire dans chaque fichier, ainsi j'ai fait des tests et elle marche par contre j'ai voulu la tester sur plusieurs tables et ça ne marche pas, mon but et de réaliser cette requête :
select nomVille, nomRegion, nomResto, libelle from ville, restaurant, region, typeresto where typeresto.idTypeResto = restaurant.idTypeResto and restaurant.cpVille = ville.cpVille and ville.idRegion = regions.idRegion.
Mais le probleme c'est que pour $where= array{} je ne sait pas quoi écrire dedans pour avoir le même aperçus que where typeresto.idTypeResto = restaurant.idTypeResto and restaurant.cpVille = ville.cpVille and ville.idRegion = regions.idRegion.
Mon $where=array{} est dans mon index.php
Pouvez me donner un indice comme exemple.
Je vous donne un apreçus de mes codes.

Modele.Classe.php

public function selectWhere($champs, $where) //Modele select
{
$chaineChamps = implode(",", $champs); //rassemble les donnees
$clause = array(); //pour les order by etc
$donnees = array(); //pour les valeurs dans la bdd

foreach ($where as $cle => $valeur) {
# code...
$clause[] = $cle."= :".$cle; //selection des clauses(where, order by etc....)
$donnees[":".$cle] = $valeur;//$cle = :nom par exempleS
}

$chaineclause = implode(" and ", $clause);
$requete = "select ".$chaineChamps." from ".$this->table." where ".$chaineclause.";";

$select = $this ->pdo->prepare($requete);
$select ->execute($donnees);
var_dump($select);
$unResultat = $select->fetch();
return $unResultat;
}


Controleur_affichage_restaurant.php

include("MVC_PHP/Modele/Modele.Classe.php");

class affichageResto
{
private $ModeleAffichage;
public function __construct($serveur, $bdd, $user, $mdp)
{
$this ->ModeleAffichage = new Modele($serveur, $bdd, $user, $mdp);

}
public function AffichageRestaurant($champs, $where)
{
$this ->ModeleAffichage->renseigner("restaurant, ville, region, typeresto");
$resultats = $this ->ModeleAffichage -> selectWhere($champs, $where);

//Realiser les traitements sur les resultats avant affichage
return $resultats;
}
}


Vues_affichage_restaurant.php

<article>
<h1> Affichage de tous les Restaurants </h1>
<br />

<?php

foreach(array($resultats) as $lesResultats)
{
echo "<br/>".$lesResultats['nomResto']
."<br/>".$lesResultats['nomRegion']
."<br/>".$lesResultats['nomVille']
."<br/>".$lesResultats['libelle'];
}

?>
</article>

index.php


index.php

<?php
include("MVC_PHP/Controleur/Controleur_affichage_restaurant.php");

$unControleur = new AffichageResto("localhost", "restline", "root", "");

$where = array(





);

$champs = array("nomResto", "libelle", "nomVille", "nomRegion");

$resultats = $unControleur -> AffichageRestaurant($champs, $where);



include("MVC_PHP/Vues/Vues_affichage_restaurant.php")
?>

Merçis de votre futur aide.
Afficher la suite 
Utile
+0
moins plus
Bonjour,


$where= array{} je ne sait pas quoi écrire dedans pour avoir le même aperçus que where typeresto.idTypeResto = restaurant.idTypeResto and restaurant.cpVille = ville.cpVille


Là.. ce ne sont pas des variables que tu veux envoyer dans ton where mais des conditions de "jointure" entre plusieurs tables.
Tu ne peux donc pas utiliser la fonction existante telle qu'elle.
Tu vas devoir en créer une spécifique pour ce cas là (c'est ce que je ferai) ou modifier la fonction existante pour lui passer des variables supplémentaires

(idem pour le FROM vu que pour l'instant tu lui envoie uniquement ".$this->table." (qui doit correspondre à UNE table alors que toi tu veux faire un FROM avec plusieurs tables))


thermos111 16Messages postés dimanche 30 octobre 2016Date d'inscription 25 novembre 2016 Dernière intervention - 22 nov. 2016 à 12:28
genre public function where(){} ?
Répondre
jordane45 15400Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 3 décembre 2016 Dernière intervention - 22 nov. 2016 à 12:54
plutôt genre :
public function selectWhereJointure($champs, $where=array() ,$froms=array(),$WhereJointure=array()) //Modele select avec jointure


$froms contiendrait la liste des tables que tu veux joindre à ta requête (avec éventuellement écrit directement les LEFT / INNER ...etc....) sous forme d'array
$WhereJointure, les jointures entre les différentes tables (comme : typeresto.idTypeResto = restaurant.idTypeResto )
Répondre
thermos111 16Messages postés dimanche 30 octobre 2016Date d'inscription 25 novembre 2016 Dernière intervention - 22 nov. 2016 à 15:59
ok je vais essaier
Répondre
thermos111 16Messages postés dimanche 30 octobre 2016Date d'inscription 25 novembre 2016 Dernière intervention - 22 nov. 2016 à 17:19
j'ai tenté mais ça ne fonctionne pas ma méthode est t'elle bonne :
  public function selectwherejointure($champs, $where = array() ,$from = array())
  {
      $chaineChamps = implode(",", $champs);
      $WhereJointure = array();
      $donnees = array();

      foreach ($where as $cle => $valeur)
      {
        $from[] = $this ->table;
        $WhereJointure[] = $from.".".$cle."= :" . $form.".".$cle;
        $donnees[":".$form.".".$cle] = $valeur;
      }

      $chaineclause = implode(" and ", $WhereJointure);
      $requete = "select ".$chaineChamps." from  ".$this->table."  where".$from." ".$chaineclause.";";

      $select = $this ->pdo->prepare($requete);
      $select ->execute($donnees);
      var_dump($select);
      $unResultat = $select->fetch();
      return $Resulatsjointure;

  }

EDIT : Ajout du LANGAGE dans les balises de code (histoire d'avoir la couleur...)

Répondre
thermos111 16Messages postés dimanche 30 octobre 2016Date d'inscription 25 novembre 2016 Dernière intervention - 25 nov. 2016 à 21:25
résolus avec des vues finalement
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !