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

Résolu/Fermé
thermos111 Messages postés 20 Date d'inscription dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017 - Modifié par thermos111 le 22/11/2016 à 09:54
thermos111 Messages postés 20 Date d'inscription dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017 - 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.

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
22 nov. 2016 à 10:33
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 dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017
Modifié par thermos111 le 22/11/2016 à 11:01
en gros je doit modifier ma méthode selectwhere c'est ça?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > thermos111 Messages postés 20 Date d'inscription dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017
22 nov. 2016 à 11:20
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 dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017
22 nov. 2016 à 12:28
genre public function where(){} ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > thermos111 Messages postés 20 Date d'inscription dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017
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 )
0
thermos111 Messages postés 20 Date d'inscription dimanche 30 octobre 2016 Statut Membre Dernière intervention 12 février 2017
22 nov. 2016 à 15:59
ok je vais essaier
0