Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ma première base de données !

Que pensez-vous de mon premier code ?

    20 février 2024 à 15:58:10

    Bonjour,

    En tant que débutant en langage PHP & Mysql, je me suis confié pour objectif de faire un site de paris E-sportif comme premier site pour pouvoir présenter mes compétences à de futurs potentiels employeurs. 

    Après plusieurs jours de travail j'ai enfin réussi à faire fonctionné ma première base de données avec pour page test une journée de match simulé ou ont peu voté pour les équipes à l'aide de bouton toggle et envoyé les résultats dans ma table Mysql, voilà à quoi ressemble ce que j'ai fait : 

    <?php
    session_start();
    
    require_once(__DIR__ . '/isConnect.php');
    require_once(__DIR__ . '/config/mysql.php');
    require_once(__DIR__ . '/databaseconnect.php');
    require_once(__DIR__ . '/variables.php');
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>passionné LFL</title>
        <link
                href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
                rel="stylesheet"
        >
        <link href="css/style.css" rel="stylesheet">
    
        </head>
    <body class="d-flex flex-column min-vh-100">
        <div class="container">
            <!-- inclusion de l'entête du site -->
            <?php require_once(__DIR__ . '/header.php'); ?>
            <h1 class="p-3 mb-2 .bg-primary.bg-gradient text-white">Site de passionné LFL</h1>
    </div>
        <style>
        .team {
            height : center, 100px;
            background: none;
            border: none; /* Supprimer la bordure du bouton */
            padding: 5px; /* Ajouter un peu d'espace autour de l'image */
            margin: 5px; /* Ajouter un peu d'espace entre les boutons */
    
        }
    
        .team img {
            width: auto; /* Largeur de l'image */
            height: 100px; /* Hauteur automatique pour conserver les proportions de l'image */
            display: block; /* Pour résoudre l'espace supplémentaire en bas de l'image */
            margin: 0 auto; /* Centrer l'image dans le bouton */
        }
    
        .match {
            display: flex;
            justify-content: center;
        }
    
        h3 {
            font-family : Impact;
            font-weight: bold;
            color: black;
            text-align: center;
        }
    
        #toggle-698.form-check-input {
        width: 100px;
        height: 50px;
        display: block;
        margin: 0 auto;
    }
    
    input[type="checkbox"].form-check-input.fr-toggle__input {
        background-color: #2ebf91; /* Couleur de fond par défaut */
    }
    
    input[type="checkbox"].form-check-input.fr-toggle__input:checked {
        background-color: #0f0e0f; /* Couleur de fond lorsque le bouton est coché */
    }
    
    .match-label {
        margin: 0; /* Réinitialiser les marges */
    }
    
    .form-switch {
        padding-left: 0;
    }
    
    .form-check .form-check-input {
        width: 100px; /* Largeur du bouton */
        height: 50px; /* Hauteur du bouton */
        display: block; /* Affichage en bloc */
        margin: 0 auto; /* Centrer horizontalement */
    }
    
    /* Style de base du bouton */
    .form-check .form-check-input.fr-toggle__input {
        background-color: #2ebf91; /* Couleur de fond par défaut */
    }
    
    /* Style lorsque le bouton est coché */
    .form-check .form-check-input.fr-toggle__input:checked {
        background-color: #0f0e0f; /* Couleur de fond lorsque le bouton est coché */
    }
    
    .match-label {
        text-align: center;
    }
    </style>
        <?php if (isset($_SESSION['LOGGED_USER'])) : ?>
    <div>     
    <form action="vote.php" method="post">
        <div class="match match_1">
            <div class="team">
                <img src="../img/Karmine_Corp_logo.png" alt="KCORP" class="KCB">
                <h3>KCB</h3>
            </div>   
                <input type="hidden" name="match_1" value="1">
                <input type="hidden" name="team_1" value="KCB"> <!-- Valeur par défaut -->
                <label class="form-check form-switch">
                    <p class="fr-hint-text text-white match-label" id="toggle-698-hint-text">Match 1</p>
                        <input type="checkbox" name="team_1" value="VITB" class="form-check-input fr-toggle__input">
                        <span class="form-check-label fr-toggle__label" data-fr-checked-label="Activé" data-fr-unchecked-label="Désactivé"></span>
                </label>
            <div class="team">
                <img src="../img/Team_Vitality_logo_2023.png" alt="VITALITY" class="VITB">
                <h3>VITB</h3>
            </div>
        </div>
        <div class="match match_2">
            <div class="team">
                <img src="../img/GamersOrigin_2020_lightmode.png" alt="GO" class="GO">
                <h3>GO</h3>
            </div>   
                <input type="hidden" name="match_2" value="2">
                <input type="hidden" name="team_2" value="GO"> <!-- Valeur par défaut -->
                <label class="form-check form-switch">
                    <p class="fr-hint-text text-white match-label" id="toggle-698-hint-text">Match 2</p>
                        <input type="checkbox" name="team_2" value="M8" class="form-check-input fr-toggle__input">
                        <span class="form-check-label fr-toggle__label" data-fr-checked-label="Activé" data-fr-unchecked-label="Désactivé"></span>
                </label>
            <div class="team">
                    <img src="../img/gentle-mates.png" alt="M8" class="M8">
                    <h3>M8</h3>
            </div>
        </div>
        <div class="match match_3">
            <div class="team">
                    <img src="../img/AEGIS_logo.png" alt="AEGIS" class="AEGIS">
                    <h3>AEGIS</h3>
            </div>   
                <input type="hidden" name="match_3" value="3">
                <input type="hidden" name="team_3" value="AEGIS"> <!-- Valeur par défaut -->
                <label class="form-check form-switch">
                    <p class="fr-hint-text text-white match-label" id="toggle-698-hint-text">Match 3</p>
                        <input type="checkbox" name="team_3" value="GW" class="form-check-input fr-toggle__input">
                        <span class="form-check-label fr-toggle__label" data-fr-checked-label="Activé" data-fr-unchecked-label="Désactivé"></span>
                </label>
            <div class="team">
                     <img src="../img/GameWardlogo_square.png" alt="GW" class="GW">
                    <h3>GW</h3>
            </div>
        </div>
    
        <div class="match match_4">
            <div class="team">
                    <img src="../img/Team_Du_Sudlogo_square.png" alt="TDS" class="TDS">
                    <h3>TDS</h3>
            </div>   
                <input type="hidden" name="match_4" value="4">
                <input type="hidden" name="team_4" value="TDS"> <!-- Valeur par défaut -->
                <label class="form-check form-switch">
                    <p class="fr-hint-text text-white match-label" id="toggle-698-hint-text">Match 4</p>
                        <input type="checkbox" name="team_4" value="SLY" class="form-check-input fr-toggle__input">
                        <span class="form-check-label fr-toggle__label" data-fr-checked-label="Activé" data-fr-unchecked-label="Désactivé"></span>
                </label>
            <div class="team">
                    <img src="../img/Logo_Solary.png" alt="SOLARY" class="SLY">
                    <h3>SLY</h3>
            </div>
        </div>
        
        <div class="match match_5">
            <div class="team">
                        <img src="../img/logo_bds.png" alt="BDS" class="BDS">
                        <h3>BDS</h3>
            </div>   
                <input type="hidden" name="match_5" value="5">
                <input type="hidden" name="team_5" value="BDS"> <!-- Valeur par défaut -->
                <label class="form-check form-switch">
                    <p class="fr-hint-text text-white match-label" id="toggle-698-hint-text">Match 5</p>
                        <input type="checkbox" name="team_5" value="BK ROG" class="form-check-input fr-toggle__input">
                        <span class="form-check-label fr-toggle__label" data-fr-checked-label="Activé" data-fr-unchecked-label="Désactivé"></span>
                </label>
            <div class="team">
                        <img src="../img/600px-BK_ROG_Esports_allmode.png" alt="BK ROG" class="BK ROG">
                        <h3>BK ROG</h3>
            </div>
        </div>
            <button type="submit" class="btn btn-primary">Vote</button>
        </form>
    </div>
    
        <?php endif; ?>
        <!-- inclusion du bas de page du site -->
        <?php require_once(__DIR__ . '/footer.php'); ?>
    </body>
    </html>

    Et voici ma page vote.php chargé d'envoyer les votes des utilisateurs à ma base de données :

    <?php
    session_start();
    require_once(__DIR__ . '/config/mysql.php');
    require_once(__DIR__ . '/databaseconnect.php');
    require_once(__DIR__ . '/variables.php');
    
    // Vérifiez si l'utilisateur est connecté
    if (!isset($_SESSION['LOGGED_USER'])) {
        // Redirigez l'utilisateur vers une page de connexion ou affichez un message d'erreur
        exit("Vous devez être connecté pour voter.");
    }
    
    // Vérifiez si le formulaire de vote a été soumis
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Assurez-vous que les données du formulaire sont sécurisées avant de les utiliser
        $match_1 = $_POST['match_1'];
        $match_2 = $_POST['match_2'];
        $match_3 = $_POST['match_3'];
        $match_4 = $_POST['match_4'];
        $match_5 = $_POST['match_5'];    
        $team_1 = $_POST['team_1'];
        $team_2 = $_POST['team_2'];
        $team_3 = $_POST['team_3'];
        $team_4 = $_POST['team_4'];
        $team_5 = $_POST['team_5'];
        
        // Connexion à la base de données
        require_once(__DIR__ . '/config/mysql.php');
        $pdo = new PDO("mysql:host=localhost;dbname=lfl_fan", 'root', '');
    
        // Préparez et exécutez la requête pour insérer le vote dans la base de données
        $stmt = $pdo->prepare("INSERT INTO votes (user_id, match_1, match_2, match_3, match_4, match_5, team_1, team_2, team_3, team_4, team_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->execute([$_SESSION['LOGGED_USER']['id'], $match_1, $match_2, $match_3, $match_4, $match_5, $team_1, $team_2, $team_3, $team_4, $team_5]);
    
    
        // Redirigez l'utilisateur vers la page précédente ou une autre page après le traitement du vote
        header("Location: team_lfl_create.php");
        exit();
    }
    ?>
    

    J'aimerais avoir le retour de personne d'expérience sur mon code et les probables "erreurs de débutant" que j'ai dû faire sur mon code.

    Je pense que la prochaine étape pour améliorer mon site sera de mettre en place des boucles pour rendre mon site plus dynamique et plus tard essayer d'y intégrer une API, qu'en pensez-vous ?

    en vous remerciant d’avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2024 à 18:44:47

      Bonjour

      Déjà :

      if (!isset($_SESSION['LOGGED_USER'])) {
          // Redirigez l'utilisateur vers une page de connexion ou affichez un message d'erreur
          exit("Vous devez être connecté pour voter.");
      }

      L'utilisateur n'est pas redirigé !

      Cordialement.

      -
      Edité par Domi65 20 février 2024 à 18:58:39

      • Partager sur Facebook
      • Partager sur Twitter
        22 février 2024 à 16:14:27

        Bonjour Domir65 

        Effectivement, merci de me le signaler, je viens de le modifier comme ceci : 

        if (!isset($_SESSION['LOGGED_USER'])) {
            // Redirigez l'utilisateur vers une page de connexion ou affichez un message d'erreur
            header("Location: login.php");
            exit("Vous devez être connecté pour voter.");
        }

        -
        Edité par Silverhand 22 février 2024 à 16:21:49

        • Partager sur Facebook
        • Partager sur Twitter
          23 février 2024 à 13:50:50

          Salut !
          Du coup tu peut retirer le exit() qui ne seras même pas exécuter :)
          • Partager sur Facebook
          • Partager sur Twitter
            23 février 2024 à 15:31:22

            Koyuki Tanaka a écrit:

            Salut !
            Du coup tu peut retirer le exit() qui ne seras même pas exécuter :)

            Bonjour, plutôt le retrais du message qui ne serra pas afficher. Quant à la fonction exit() elle est recommandée dans la documentation, cela sert à stopper le script qui lui continue son exécution. (je n'ai pas plus d'info sur ce processus). 

            • Partager sur Facebook
            • Partager sur Twitter
              25 février 2024 à 9:50:21

              Hello,

              AbcAbc6 a écrit:

              Quant à la fonction exit() elle est recommandée dans la documentation, cela sert à stopper le script qui lui continue son exécution. (je n'ai pas plus d'info sur ce processus).

              Pour donner plus d'information il ne faut pas parler de la fonction "exit()", mais de la fonction "header()" qui est utilisée pour envoyer des entêtes HTTP.

              Il faut le rappeler que la fonction header ne fait que envoyer au client une entête HTTP. Donc quand l'on fait :

              header('Location: http://www.example.com/');

              Cela envoie une entête HTTP au client pour lui dire de se rediriger vers http://www.example.com/. Mais le script continue son exécution, et si l'on a du code après cette ligne, il sera exécuté. En fait le navigateur du client attends qu'il est reçu toutes les instructions du serveur avant de se rediriger et pour cela il faut que le script soit terminé.

              Le meilleurs moyen de vérifier cela est de faire un test avec un script qui contient :

              header('Location: http://www.example.com/');
              sleep(10);

              Si l'on fait un test avec ce script, on verra que le navigateur attendra 10 secondes avant de se rediriger. La ou ça devient dangereux c'est si on oublie de mettre un exit() après un header('Location: ...'), alors tout code fait en pensant que l'on est redirigé sera quand même exécuté. Par exemple si on ne peux pas effectuer un delete en base car il faut être connecté, alors on redirige vers la page de connexion, mais si on oublie le exit() après le header, alors le delete sera quand même exécuté.

              J'ajouterai un petit oublie dans les tutoriels pour la partie redirection. Souvant on voit des exemples avec seulement un header('Location: ...'), mais il faudrait ajouter aussi en amont un header('HTTP/1.1 301 Moved Permanently') ou un header('HTTP/1.1 302 Found') pour indiquer au client que c'est une redirection. Voici un exemple en code quand une personne n'est pas connectée et qu'elle veut accéder à une page protégée :

              session_start();
              
              if (!isset($_SESSION['user'])) {
                  header('HTTP/1.1 301 Moved Permanently', true, 301);
                  header('Location: http://www.example.com/login.php');
                  exit();
              }

              On peut encapsuler le header('Location: ...') dans une fonction pour éviter les oublies.

              function redirectTo(string $url, int $code = 302, string $stringCode = 'Found'): never
              {
                  header("HTTP/1.1 {$code} {$stringCode}", true, $code);
                  header("Location: {$url}");
                  exit();
              }
              
              session_start();
              if (!isset($_SESSION['user'])) {
                  redirectTo('http://www.example.com/login.php');
              }

              Voilà, j'espère que cela pourra aider. :)

              • Partager sur Facebook
              • Partager sur Twitter
                26 février 2024 à 16:32:45

                Merci beaucoup pour vos réponses ! 

                si j'ai bien compris ajouter : header('HTTP/1.1 301 Moved Permanently', true, 301);

                comme ceci :

                // Vérifiez si l'utilisateur est connecté
                if (!isset($_SESSION['LOGGED_USER'])) {
                    // Redirigez l'utilisateur vers une page de connexion ou affichez un message d'erreur
                    header('HTTP/1.1 301 Moved Permanently', true, 301);
                    header('Location: http://localhost/tests/index.php');
                    exit();
                }
                

                permet de rediriger l'utilisateur sans exécuté la suite du code de la page ? mais ce n'est pas sensé aussi être la

                fonction de exit() ?

                j'avoue avoir du mal à comprendre la nuance "définitivement déplacé"

                • Partager sur Facebook
                • Partager sur Twitter

                Ma première base de données !

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown