Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je voudrais récupéré les infomatino des stats du membres voici mon code :

<?php

/**
 * Created by PhpStorm.
 * User: ph1823 - Minecraft
 * Date: 09/03/2016
 * Time: 21:10
 */

namespace App\Controller;

class playersController
{

    public function show($players)
    {

        echo 'Info sur ' . $players;

            $bdd = new \PDO('mysql:host=mutu-315225.onet.domains;dbname=glorycra_serv', 'glorycra_stats', '****');

            $sql = "\SELECT * FROM  gl_tower WHERE pseudo = :pseudo";

            $query = $bdd->prepare($sql);

            $query->bindValue(':pseudo', $players, \PDO::PARAM_STR);
            /*$query->bindValue(':pass', $hash_password, \PDO::PARAM_STR);*/
            $query->execute();
       //recupérer les infos du membre
       $info_membre = $query->fetch(PDO::FETCH_ASSOC);
       //print_r($info_membre);

     /*       if (isset($info['pseudo'])) {
                echo 'Ce jouerus existe.';
            }
            else {
                echo "ce jouer n'existe pas";
            }

*/

        ?>
        <!DOCTYPE html>
        <html>
        <style>table {
                border-collapse: collapse;
            }

            td, th {
                border: 1px solid black;
            }</style>
        <body>
        <table>
            <!-- Pour mettre un nom au tableaux -->
            <caption>TheTower</caption>
            <thead>
            <tr>
                <!-- th sert a faire le nom des colone -->
                <th>Kill</th>
                <th>Morts</th>
                <th>Points mis</th>
                <th>Victoire</th>
                <th>GloryCoins</th>

            </tr>
            </thead>
            <tbody>
            <tr>
                <!-- tr sert a faire une ligne -->
                <!--<td>td sert a faire les cellules du tableaux </td> -->
                <td><?php $this->stats($players, "kill", "tower") ?></td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>
            <!--   </tbody>
               <tfoot>
               <td>0?</td>
               <td>0?</td>
               </tfoot> -->
            <!-- Pour mettre une bordure faire un boder puis collapse voir style.css-->
        </table>
        <table>
            <!-- Pour mettre un nom au tableaux -->
            <caption>Rush</caption>
            <thead>
            <tr>
                <!-- th sert a faire le nom des colone -->
                <th>test</th>
                <th>testr</th>
                <th>test</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <!-- tr sert a faire une ligne -->
                <!--<td>td sert a faire les cellules du tableaux </td> -->
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>
            <tr>
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>

            </tbody>
            <!-- Pour mettre une bordure faire un boder puis collapse voir style.css-->
        </table>
        <!-- Balice non obligatoir : thead ( entête du tableaux) tbody (corp) tfoot(bas de page) -->
        </body>
        </html>
        <?php
    }

    public function stats($player, $colum, $game)
    {
        /* function bdd($game) {
             try*/

            $bdd = new \PDO('mysql:host=mutu-315225.onet.domains:3306;dbname=gl_' . $game, 'gl_stats', '***');
            /*      $bdd->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
              }
              catch (\Exception $e)
              {
                  die('Erreur :' . $e->getMessage());
              }
              return $bdd;
          }
          $bdd = bdd($game);*/

            //
            $sql = "\SELECT * FROM gl_" . $game . " WHERE pseudo = " . $player;
            $query = $bdd->prepare($sql);
           /* $query->bindValue(':pseudo', $pseudo, \PDO::PARAM_STR);
            $query->bindValue(':pass', $hash_password, \PDO::PARAM_STR);*/
            $query->execute($sql);
            //recupérer les infos du membre
            $info = $query->fetch(\PDO::FETCH_ASSOC);

     /*       if (isset($info['pseudo'])) {
                echo 'Ce jouerus existe.';
            }
            else {
                echo "ce jouer n'existe pas";
            }

*/

        }

}

Ce que j'obtiens

Ca m'affiche soit une page vide avec juste Info de ph1823 , soit une page avec le tableau ect.. mais rien ne s'affiche a l'intérieur
Merci de votre aide =)

8 réponses


Lartak
Réponse acceptée

J'utilise le POO dedans, car c'est la seul maniére que je connais pour le faire

Tu n'as donc pas du voir la formation faite par Grafikart vu que tu écris tes classes dans le même fichier que tu utilises.
Je te conseille donc fortement de visionner » Formation : La POO en PHP.

et pour la classe de base de donnée, je fait un include pour l'intégré a ma class

Tu crées ta classe normalement, puis au lieu d'utiliser directement l'objet PDO pour initialiser ta connexion à la base de données, tu utiliseras ta classe qui elle se servira de l'objet PDO.
Si tu te demandes à quoi ça te servirait, tu pourrais au lieu d'avoir à faire ceci :

$bdd = new \PDO('mysql:host=mutu-315225.onet.domains;dbname=glorycra_serv', 'glorycra_stats', '**');

Si tu veux pouvoir modifier la base de données que tu veux utiliser lorsques tu effectues la connexion, il te suffirait par exemple de faire :

$bdd = new App\Database('glorycra_serv');

L'avantage par exemple de ce système c'est que dans la classe Database (le nom de la classe c'est un exemple, tu utilises ce que tu veux comme nom), c'est que tu pourrait gérer le système d'erreur et le reste une fois pour toute dans ta classe Database et tu n'aurais plus à le faire par la suite.

Bonjour,
Dans la fonction stats, il me semble que tu confonds le nom de la bd avec le nom de la table
Dans la requête elle-même, $player est un String il faut soit l'entourer de simples cotes soit utiliser un paramètre car tu utilises une requête préparée.
Enfin, lorsque tu executes la requête préparée, tu dois lui passer un tableau avec la valeur du paramètre à passer (ici $player)

Bonjour,

Un mot de passe est toujours visible, attention :D

Par contre, je ne comprend pas trop, ta fonction stats() ne retourne rien :s Si tu veux que l'appel de cette fonction te retourne le résultat récupéré en BDD, je te conseil de retourner $info puis de le mettre en forme par la suite.
Concernant ta connexion dans la fonction stats(), la base de données et la table portent le même nom ?

Je ne sais pas si tu as simplement récupéré le code et que tu l'as un peu "adapté" par la suite mais mettre de l'HTML et des appels SQL dans ce qu'il semble être un controller est assez étrange.

ph1823
Auteur

Bonjours, merci de vos réponse, mais je ne parlé pas de la fonction stats, celle la je sais que je me suis raté, je parlé de la premier connection de ca :

 echo 'Info sur ' . $players;

            $bdd = new \PDO('mysql:host=mutu-315225.onet.domains;dbname=glorycra_serv', 'glorycra_stats', '**');

            $sql = "\SELECT * FROM  gl_tower WHERE pseudo = :pseudo";

            $query = $bdd->prepare($sql);

            $query->bindValue(':pseudo', $players, \PDO::PARAM_STR);
            /*$query->bindValue(':pass', $hash_password, \PDO::PARAM_STR);*/
            $query->execute();
       //recupérer les infos du membre
       $info_membre = $query->fetch(PDO::FETCH_ASSOC);

c'est ce code qui ne marche pas, désoler de ne pas l'avoir précier ;(

Bonjour.
Ce que je ne comprends pas, c'est que tu utilises la POO, donc les classes, même les namespaces, et pourtant tu as tout sur une seule page.
Ensuite, pourquoi est-ce que tu mets un anti-slash avant SELECT ?
Autre chose, tu devrais créer une classe pour la connexion à la base de données, quitte à passer le nom de la base de données, vu qu'à priori tu utilises plusieurs bases de données.

ph1823
Auteur

J'utilise le POO dedans, car c'est la seul maniére que je connais pour le faire, avec des routers, je viens de me metrre au router, donc j'ai trouvée cette méthode qui avais l'air de marché. Ensuite l'anti splash avant SELECT je les mis car PhPStorm me disait que ceci était inconrrecte avant, et pour la classe de base de donnée, je fait un include pour l'intégré a ma class? Merci de vos réponse.

ph1823
Auteur

Bonjours, d'accord, je suit entrain de le faire, mais ceci ne résoudras pas mon problème?

ph1823
Auteur

P.S Je n'ai pas eu besoin de faire ca, j'ai juste mis :

            try
    {
        $bdd = new \PDO('mysql:host=mutu-315225.onet.domains;dbname=glorycra_serv', 'glorycra_stats', '****');
        $bdd->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
    }
    catch (\Exception $e)
    {
        die('Erreur :' . $e->getMessage());
    }

Mais je vais mettre en bonne forme de POO enfin si j'ai la fois x)