IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Classe de gestion de BDD par formulaire [Tutoriel]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut Classe de gestion de BDD par formulaire
    Je veux proposer un tuto exposant une class (php5) dotée :

    1-D'une methode qui permet de recuperer la structure de la table dans une base de données mysql5 et de créer automatiquement un formulaire.
    *S'il existe des clés étrangères dans la table definie, dans la methode, l'on recupère des libellés dans la table mère: on les affichent dans une liste; liée à une autre liste cachée qui contient les clés des valeurs affichées.
    *Si la valeur d'un champs est superieure à 100 : on edite un objet textarea.

    2-D'une Methode qui permet d'ajouter un enregistrement dans la base de données à condition de specifier le nom de la table.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    Chouette, eh bien on attends plus que le résultat alors ?

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je suis curieux de voir cela...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut

    c'est un tuto ou du code

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par jeff_!
    salut

    c'est un tuto ou du code
    Disant c'est un code expliqué comprenant une introduction et un developpement, intégrant les nouveautés de mysql5 (schema de la base de données : chose qui n'existait pas dans les anciennes versions de mysql).

    Je veux le presenter comme un tuto.


    Qu'en penses tu !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    vue comme ca d'accord
    mais je me demande si ca ne devrai pas faire 2 tuto
    1 presentation de mysql5(pour les fonctions qui t'interresse)
    2 l'interaction avec php

    mouia finalement je suis pas convaincu par ma proposition

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    3 Création du dit formulaire

    Enfin sinon
    Citation Envoyé par Yogui
    Je suis curieux de voir cela...

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut
    je tenais à faire une presentation de ce tuto avec tous les details possibles pour permettre à plusieurs personne de le consulter; vu le densité du code, et ma disponibilité je prefere poster le code ici.

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut
    Retrouver le code en fichier en pièce jointe. Class man.doc

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut exemple d'utilisation
    code en pièce jointe Exemple d'utilisation.doc

    Pour un premier temps j'ai besoin des remarques ja'i d'autres fonctions de la même classe.

    1 fonction add($table) ajouter un enregistrement.
    2 fonction Tmerror($tb,$f) affiche un message personnalisé
    d'une erreur mysql.
    ainsi de suite..

  11. #11
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Désolé de troller comme ca mais...

    j'ai pas tout lu, pour une raison simple, j'aime pas les variables non explicites... j'ai vu une variable qui s'appellais "$tbv" et j'ai décroché. Pour moi le plus important c'est la lisibilité du code. Certes, une variable de 36 caracteres ralentira peut etre l'execution surtout que php n'est pas compilé mais je prefere comprendre mon code pour le modifier par la suite que d'avoir des perfs de ouf'... surtout quand on propose un code dans un tutorial susceptible d'etre lu par tout le monde y compris des débutants... faudrait pas leur donner de mauvaises habitudes... meme remarque pour les noms des fonctions (vision ?!?! rapporteur ?!?). Apres, je suis pas psycho rigide non plus, je te laisse le choix entre un_nom_de_variable et unNomDeVariable, bien que j'ai une préférénce pour le 2eme choix ;o)

    Aux admins > j'suis chiant aujourd'hui, toutes mes excuses encore ;oþ J'aurais préféré un document RTF, voir un fichier txt qu'un doc... moins de méchantes macros possibles

    Edit (encore) : vacknov > aaahhh, la sacro sainte Regle n°1 ;o) Tout cela me parait décidemment plein de mauvaises habitudes... mais plein de bonne volonté sans doute, c'est un bon point ;o)

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut
    Merci.

    Remarques acceptées, sur les noms de variables et les fonctions.

  13. #13
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut curiosité
    vous étiez curieux de voir cela...

    Je suis à mon tour curieux de savoir ce que vous en pensez.
    dois je m'arrêter par ce code où bien je peux poster d'autres fonctions ?

  14. #14
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Je rejoint complètement l'avis de Fladnag.

    Sinon j'etais juste complètement choqué à la deuxième page :

    ...
    class man
    {
    ....
    function vision($a,$c,$d)
    {

    $x=0;
    if(isset($_POST[$a])) $x=$_POST[$a];
    if(isset($_GET[$a])) $x=$_GET[$a];
    ?>

    <script language="javascript">
    var i=0;
    var obj1=document.getElementById("<?php echo $c; ?>");
    var obj2=document.getElementById("<?php echo $d; ?>");

    while(i!=obj1.options.length)
    {
    obj1.selectedIndex=i;
    if(obj1.options[obj1.selectedIndex].text=="<?php echo $x; ?>")
    {
    obj1.selectedIndex=i;
    obj2.selectedIndex=i;
    i=obj1.options.length-1;
    }i++;
    }

    </script>
    <?php
    }
    ...
    Serait je entrain de vivre un sombre cauchemard ? ou la méthode vision envoie t'elle des données sur la sortie standard ???
    Pire encore elle utilise des variables globales ?!

    Je suis sur que tu est plein de bonne volonté, et je t'en félicites, mais je pense qu'il y à encore quelques règles simple qui t'échappe, comme par exemple la séparation franche du code fonctionnel et de la vue.

    Autrement sur la forme du document je n'ai pas trouvé d'intro. Hors ceci est primordial. La tu balances de but en blanc des noms de classes.. C'est un peu trop abrupt.

    Aussi, je dois dire que si je devait utiliser cette classe il y à un élément qui est complètement absent et dont je serais complètement insatisfait.
    C'est la gestion des styles css pour mes champs textes.
    Gestion qui est inexistante ici.

    Et puis j'ai le sentiment que tu as les yeux plus gros que le ventre
    Si un tel projet devait être menait à terme pour un usage véritable je pense qu'il serait constitué de bien plus que 250 ou 300 lignes de codes et 2 classes.
    Mais ce n'est que mon avis.

    Bon courage pour la suite.

    bbye

  15. #15
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Serait je entrain de vivre un 
    sombre cauchemard ? ou la méthode vision 
    envoie t'elle des données sur la sortie standard ???
    Pire encore elle utilise des variables globales ?!
    Cependant c'est la realité. la méthode fonctionne. lors de la création de deux objets Listes et qu'il y'a des indexes dans le tableau $_POST portant le même nom que la liste.

    Elle permet de revenir sur l'élément selectionné avant le post après la construction des listes dans un formulaire.

    Pour l'introduction, faute de temps.

    As tu testé ce code ?

  16. #16
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut explication
    crées une table personne dans ta base de données comprenant deux champs
    matricule et nom insert dans ta table trois enregistrements.

    crées un fichier php.
    oublions la class.

    crées la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    function mwriteobjects($c1,$c2,$table,$f)
    {
    $query="select * from".$table.;
    $result1=mysql_query($query)
    $row1=mysql_fetch_array($result1);
     
    mysql_data_seek($result1, 0); 
    echo "<select name=\"".$c2."\" id=\"".$c2."\" onChange=\"".$f."\" style=\"WIDTH: 205px\">";
    	if($recordcount1 !=0)
    	{
     
    		while($row1=mysql_fetch_array($result1))
    		{
    		echo "<option value=\"".$row1[$c2]."\">".$row1[$c2]."</option>\n";
    		}
    	}
    echo "</select>";
     
    echo "<select name=\"".$c1."\" id=\"".$c1."\" style=\"display:none\">";
     
    	if($recordcount1 !=0)
    	{
            mysql_data_seek($result1, 0); 	
    		while($row1=mysql_fetch_array($result1))
    		{
    		echo "<option value=\"".$row1[$c1]."\">".$row1[$c1]."</option>\n";
    		}
    	}	
    echo "</select>";
    ?>
    <script language="javascript">
    function <?php echo $f ;?>
    {
     
    var obj1=document.getElementById("<?php echo $c1; ?>");
    var obj2=document.getElementById("<?php echo $c2; ?>");
    var obj3=document.getElementById("<?php echo "i".$c1; ?>");
    obj1.selectedIndex=obj2.selectedIndex;
    }
    </script>
    <?php
    vision("<?php echo $c1 ?>","<?php echo $c1 ?>","<?php echo $c2 ?>");
    }
    intègre la fonction vision dans la même page.

    Definis l'autre partie de la fenêtre comme suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <html>
    <head>
    <script language=javasctipt>
    function send()
    {
    form1.action="la_même_page";
    form1.submit();
    }
    <script
     
     
    </head>
     
    <body>
    <form name=form1 action="" method=post>
    <?php mwriteobjects("matricule","nom","personne", "send()"); ?>
    </form>
    </body>
    </html>
    constat tu reviens sur l'élément selectionné avant le poste.

  17. #17
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je pense que tu fais fausse route. En effet, ePoX te parlait de ton code en lui-même qui, s'il fonctionne, n'est pas très "propre".

    Une classe, une fois instanciée, devrait être autonome. Lors de l'instanciation, les seules variables qui devraient avoir de l'influence sont les paramètes du constructeur. Ici, ta classe utilise les globales $_GET et $_POST, ce qui n'est pas la meilleure des méthodes de programmation.

    Par ailleurs, tu as une méthode nommée "vision" qui s'occupe d'envoyer du code HTML au navigateur en vue de l'afficher. N'y a-t-il pas comme une incohérence ici ?
    Dans le même ordre d'idées, tu sors de PHP avec ?> en plein milieu de ta classe. De mon côté, cela me chiffonne un peu...


    Je n'ai pas lu ton code, je ne fais que réagir par rapport aux commentaires précédents.

    Cette classe est une bonne idée, une idée louable en soi. Cependant, tel que je l'ai suggéré dès le départ en évoquant ma curiosité (ePoX l'a énoncé plus clairement par la suite), je crains que ce soit une tâche très ambitieuse.

  18. #18
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut Méthode command
    fait partie de la class man.

    il permet d'executer les commandes SQL.


    $query: requête à executer
    $f: fichier cible après l'execution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function command($query,$f)
    {
    mysql_select_db($this->connexion["database"]);
    $result=mysql_query($query,$this->connexion["connexion"]) or die($this->Tmerror($this->tbv,$f));
     
    return $result;
    }
    les messages du type mysql_error() sont imcomprehensible aux internautes
    raison pour laquelle j'utilise la fonction Tmerror($this->tbv,$f)

    $tbv est un tableau contenant les libellés des champs sur le formulaire et le nom des champs dans la table.

    voir doc :gestion des erreurs.doc

  19. #19
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 133
    Points
    133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dans le même ordre d'idées, tu sors de PHP avec ?> 
    en plein milieu de ta classe. De mon côté, cela me chiffonne un peu...

    Sortir du php en plein de la classe ne cause aucun souci à condition de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    class AZY
    {
     
    ?>
    (html et javascript intégrés à une fonction de la même classe font partie de cette classe)
    <?php
    }
    ?>

  20. #20
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Ecoute je n'ai pas testé le code.
    Je n'en ai pas senti le besoin car je ne pense pas qu'il y ait besoin de remettre en question le fait qu'il fonctionne.
    Et d'ailleurs je ne le ferai pas.
    La ligne de code n'est pas une fin en soit...
    Elle n'est la que pour accomplir un but. Et un tuto est la pour expliquer le procédé mis en place pour atteindre ce but.
    Donc fonctionnel ou pas le code est la pour aider à la compréhension en illustrant par l'exemple le comment j'ai atteint le but fixé au départ.

    En clair, rajoute un peu de texte dans ton tuto, puis agrémente le de ton code. Et on commencera à y voir plus clair.

Discussions similaires

  1. Classe de gestion de BDD
    Par Aldéhir dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 9
    Dernier message: 19/09/2012, 08h00
  2. problème "Gestion de photos par formulaire"
    Par mcharmat dans le forum IHM
    Réponses: 10
    Dernier message: 13/05/2008, 15h47
  3. Gestion de photos par formulaire (erreur 2176)
    Par cams dans le forum VBA Access
    Réponses: 0
    Dernier message: 11/01/2008, 16h49
  4. Réponses: 6
    Dernier message: 08/02/2007, 12h03
  5. gestion des photos par formulaire
    Par jeck dans le forum IHM
    Réponses: 23
    Dernier message: 12/04/2006, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo