Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 11h41   #1
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Par défaut Récuperer formulaire avec des classes php

Bonjour,

Voilà, je débute en POO notamment avec php. J'ai beau chercher des cours ou des sources à ce sujet mais je ne trouve pas grand chose.

En fait, j'aimerai comprendre comment utiliser des classes pour récupérer les données d'un formulaire classique.

En gros, j'aimerai stocker dans une bdd mysql, les informations d'un client (nom, prenom...) donc j'aurai une class client avec ses attribut (nom, prenom, email....) surement une class mysql mais je ne sais pas vraiment comment m'y prendre.

Quelqu'un pourrait-il m'aider ? Au moins me guider sur les démarches à faire.

Merci d'avance.
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h01   #2
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Il faut que tu modélises les entités que tu as en base de données sous forme de classe d'objets (i.e : une classe client). C'est la base de la base : http://php.developpez.com/faq/?page=classes

Ensuite, ce n'est pas parce que tu évolues dans un langage objet que tu dois utiliser ou créer des classes tout le temps. En PHP, pour récupérer un champ de formulaire il suffit d'utiliser la superglobal $_REQUEST (ou $_GET / $_POST).

Exemple, inscription d'un client dans le site :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
if(isset($_POST['submit']) && !empty($_POST['nom'])){
    $u = new client();
    $u->setNom($_POST['nom']);
    $u->save();
}
?>
<form action="" method="post">
    <fieldset>
        <input type="text" name="nom" value="" placeholder="Votre nom" />
        <input type="submit" value="Valider" name="submit" />
    </fieldset>
</form>
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h17   #3
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Merci d'avoir répondu aussi rapidement déjà

Peux-tu me dire ce que contient ta fonction save() ? je suppose qu'elle se trouve dans la class client.
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h24   #4
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Peux-tu me dire aussi quelles fonctions doit contenir ma class client ?
Si c'est à cet endroit que jdois mettre ma fonction insertion dans la base.
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h56   #5
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Cela dépend de ce qu'est une entité client pour toi.
L'insertion de la base peut se faire dans la classe "client", ou dans une classe "db". Mais il faut exposer une méthode dans la classe client qui permet d'insérer ou mettre à jour la base de données.

Code :
1
2
3
4
5
6
7
 
class client{
    public function save(){
        if($this->isnew) // do insert
        else // do update
    }
}
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 15h26   #6
Candidat au titre de Membre du Club
 
Inscription : février 2007
Messages : 81
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2007
Messages : 81
Points : 11
Points : 11
Pour le moment, j'ai 3 fichiers disons, index.php avec mon formulaire, classClient.php et classMysql.php (dans lequel je fais ma connexion à la base et ou je fais mes requetes SQL) ça semble cohérent ?
Arkoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 16h07   #7
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Si tu passe ton identifiant de connexion a tes appelles aux class qui requièrent une requête, tu peux très bien intégrer tes requêtes au sein des class.

Autrement, il faut que chaque class?????.php héritent de classMysql.php.

Personnellement je préfère la première option. Quelqu'un d'autre saura sûrement me corriger si je me trompe.
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 16h53   #8
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Citation:
Si tu passe ton identifiant de connexion a tes appelles aux class qui requièrent une requête, tu peux très bien intégrer tes requêtes au sein des class.
Autrement, il faut que chaque class?????.php héritent de classMysql.php.
@riete : Non, il existe la notion de singleton.

Code :
1
2
3
4
5
6
7
8
9
10
 
class classMysql{
    private static $_inst;
 
    public static function instance(){
        if(self::$_inst === NULL)
            self::$_inst = new classMysql;
        return self::$_inst;
    }
}
Code :
1
2
3
4
5
6
7
class classClient{
    private $_db;
 
    public function __construct(){
        $this->_db = classMysql::instance(); // keep local reference
    }
}
Citation:
Pour le moment, j'ai 3 fichiers disons, index.php avec mon formulaire, classClient.php et classMysql.php (dans lequel je fais ma connexion à la base et ou je fais mes requetes SQL) ça semble cohérent ?
@Arkoze : Oui.

À bientôt,
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 15h03   #9
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Citation:
Envoyé par ThomasR Voir le message
@riete : Non, il existe la notion de singleton.
Bonjour ThomasR,
Tes remarques ton toujours très judicieuses. J'avoue humblement ne pas être un gourou de la programmation objet, même si je l'utilise. J'aimerais donc avoir une petite précision.

Est ce que tu veux dire que ma remarque "il faut que chaque class?????.php héritent de classMysql.php" est une pure ineptie? ou simplement qu'il est préférable d'utiliser la notion de singleton pour préserver quelque chose? et dans ce cas quoi?

La méthode que j'utilise depuis pas mal d'années fonctionne bien, mais je serais prêt à changer ma façon de faire s'il y a un intérêt réel à le faire ou si ce que je fais présente un risque que je n'ai jamais évalué.

Merci
riete est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/02/2011, 15h24   #10
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 139
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 139
Points : 2 884
Points : 2 884
Citation:
Est ce que tu veux dire que ma remarque "il faut que chaque class?????.php héritent de classMysql.php" est une pure ineptie? ou simplement qu'il est préférable d'utiliser la notion de singleton pour préserver quelque chose? et dans ce cas quoi?
Salut @riete, et merci,

D'après moi toutes entités ne devraient pas hériter d'une classe "classMysql", conceptuellement cela ne colle pas. Le principe de l'héritage c'est que le classe qui hérite doit représenter une entité plus spécifique que la classe mère. Concrètement, on ne souhaite pas signifier que la classe fille est une instance de la classe SQL mais qu'elle a une instance de la classe SQL.

Un autre souci avec cette méthode d'héritage de "classMysql" c'est que cela appelle le constructeur de cette classe énormément de fois alors que souvent ce constructeur contient par exemple un appel à mysql_connect, alors qu'un seul serait nécessaire dans toute l'application. Le gain de performance est énorme à utiliser un singleton dans ce cas.

Avec un singleton ca allège aussi pas mal le code.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2011, 15h03   #11
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Salut ThomasR

Tu confirme ce que j'écrivais plus haut, LIMPIDE, pour moi qui ai tant de mal à penser Objet

En tous cas dans mes développements, je ne fais pas usage de l'héritage de classe "classMysql" pour mes objets qui utilisent la BDD. Je passe l'identifiant de connexion à chaque usage de méthode faisant appel à la BDD.

Tu donnes des cours de conceptualisation objet ? je suis client.
riete est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 02h06   #12
Nouveau Membre du Club
 
Homme
à la recherche d'un stage de fin de formation dans le décisionnel
Inscription : juillet 2002
Messages : 117
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : à la recherche d'un stage de fin de formation dans le décisionnel

Informations forums :
Inscription : juillet 2002
Messages : 117
Points : 35
Points : 35
merci pour cet échange très instructif

riete, peux tu mettre stp ton exemple ici pour qu'on puisse s'inspirer de travail réaliser.

Merci
amnay est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h48.


 
 
 
 
Partenaires

Hébergement Web