Est-ce une bonne pratique de préparer ses requêtes depuis le controller?
abisko
-
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour les Amis,
Avec mon niveau intermédiaire en PHP; j'aimerais savoir si ma façon de préparer mes requêtes depuis mon controller est une bonne pratique!
Voici un extrait de mon controller :
Et dans mon fichier model.php, la fonction se présente ainsi :
Je sollicite votre regard d'expert SVP!!
Avec mon niveau intermédiaire en PHP; j'aimerais savoir si ma façon de préparer mes requêtes depuis mon controller est une bonne pratique!
Voici un extrait de mon controller :
if ( isset($_POST['table']) && isset($_POST['carId']) && isset($_POST['carActuStatus'])
&& isset($_POST['actionAuthor']) && isset($_SESSION[ $_POST['actionAuthor'] ]) ) {
$table = htmlspecialchars($_POST['table']);
$carId = htmlspecialchars($_POST['carId']);
$carActuStatus = htmlspecialchars(trim($_POST['carActuStatus']));
$carAvailability='';
$actionAuthor = htmlspecialchars($_POST['actionAuthor']);
if ($carActuStatus == 'Indisponible') {
$carAvailability='non';
}else{
$carAvailability='oui';
}
//je vérifie si la variable $table est correcte avant de l'insérer dans ma requête
if ( $table != 'car_to_sell' AND $table != 'car_to_rent' ) {
echo 'Inpossible d\'effectuer cette action';
return;
}
$reqMessage = " UPDATE $table SET car_availability = :car_availability WHERE car_id = :car_id ";
$valueArray = ['car_id' => $carId,
'car_availability' => $carAvailability ];
//si l'action ne vient pas d'un administrateur
if ( $actionAuthor != 'admine') {
$authorPseudo = $_SESSION['partener_members']['pseudo'];
$reqMessage = $reqMessage." AND owner_pseudo = :owner_pseudo ";
$valueArray['owner_pseudo'] = $authorPseudo;
//pour être sûr que le véhicule appartient vraiment à cet utilisateur
}
//je passe ensuite en argument la requête préparée ainsi que mon array d'exécution à ma fonction
$carManager = new CarManager();
$reponse = $carManager->UpdateCarWithCustomableReq($reqMessage, $valueArray);
}
Et dans mon fichier model.php, la fonction se présente ainsi :
public function UpdateCarWithCustomableReq($reqMessage, $valueArray){
$req = $this->db->prepare(" $reqMessage ");
$result = $req->execute( $valueArray );
return $result;
}
Je sollicite votre regard d'expert SVP!!
A voir également:
- Est-ce une bonne pratique de préparer ses requêtes depuis le controller?
- Fiche pratique tableau croisé dynamique - Guide
- Fan controller - Télécharger - Optimisation
- Realtek pcie gbe family controller wifi ✓ - Forum WiFi
- En préparant son diaporama, tom a pris quelques notes qui l'aideront lors de sa présentation. quand il présentera l'âne, il a prévu de raconter une anecdote sur cet animal. comment s'appelle l'âne de son histoire ? - Forum Windows
- Steam controller est introuvable pes 2016 - Forum Jeux PC
1 réponse
Bonjour,
Donc non, ce n'est pas une bonne pratique.
De plus, la fonction htmlspecialchars ne dois servir que pour l'affichage des données dans le code html.. et jamais en "traitement" des variables à insérer (ou requêter) en bdd
Et pour finir, connais tu l'écriture ternaire ? ça simplifie un peu l'écriture du code
par exemple
en ternaire, donne
Donc non, ce n'est pas une bonne pratique.
De plus, la fonction htmlspecialchars ne dois servir que pour l'affichage des données dans le code html.. et jamais en "traitement" des variables à insérer (ou requêter) en bdd
Et pour finir, connais tu l'écriture ternaire ? ça simplifie un peu l'écriture du code
par exemple
if ($carActuStatus == 'Indisponible') {
$carAvailability='non';
}else{
$carAvailability='oui';
}
en ternaire, donne
$carAvailability = ($carActuStatus == 'Indisponible' ) ? 'non' : 'oui';
Cependant comment m'y prendre pour adapter mes requêtes en fonction de chaque situation? surtout les situation que je ne peux pas parfaitement contrôler? Par exemple lorsque l'utilisateur souhait filtrer les résultats sur la liste des produits avec plusieurs paramètres!
je m'y prenais comme cela :
$reqMessage = "SELECT * FROM $table WHERE admine_approbation = 'oui' "; $filterInfo = []; //Mais variable POST sont envoyées via Ajax if ( isset($_POST['brandFilter']) AND trim($_POST['brandFilter']) != '' ) { $carBrand = trim($_POST['brandFilter']); $reqMessage = $reqMessage. " AND carBrand REGEXP '^$carBrand' "; } if ( isset($_POST['carTypeFilter']) AND trim($_POST['carTypeFilter']) != '' ) { $carType = trim($_POST['carTypeFilter']); $reqMessage = $reqMessage. " AND car_type = :car_type "; $filterInfo['car_type'] = $carType; } //....Ainsi de suite pour une quinzaine de paramètres; ensuite: $carManager = new CarManager(); $reponse = $carManager->SelectCarWithCustomableReq($reqMessage, $filterInfo);Comment pourrai-je gérer une telle situation en créant des requêtes prédéfinies dans mon model?
Ben.. tu déplaces dans ton modèle le bout de code qui te permet de créer ta requête...
Au passage : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
.