J'aurais besoin de quelqu'un pour bêta-tester le système de connexion automatique. J'enverrai le tutoriel à la validation à nouveau après cet ajout !
Envoyez-moi un MP, ne polluez pas le sujet, merci.
Bon déja un ptit mot pour dire que je trouve le tuto sympa dans on ensemble, avec des bons conseils et des idées bien sympathique, comme la class Form.
Pour continuer sur la class Form, je trouve donc l'idée sympa mais je trouve un peu dommage de devoir déclarer 2 fois la structure du formulaire. Bon ok j'admets c'est pas compliqué mais bon c'est le principe qui me chiffonne un peu, alors je me demandai si il etait pas possible d'ajouter un champ de type hidden lors de l'appel a __toString du formulaire pour ajouter un champ contenant la structure du formulaire avec un appel a serialize ?
Enfin je dis ca j'ai pas testé et ca se trouve c'est plus lent ... mais bon c'est juste une idée quoi
Euuh j'ai ptet pas tout compris mais du coup la tu es obligé de redéfinir toutes les fonctions que tu veux utiliser ?
Bon ca peut etre cool mais si j'ai pas envie est ce que j'aurai pas mieux a faire de mettre le new PDO directement dans self::$instance ?
Euuh j'ai ptet pas tout compris mais du coup la tu es obligé de redéfinir toutes les fonctions que tu veux utiliser ?
Bon ca peut etre cool mais si j'ai pas envie est ce que j'aurai pas mieux a faire de mettre le new PDO directement dans self::$instance ?
@ Peluche
Et oui en effet tu dois ajouter toutes les méthodes de PDO à ta class SPDO ... pas très pratique.
Essaie en remplaçant la ligne
return self::$instance;
par
return self::$PDOinstance;
Je pense que la classe SPDO a un problème : c'est self::$PDOinstance qui nous intéresse, pas self::$instance... (je me demande même ce que self::$instance vient faire ici...).
[edit] Re-validation du tutoriel aujourd'hui avec corrections de tous les bugs que l'on m'a signalé (du moins j'espère) ainsi que l'ajout de la connexion automatique !
Yeah, à mon tour de venir pourrir le topic. Ou pas.
Pour l'avis (flemme d'écrire un commentaire), tu le connais je pense (bien, chouette, toussa toussa) :].
Pour revenir sur une extension de PDO : Non, pas besoin de redéfinir toutes les méthodes... Par contre, si on veut coller aux standards stricts de PHP (via un petit <?phperror_reporting(E_ALL|E_STRICT);), il faut avoir exactement la même signature que l'originale... Jusqu'au noms des attributs (je me suis fait avoir très longtemps comme ça, je pense que Savageman peut en témoigner §§) !
je trouve un peu dommage de devoir déclarer 2 fois la structure du formulaire
Hum... On ne déclare qu'une fois la structure du formulaire, de quoi parles-tu ? Quel est le rapport avec serialize() ?
Ah ué, j'avais lu un peu vite le truc et du coup j'avais pas bien saisi le fonctionnement de la chose. Mea Culpa
@balzard :
J'ai déjà fais . En fait mon message c'était plus pour savoir si j'étais le seul a trouver le fonctionnement de SPDO un peu euh ... bancal ? (Enfin c'est pas vraiment bancal mais bon si on veut juste se contenter du singleton ça l'est [enfin ... a mon avis ]). Mais merci quand même .
@Talus :
Euuh pas tout compris, peux tu approfondir stp ?
@Talus :
Euuh pas tout compris, peux tu approfondir stp ?
Va sur son blog y'a plus de détails ! : http://blog.talus-works.net/
Mais en effet ce genre d'info meriteraient d'être explicitées plus clairement et avec encore plus de détails
Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)
Vous pouvez remercier S0pra qui s'est penché longuement sur la classe Form et m'a signalé un certain nombre de bugs. Je vous conseille vivement de la re-télécharger et de remplacer votre fichier actuel form.php afin d'avoir une meilleur base !
Salut déjà merci pour avoir créer ce tutoriel, je comprends maintenant comment fonctionnent les sites . J'ai cependant quelques problèmes :
Config : Wampserver
Version de Apache:
2.2.11
Version de PHP:
5.2.8
Version de MySQL:
5.1.30
Alors je poste quelques erreurs que j'ai : modeles/membres.php
<?php
function lire_infos_utilisateur($id_utilisateur) {
$pdo = PDO2::getInstance();
$requete = $pdo->prepare("SELECT id, nom_utilisateur, mot_de_passe, adresse_email, avatar, date_inscription, hash_validation
FROM membres
WHERE
id = :id_utilisateur");
?>
J'ai été obligé de rajouter id pour SELECT id.
modifier_profil.php : j'obtiens l'erreur suivante 2 fois Warning: Invalid argument supplied for foreach() in C:\wamp\www\Site web\www\Site Voiture\libs\form.php on line 244
Seuls les inputs du type submit s'affichent
afficher_profil.php : j'obtiens les erreurs suivantes : Notice: Undefined offset: 4 in C:\wamp\www\Site web\www\Site Voiture\modules\membres\afficher_profil.php on line 24
Notice: Undefined offset: 3 in C:\wamp\www\Site web\www\Site Voiture\modules\membres\afficher_profil.php on line 24
Notice: Undefined offset: 2 in C:\wamp\www\Site web\www\Site Voiture\modules\membres\afficher_profil.php on line 24
Notice: Undefined offset: 0 in C:\wamp\www\Site web\www\Site Voiture\modules\membres\afficher_profil.php on line 24
Elles n'apparaissent plus si j'utilise
$nom_utilisateur=$infos_utilisateur['nom_utilisateur'];
$adresse_email=$infos_utilisateur['adresse_email'];
$date_inscription=$infos_utilisateur['date_inscription'];
Pourtant d'après http://fr2.php.net/manual/fr/function.list.php ta fonction est parfaitement utilisée alors bizarre
Sinon une question pour la suite, pour ton TP livre d'or comptes-tu utiliser un captcha ? sinon il serait intéressant de l'ajouter à ta classe Form.php
Bof, suffit de rajouter un champ de type texte pour contenir le code, et en tant que label, spécifier une image... ou le captcha en lui meme (car un captcha n'est pas forcément une image, après tout !).
Pour modifier_profil, c'est que la définition des fieldsets n'est pas bonne.
$form_modif_infos->fieldsets("Modification de l'e-mail et de l'avatar", array('adresse_email', 'suppr_avatar', 'avatar'));
à remplacer par :
$form_modif_infos->fieldsets("Modification de l'e-mail et de l'avatar" => array('adresse_email', 'suppr_avatar', 'avatar'));
Pour l'erreur de list(), c'est... louche. :/ Je ne vois pas trop quoi faire...
Bon je continue sur les bugs que j'ai (rooh le vilain ) modifier_profil.php
erreur : Fatal error: Call to undefined method Form_Submit::initial() in C:\wamp\www\Site web\www\Site Voiture\modules\membres\modifier_profil.php on line 33
ligne incriminée : ->initial("Modifier ces informations !");
solution : j'ai remplacé initial par value tout simplement, même erreur pour le formulaire suivant
Pour la fonction list il faudrait savoir si ça le fait que chez moi, si ca vient de wamp, je vais le mettre a jour (s'il y en a une) EDIT: j'ai la version la plus récente.
modifier_profil.php : j'obtiens l'erreur suivante 2 fois
Warning: Invalid argument supplied for foreach() in C:\wamp\www\Site web\www\Site Voiture\libs\form.php on line 244
Seuls les inputs du type submit s'affichent
tu m'as répondu cependant il n'y a pas de code ressemblant a $form_modif_infos->fieldsets
j'ai seulement fait un copier coller de ton code.
Merci pour ta rapidité de réponse.
J'obtiens une erreur de parsage
Parse error: parse error in C:\wamp\www\Site web\www\Site Voiture\modules\membres\vues\formulaires_modifier_profil.php on line 29
EDIT: j'a carrément enlevé les lignes
$form_modif_infos->fieldsets("Modification de l'e-mail et de l'avatar" , array('adresse_email', 'suppr_avatar', 'avatar'));
et
$form_modif_mdp->fieldsets("Modification du mot de passe" , array('mdp_ancien', 'mdp', 'mdp_verif'));
tout s'affiche, je vais voir s'il n'y a pas de probleme d'enregistrement
EDIT2: En fait j'ai pas encore écrit les fonction pour les mises à jour XD, je fais ca et je renvoie un message
EDIT3:Non ca ne marche pas
Pas très pratique pour avoir à quoi correspond une case à cocher sans texte .
Sinon j'ai rencontré le même problème avec les list(), la doc php nous apprend que list ne fonctionne que sur des tableaux numéroté commençant à 0.
Donc pour retourner un tableaux numéroté avec PDO, utilisé la constante PDO::FETCH_NUM (et attention de ne pas planter les autres scripts si vous modifiez ).
Maintenant quelques erreurs relevée dans la partie sur le profil.
- Partie "Fonctions du modèle membres"
Tu parles de la fonction maj_email_membre à créer mais dans le script tu utilises maj_adresse_email_membre.
- Partie ~/modules/membres/modifier_profil.php
Peut-être mettre les formulaires en POST
A la ligne 101 du script, la fonction emty n'existe pas .
Pour finir une petite question, comment faire pour récupérer plusieurs entrées dans la bdd toujours avec des fonctions dans les modèles ?
Car pour le moment on a toujours récupéré une seule donnée qu'on retourne directement.
Et merci pour ce big-tuto qui apprend pas mal de choses .
Lorexe
PS : Je n'avais pas vu ce topic au début alors j'ai posté dans les commentaires pour signaler quelques bugs (lien).
Le MVC n'est pas du tout une alternative au template, bien au contraire, tu peux coupler une architecture MVC AVEC un moteur de TPL et cela sans probleme.
Il te suffit simplement de revoir ton FS pour que tout tes templates (ou tes vues) soit dans le même dossier.
Pas très pratique pour avoir à quoi correspond une case à cocher sans texte .
Il y avait une petite faute de frappe dans le fichier libs/form.php (il a été mis à jour récemment je crois car je ne la vois plus ) mais vérifie que ton code form.php contienne bien
Le problème se situait aux alentours de la ligne 23.
Le plus simple si tu ne vois pas directement est d'interchanger le code de ta classe par celui-ci (il fonctionne chez moi )
Pour les problèmes de textarea,
essayer de remplacer la ligne de code ci-dessous (elle se trouve dans la class form_textarea, ligne 1033)
$value = htmlspecialchars($this->form->get_bounded_data($this->attrs['name']));
par
Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)