Groupe PhP

Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Groupe PhP

Forum du groupe d'apprentissage mutuel en PHP


5 participants

    [TD] Fonction S.Q.L

    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty [TD] Fonction S.Q.L

    Message par Single Dark Lun 7 Sep - 14:39

    Bonjour Invité,

    Voici le premier TD d'une longue série.

    Pour ce premier TD nous allons aborder le SQL, nous allons créer quelque fonctions qui devront vous facilité la vie du points de vue de la programmation de vos sites et autres. Tous ce qui si sera pour les débutants, car il s'agit de simple fonction. Après j'aborderai la notion OO (Orientée Objet).


    Pré-requis :


    1. Connaitre par coeur le tuto de M@teo21 sur le SdZ
    2. Avoir quelque notion en SQL, celle du SdZ suffissent amplement
    3. Avoir envie
    4. Vouloir progresser


    Dans la suite de se TD nous allons donc créer des fonctions qui vont prendre en charge SQL.

    Attends un peu, pourquoi ne pas utiliser les fonctions natif de PHP ? Tel que mysql_connect(), mysql_close(); ?

    Voilà quel est bonne comme question.

    Comme vous le savez pour faire une requete sous PHP il faut faire :

    Code:

    <?php
    mysql_query(votre_requete_SQL);
    ?>

    Mais si vous faite comme cela vous ne prenez pas en compte les "possible" erreurs de SQL

    Bah dans ce cas il suffit juste de rajouter or die() ?

    Oui, bien sur vous avez raison, mais avec un peu de jugeotte vos fonctions vos pouvoir prendre natifement la gestion des erreurs. Et puis comme tous le monde le sait un programmeur est d'abord et avant tout un gros feignant.

    Voici une liste de fonction que nous allons élaborer ensemble.


    • SQL_connect
    • SQL_select_db
    • SQL_query
    • SQL_select
    • SQL_close


    Voila alors suivez le guide et partons pour une p'tit balade.

    1°) SQL_connect

    Voyons comment on se connecte a une base de données MySql sous PHP :


    Code:

    <?php
    mysql_connect("HOST", "LOGIN", "PASSWORD");
    ?>

    La comme vous pouvez le voir c'est quelque chose de relativement simple à utiliser. Mais il n'y a pas de gestion d'erreur tel que 'or die'. Nous allons donc faire la fonction pour pouvoir se connecter a une base MySql.

    Code:

    <?php
    function SQL_connect()
    {// Fonction de connection à MySql

    }
    ?>

    Voilà, pour le moment rien de bien compliqué, si vous avez bien suivit les cours sur le Site du Zér0, alors vous savez comment créer une fonction.

    Dans la fonction original, il y a plusieur paramètre qui sont passés comme l'HOST, le LOGIN et le MOT DE PASSE.

    Donc c'est reparti pour un tour.

    Code:

    <?php
    function SQL_connect ($host, $login, $password)
    {// Fonction de connection à MySql

    $connect = mysql_connect ($host, $login, $password);

    return $connect;
    }
    ?>

    Voilà, qui est fait, la avec ça vous avez une jolie fonction qui sert a rien, puisque elle ne fait que se connecter à MySql.


    Ouias mais attends pourquoi ta mis '$connect = mysql_connect()' ?


    Pour la simple et bonne raison, qu'avec ceci nous allons pouvoir faire le système d'erreurs.

    Code:

    <?php
    function SQL_connect ($host, $login, $password)
    {// Fonction de connection à MySql

    $connect = @mysql_connect ($host, $login, $password);

    if (!$connect)
    {
    exit('Problème lors de la connexion à MySql');
    }

    return $connect;
    }
    ?>


    Ouh là, c'est quoi ça ? Pourquoi ta pas utilisé 'or die' ?


    D'abord, 'die()' est un alias de 'exit()'.
    De plus il semblerai que ça soit la methode conseiller à utiliser.

    Bien sur vous pouvez changer ce qu'il y a dans le 'if', vous pouvez faire une redirection, vers une page d'erreurs ou autre.


    Peut tu expliquer plus en détails comment cette fonction marche ?!?


    D'abord on effectue la connexion à MySql, le p'tit '@' devant ne sert juste à ne pas afficher les messages d'erreurs. Si la connexion est réussi alors cela renvoie TRUE ou FALSE si ce n'est pas bon.

    Ensuite la condition 'if', dit que si $connect n'est pas bon, sous-entendu qu'il est égal à FALSE alors, on exécute la condition.

    Puis on retourne $connect, ce n'est pas obligatoire mais c'est mieux de le faire...

    Et pour l'utiliser il suffit de faire comme suit :

    Code:

    <?php
    $connect = SQL_connect('localhost', 'root', '');

    // OU

    SQL_connect('localhost', 'root', '');
    ?>

    Voilà rien de plus simple, bon pour la suite, je ne vais pas tous expliquer, j'espere que vous avez compris le principe.

    2°) SQL_select_db

    Code:

    <?php
    function SQL_select_db ($db_name)
    {// Fonction de selection de base de donnée MySql

    $select = @mysql_select_db ($db_name);

    if (!$select)
    {
     exit('Erreur lors de la sélection de la base de donnée Mysql.');
    }

    return $select;
    }

    // Utilisation
    $select = SQL_select_db('php');
    ?>

    3°) SQL_query

    Code:

    <?php
    function SQL_query ($query)
    {// Fonction de requete MySql

    $requete = @mysql_query ($query);

    if (!$requete)
    {
     exit('Erreur MySql');
    }

    return $requete;
    }

    // Utilisation
    $select = SQL_query('INSERT INTO db VALUE ("")');
    ?>


    4°) SQL_select

    Code:

    <?php
    function SQL_select($select)
    {// Fonction de requete avec retour en array

    $requete = @mysql_query ($select);

    if (!$requete)
    {
     exit('Erreur lors de la sélection de la base de donnée Mysql.');
    }
    $requete = mysql_fetch_assoc($requete);

    return $requete;
    }

    // Utilisation
    $select = SQL_select('SELECT * FROM db');
    ?>



    5°) SQL_close

    Code:

    <?php
    function SQL_close()
    {// Fonction de requete avec retour en array

    $connect = @mysql_close ();

    if (!$connect)
    {
     exit('Erreur de fermeture de la connexion MySql');
    }

    return $connect;
    }

    // Utilisation
    $close = SQL_close();

    // OU

    SQL_close();
    ?>


    Voili, voilou, c'est içi que se termine mon premier TD. En esperant que cela pourra vous aidez...


    Merci, Single Dark


    Dernière édition par Single Dark le Mer 9 Sep - 22:12, édité 4 fois
    avatar
    Reda.Makhoukh
    Novice PHP
    Novice PHP


    Messages : 7
    Date d'inscription : 05/09/2009

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Reda.Makhoukh Lun 7 Sep - 15:10

    Intéressant comme TD, Merci Single Dark. Mais dit moi, si on utilise un echo à la place de exit, ça revient en même ?
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Single Dark Lun 7 Sep - 15:14

    Merki,

    Pour l'echo, oui cela revient au même. Car avec l'ajout du '@' cela bloque l'affichage de l'erreur initiale comme 'WARNING ..... on line 52'. Et la condition prends le dessus, donc oui, l'echo est une solution.
    avatar
    Reda.Makhoukh
    Novice PHP
    Novice PHP


    Messages : 7
    Date d'inscription : 05/09/2009

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Reda.Makhoukh Lun 7 Sep - 15:23

    Une petite faute dans le titre numéro quatre :
    4°) SQL_select_db

    tu doit mettre SQL_select Smile

    Mais mais, à quoi sert cette fonction là ?
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Single Dark Lun 7 Sep - 15:38

    Merki encore,

    Et bien cette fonction fais la même chose que 'SQL_query' sauf quelle passe le résultats dans un 'mysql_fetch_assoc'. Je donne un exemple :

    Imaginons que tu fait un script de connexion. Tu recherche un tuple precis, un tuple c'est toute une ligne dans MySql.

    Normalement tu fait un truc comme :

    Code:

    <?php
    $requete_user = mysql_query('SELECT * FROM user WHERE login="'.$login.'"');
    $sql_user = mysql_fetch_assoc($requete_user);

    // Et la tu fait que

    $sql_user = SQL_select (SELECT * FROM user WHERE login="'.$login.'");
    ?>

    Bon d'accord elle sert pas a grand chose, mais elle permet une gestion d'erreur. Tiens je vais p'être faire un TD sur la gestion d'erreur...
    Darkwarrios
    Darkwarrios
    Admin & Soutien PHP
    Admin & Soutien PHP


    Messages : 67
    Date d'inscription : 05/09/2009

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Darkwarrios Lun 7 Sep - 18:44

    Déjà, merci pour ton TD SD

    mais j'ai des truc à dires Very Happy, on évite les erreurs SQL, d'accord, mais à quoi sa sert de les éviter ? et à quoi sert-il de créer des fonction pour chaque SQL_query, etc... ? tu n'as pas dis que la programmation était un truc de feignant ? ... moi perso, je ne ferais jamais comme dans ton TD, c'est pas contre toi, mais c'est que je trouve que l'on complexe, pour rien, ou bien j'ai du mal saisir le mot "erreur sql", dans ce cas si tu m'explique qu'es-ce, je peux changer d'avis ^^
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Single Dark Lun 7 Sep - 19:04

    Darkwarrios a écrit:
    mais j'ai des truc à dires Very Happy, on évite les erreurs SQL, d'accord, mais à quoi sa sert de les éviter ? et à quoi sert-il de créer des fonction pour chaque SQL_query, etc... ? tu n'as pas dis que la programmation était un truc de feignant ? ... moi perso, je ne ferais jamais comme dans ton TD, c'est pas contre toi, mais c'est que je trouve que l'on complexe, pour rien, ou bien j'ai du mal saisir le mot "erreur sql", dans ce cas si tu m'explique qu'es-ce, je peux changer d'avis ^^

    En gros c'est pour évité de se pointé sur un forum en dissant que son marche pas et qu'il n'y pas d'erreur d'afficher.

    Si tu fait sans 'or die' ou autre en cas d'erreur bah tu la dans l'os, parce que tu sait pas se qui ne fonctionne pas. Avec ça tu tout de suite ou y un problème, bon d'accord c'est pas parfais, mais pour un débutant c'est largement suffisant, après chaqun est libre de faire à sa sauce. Moi par exemple je suis passé à la POO, et ma Classe SQL est bien plus évoluée que ces fonctions...

    Bien sur c'est fonction ne sert pas a grand chose de la cas ou je les est montrées. Mais une fois bien que ta bien compris comment ça fonctionne tu est largement capable de faire mieux...
    Berdes1
    Berdes1
    Soutien PhP
    Soutien PhP


    Messages : 167
    Date d'inscription : 06/09/2009

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Berdes1 Lun 7 Sep - 19:04

    http://fr.php.net/manual/fr/language.operators.errorcontrol.php

    Par contre, je suis pas d'accord avec le mysql_fetch_assoc présent DANS la fonction. La fonction est juste sensé faire la requête et renvoyer la ressource, pas le résultat de la première ligne (si elle existe).
    Par exemple : Si on veut utiliser la structure suivante (qui est la structure la plus recommandé) pour analyser le résultat d'une requête, on ne pourra pas le faire comme on veut :
    Code:
    <?php
    $retour = mysql_query("SELECT pseudo, id FROM joureurs WHERE pseudo LIKE '%".$recherche."%'");
    if($joueurs = mysql_fetch_assoc($retour))
    {
      echo '<table><th><td>Nom du joueur</td></th>';
      do
      {
          echo '<tr><td><a href="joueurs.php?id='.$joueurs['id'].'">'.$joueurs['pseudo'].'</a></td></tr>';
      } while($joueurs = mysql_fetch_assoc($retour));
      echo '</table>';
    }
    else
    {
      echo 'Aucun joueur ne correspond à la recherche';
    }
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Single Dark Lun 7 Sep - 19:18

    Merci pour le lien,

    Pour la 'SQL_select', elle ne sert pour faire des SELECT simple, comme dans l'exemple pour un truc de connexion, pour afficher une page (C.M.S).


    Avec ton exemple la fonction 'SQL_query' aurai pu être utilisé...
    avatar
    ThunderLord
    Novice PHP
    Novice PHP


    Messages : 9
    Date d'inscription : 08/09/2009

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par ThunderLord Mar 8 Sep - 22:33

    Bonsoir, je me permet de rectifier quelques erreurs et imprécisions de ce TD.

    Single Dark a écrit:
    Si la connexion est réussi alors cela renvoie TRUE ou FALSE si ce n'est pas bon.


    Valeurs de retour

    Retourne l'identifiant de connexion MySQL en cas de succès ou FALSE en cas d'échec.

    D'après php.net, la fonction mysql_connect ne retourne donc pas TRUE ou FALSE selon que la connexion est réussie ou non mais bien un identifiant en cas réussite.

    Single Dark a écrit:
    Puis on retourne $connect, ce n'est pas obligatoire mais c'est mieux de le faire...

    Ce n'est pas mieux de le faire, tout dépend si on utilise cet identifiant de connexion comme handle pour les requêtes SQL suivantes. Or souvent une seule connexion à une base de données est nécessaire, donc toutes les requêtes suivantes vont être effectuées implicitement avec cette connexion.

    Néanmoins si l'on veut être très rigoureux ou si on a établie plusieurs connexions à différentes bases de données, l'identifiant de connexion ($connect ici, $link_identifier plus loin) doit être spécifié à chaque requête comme nous l'indique le prototype de la fonction :


    resource mysql_query ( string $query [, resource $link_identifier ] )

    Enfin si en cas de connexions multiples le paramètre optionnel n'est pas défini, c'est la dernière connexion ouverte avec mysql_connect() qui sera choisie comme connexion par défaut pour éxecuter la requête.


    Voilà j'espère avoir clarifié ce point.
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Single Dark Mer 9 Sep - 19:19

    Alors je vais levée le voile sur les 'erreurs & Co' dans ce TD.

    Je teins d'abord à rappeler que nous sommes sur un forum de débutants en PHP. J'ai esseyé de garder sa à l'esprit lors de la rédaction du TD.

    Ensuite, bon je l'avoue j'ai mal expliqué pour l'histoire du TRUE. Mais je me suis dit : "Alors que es que je fait ? Je leur explique exactement le fonctionne de toutes les fonctions MySql ? Ou je fait simple ?" Bah j'ai fait simple.

    Bon perso, dans MA classe SQL j'utilise l'id pour chaque requete SQL, mais pour des débutants y pas trop besoin, donc c'est vrai que je peut même supprimer cela du TD.

    Mais au final le plus important c'est surtout le FALSE... XD
    avatar
    ThunderLord
    Novice PHP
    Novice PHP


    Messages : 9
    Date d'inscription : 08/09/2009

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par ThunderLord Mer 9 Sep - 20:02

    Single Dark a écrit:
    Bon perso, dans MA classe SQL j'utilise l'id pour chaque requete SQL, mais pour des débutants y pas trop besoin, donc c'est vrai que je peut même supprimer cela du TD.

    Justement je pense que vu que le site est pour les débutants, il est important de leur apprendre les bonnes habitudes et manières de faire dès le départ.

    Il est vrai que là ce n'est pas forcément quelque chose de primordial pour la compréhension de ce TD, mais j'ai trouvé judicieux de le préciser(vu que ce n'est pas vraiment très compliqué à comprendre même pour les débutants).

    Mon post précédant n'était pas un reproche, ça complétait juste le point survolé comme tu dis pour faire simple. Après chacun peut prendre ou non ça en considération s'il le souhaite.

    Sinon en général je trouve que ce TD est une bonne approche pour introduire des fonctions SQL personnalisées, même si apparemment certains n'en comprenne pas l'utilité.

    Pour ma part, je peux dire que j'utilise toujours ce genre de fonctions qui au final font gagner énormément de temps précieux, surtout si les scripts qu'on doit débugger dépasse une certaine taille...
    Single Dark
    Single Dark
    Débutant PHP
    Débutant PHP


    Messages : 63
    Date d'inscription : 06/09/2009
    Age : 35
    Localisation : Brest

    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Single Dark Mer 9 Sep - 21:09

    Darkwarrios a écrit:Déjà, merci pour ton TD SD

    mais j'ai des truc à dires Very Happy, on évite les erreurs SQL, d'accord, mais à quoi sa sert de les éviter ? et à quoi sert-il de créer des fonction pour chaque SQL_query, etc... ? tu n'as pas dis que la programmation était un truc de feignant ? ... moi perso, je ne ferais jamais comme dans ton TD, c'est pas contre toi, mais c'est que je trouve que l'on complexe, pour rien, ou bien j'ai du mal saisir le mot "erreur sql", dans ce cas si tu m'explique qu'es-ce, je peux changer d'avis ^^

    Si tu n'es toujours pas convaincu de ceci je te montre quelque exemple simple.

    Je fait une requete simple contenant une erreur, bah oui ça arrive.

    1°) Avec les fonctions natifs de PHP :

    Code:

    <?php
    mysql_query('SELECT * FROM table_qui_existe_pas');

    // N'affiche rien a l'écran
    ?>

    2°) Avec les fonctions natifs de PHP et un 'or exit';

    Code:

    <?php
    mysql_query('SELECT * FROM table_qui_existe_pas') or exit ('Erreur SQL '.mysql_error());

    // Affiche à l'écran Erreur SQL Table 'base.table_qui_existe_pas' doesn't exist
    ?>

    La c'est mieux que rien mais c'est pas le top, avec la fonction que je propose ça écrit juste 'Erreur SQL', mais vous pouvez modifier.

    3°) Ma classe SQL

    Voilà ce qui se passe avec mon système à moi.

    Code:

    <?php

    $sql->query('SELECT * FROM table_qui_existe_pas', __FILE__, __LINE__);

    // __FILE__ definie le nom du fichier
    // __LINE__ definie le numero de ligne

    // Affiche 'ERREUR SQL si le probléme continu contactez l'administrateur.'
    // Modifier un ficher nommé erreur.html où son listé toute les erreurs.

    // Contenu du fichier pour cette requete
    /*
    Erreur S.Q.L :
    09 September 2009 21:07:16.
    L'erreur n° 1146 (Table 'table.table_qui_existe_pas' doesn't exist)
    C'est produite dans le fichier : /home/singledark/Web/source/v0.2/index.php
    A la ligne n° 180
    La requete est la suivante
    SELECT * FROM table_qui_existe_pas
    */
    ?>

    Voilà, j'espere que se p'tit exemple t'aura convaincu...

    Contenu sponsorisé


    [TD] Fonction S.Q.L Empty Re: [TD] Fonction S.Q.L

    Message par Contenu sponsorisé


      La date/heure actuelle est Dim 19 Mai - 12:51