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 :
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 ?
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.");
}
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.");
}
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).
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 :
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');
}
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é"
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é.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL