Problème avec mon $where=array();

Résolu
thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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.

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753
 
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))


0
thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
en gros je doit modifier ma méthode selectwhere c'est ça?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Ou tu la modifies, ou tu en créés une autre pour les cas où tu as des jointures à faire par exemple.
0
thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
genre public function where(){} ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 753 > thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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 )
0
thermos111 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
ok je vais essaier
0