Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Php mvc
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Php mvc

Posté le 18/04/2017 09:24

Yo, malgré toutes les discussions sur le chat à ce propos, j'ai quand-même décidé de faire un sujet à ce propos pour être certain de ce que je m'apprête à modifier.

Voici mon code :

https://hastebin.com/rocunuzici.xml

Ce que je comptais en faire :

- Laisser le formulaire tel quel, la Vue.
- Mettre les lignes 17 à 64 dans un fichier, le contrôleur, dans une fonction inscription avec en paramètre les lignes 6 à 15.
- Mettre les lignes 60 à 62 dans un fichier, le modèle.

Moins important :

- Passer le formulaire en POST.
- Hasher le MDP dans la base de données (avec sha1).

Est-ce que ça vous paraît correct ?


Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 18/04/2017 10:08 | #


- Laisser le formulaire tel quel, la Vue.

Utilises
<?= $Nom ?>
. ça fait la même chose que
<?php echo $Nom ?>
mais en plus concis et de la même manière que les moteurs de templates que tu devras utiliser plus tard dans les backends.

Mettre les lignes 17 à 64 dans un fichier, le contrôleur, dans une fonction inscription avec en paramètre les lignes 6 à 15.

Pour ma part, j'aurais plutôt passer le tableau $_GET en paramètres et mis les lignes 12 à 15 dans le contrôleur.

- Mettre les lignes 60 à 62 dans un fichier, le modèle.

Les lignes 60 à 62 ont aussi leur place dans le modèle. Il ne doit normalement pas y avoir de requêtes SQL dans le contrôleur(sauf si tu utilises un ORM,mais dans ce cas, c'est pas vraiment du SQL)

- Passer le formulaire en POST

Excellent point. Faut respecter le HTTP dans la vie

- Crypter le MDP dans la base de données (avec sha1).

Utilises la sha2 (sha256 ou sha512) pour plus de sécurité.
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 18/04/2017 10:34 | #


Ah oui, la fonction aussi doit aller dans le modèle et l'appel dans le contrôleur, je me suis trompé. Comment faire pour include un fichier qui est dans un dossier à part ? J'ai le dossier Modèle, le dossier Vue et le dossier Contrôleur, comment, depuis un fichier dans la Vue, include un fichier dans le contrôleur ? Ça paraît con mais le chemin ne fonctionne pas :/

Pour le reste, je prends note, merci
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 18/04/2017 10:37 | #


Ben
include("../Modèle/modele.php");
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 18/04/2017 12:22 | #


Ok, j'ai tenté la chance :

Vue : https://hastebin.com/qadaraqomi.xml
Modèle : https://hastebin.com/nahakazeku.xml
Contrôleur : https://hastebin.com/yihudoremu.xml

+ Connexion à la BDD (bdd.php) : https://hastebin.com/zopekijupe.xml

J'ai un fichier Vue, Modele et Controleur mais j'ai ceci en résultat :

https://gyazo.com/2901749e4a12c88af765a188125f069a

Une idée du souci ?
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 18/04/2017 12:31 | #


Dans ta vue, il faut que Tu inclues ton contrôleur
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 18/04/2017 12:34 | #


Ça ne suffit pas de l'avoir mis dans le 'action' du formulaire ? Et ça va régler les erreurs ?
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 18/04/2017 12:37 | #


Ben il faut bien que les variables que tu utilises soit définies
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 18/04/2017 12:38 | #


https://gyazo.com/95d49ed3abede6c6d88a49fb9ec55b18

Je pense que le passage du $_GET en fonction ne se fait pas comme je l'ai fait mais j'ai aucune idée de comment passer un formulaire GET en paramètre.
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Amael Hors ligne Membre Points: 253 Défis: 9 Message

Citer : Posté le 18/04/2017 19:50 | #


Alors, par rapport à ton code, je dirais :

Vue :

Contrairement à Intelligide, je préfère les
<?php echo $var ?>
aux
<?= $var ?>
car ils sont plus clairs lors de la lecture (mais ce n'est que mon avis). Sinon, utilise un véritable moteur de templates...

Modèle:

Euhh, attends, c'est ton modèle qui gère la soumission du formulaire ???
Et en plus, le modèle émet du texte 
Bref, résumons ce que doit faire un modèle : L'interaction avec la BDD (lecture, écriture, modification, etc.) avec éventuellement des vérifications.

Pour répondre à ta question, $_GET est une variable superglobale, elle est présente dans TOUS les scopes, tu n'as donc pas besoin de la passer en paramètre de ta fonction...

Contrôleur:

C'est LUI qui doit faire la gestion du formulaire. (Ou un autre fichier, dans un dossier Formulaire, par exemple)
Personnellement, je trouve qu'il est un peu léger.

Sinon, lors de la validation du formulaire, tu ne vérifie pas si toutes les variables GET sont présentes avant de les utiliser (l 13 à 16), d'où un risque d'erreurs 500 (Key "Email" doesn't exist in array "$_GET".) au lieu d'un simple Veuillez entrer un pseudo.
Lors d'erreurs de validation, il serait intéressant de soit:
- rediriger l'utilisateur vers le formulaire (qui serait alors vide... )
- afficher le formulaire prérempli, sauf pour les champs invalides et les mots de passe.
Il faudrait utiliser
require('path/du/fichier.php');
au lieu de
include('path/du/fichier.php');
car include, lorsqu'elle échoue, ne stoppe pas l'execution de la page, ce qui déclenche d'autres erreurs, alors que require si.
Si c'est possible, c'est fait; si c'est impossible, cela se fera.

Mes programmes (À noter sous peine de ban )
Notez les !
Monopoly bank Pratique si vous perdez les billets
Remplissez facilement vos listes avec Statistiques
Et des conversions des unités du système métrique.
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 18/04/2017 20:49 | #


Rapidement, pourquoi il ne faut plus utiliser SHA-1.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 18/04/2017 22:18 | #


Merci pour ces conseils Amael, j'ai vraiment beaucoup de mal avec cette connerie et tant que j'aurais pas réussi un exemple concret comme celui-ci de la bonne façon, je n'y arriverai foutrement pas. Il faudrait que je tente un contact oral avec quelqu'un pour ça.
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message

Citer : Posté le 19/04/2017 19:06 | #


C'est en codant des projets de plus en plus complexes que tu vas comprendre l'intérêt de l'architecture MVC
Smashmaster Hors ligne Membre d'honneur Points: 4561 Défis: 253 Message

Citer : Posté le 20/04/2017 18:25 | #


Pour les requêtes SQL je te conseille d'utiliser PDO : http://php.net/manual/fr/book.pdo.php

exemple :

PDO a écrit :

try {
$dbh = new PDO('mysql:host=127.0.0.1;dbname=nomdelabase', 'root', 'psw');
$dbh->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION); // http://php.net/manual/fr/pdo.setattribute.php
$stmt = $dbh->prepare('INSERT IGNORE INTO table VALUES (:uid1, :uid2);');
$stmt->bindParam(':uid1', $this->_uid1);
$stmt->bindParam(':uid2', $this->_uid2);
$stmt->execute();
} catch (PDOException $e) {
//erreur
}


C'est plus sécurisé.

Ajouté le 20/04/2017 à 18:31 :
Pour chiffrer un mot de passe il y a password_hash : http://php.net/manual/fr/function.password-hash.php

Pour vérifier le mot de passe il y a password_verify : http://php.net/manual/fr/function.password-verify.php

Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 20/04/2017 21:12 | #


Merci pour ces infos, je vais déjà essayer de passer le code en MVC avant de l'améliorer

Ajouté le 21/04/2017 à 16:19 :
J'ai pris connaissance de vos conseils sur les optimisations et améliorations de sécurité mais je me suis pour le moment concentré sur le mode MVC.

Voici mes nouvelles pages dont la trame a été validée par ma prof, il subsiste trois soucis :

Modèle : https://hastebin.com/ifusikoquj.pl
Vue : https://hastebin.com/vekahiquyi.xml
Contrôleur : https://hastebin.com/ceziyedeci.xml

Premier souci : J'ai créé une fonction dans le contrôleur. Dans l'action du formulaire de ma vue, je pense que la fonction est appelée mais que je reste dans le fichier.
Deuxième souci : J'ai mis en paramètre de ma fonction le tableau $_GET pour pouvoir récupérer la valeur de toutes mes variables, que je devrais mettre en return mais ça ne fonctionne pas.
Troisième souci : Celui-ci est lié au deuxième souci, dans le modèle, vous pouvez voir le INSERT des valeurs de mes variables. Vu qu'elles ne sont pas retournées dans la fonction, dans le modèle, ces variables ne valent donc rien et la base de données n'est donc pas remplie.

Avez-vous une idée s'il vous plait ?
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 21/04/2017 16:28 | #


function inscription($_GET)


C'est inutile.
$_GET est une super globale, c'est à dire qu'elle est accessible absolument partout. Tu n'as donc pas besoin de la passer en paramètre. Tu peux donc utiliser $_GET sans aucune précédente déclaration, php s'en occupe tout seul !
Essai de l'enlever et reviens vers nous si tu as encore des problèmes
1337
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 21/04/2017 16:34 | #


Ça me règle le souci numéro 2, ma fonction fonctionne aussi, ce qui règle normalement le souci numéro 1, il ne me reste que le 3, qui est que je n'ai pas les valeurs de mes variables dans le fichier modèle, comment les lui passer ?
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 21/04/2017 16:41 | #


Est-ce que tu es sûr modele.php est bien appelé et que la ligne 6 est bien exécuté ?
Parce qu'a vu d'oeuil je ne vois pas le problème. Les variables sont normalement passées automatiquement au fichier modèle quand tu le require.
1337
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 21/04/2017 17:44 | #


Je suis certain que modele.php est appelé car j'ai ensuite la redirection sur google. Pour les variables, en faisant le require, les variables ne sont certainement pas passées automatiquement, ce pourquoi je pense que le problème vient de là. Dès que je récupère mon PC (je l'ai prêté un peu ce soir), je tente un DIE pour voir si j'ai une erreur.
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 21/04/2017 18:01 | #


Soit le require foire (erreur de chemin), soit il y a un problème avec la base de donnée, mais les variables existent.
Faire un require/include, c'est comme-ci tu copié collé le code dans ton fichier qui fait l'appel
1337
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 21/04/2017 18:14 | #


Les fichiers sont actuellement tous au même endroit pour mes tests, ça vient pas de là. Tu es sûr que les variables sont automatiquement passées avec le require ? Je teste le DIE dès que je peux.

Et non, un require, ça t'emmène sur la page que tu as appelée et le code s'exécute, si tout se passe bien, tu retournes dans la page qui faisait l'appel. J'ai appris ça tout à l'heure en me trompant avec ma prof. Include, je ne suis pas sûr
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 106 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd