Bonjour,
Pour mon projet de fin d'année mon groupe et moi avons décidé de créer un faux site de casino en ligne. Je me retrouve chargé de m'occuper de la gestion des comptes et de la BDD. J'ai un problème. En effet, sur chacun de nos jeux nous aimerions afficher la valeur de crédits de l'utilisateur connecté. Après beaucoup d'essais et des échecs je demande de l'aide. En effet, je n'arrive pas à importer la valeur crédits de ma base de données dans la variable javascript counter qui permet d'afficher le nombre de crédits. De plus, j'aimerais faire en sorte que la valeur dans la BDD change en fonction de la variable crédits. Pouvez-vous m'aidez ? Merci d'avance ! Bonne journée.
Salut
Pour "importer" ou plutôt "lire" une donnée venant d'un BDD il te faut un langage serveur, javascript par défault est un langage front end (pour navigateur) et non back end (serveur)

Je ne sais pas quel langage serveur vous utilisé ? PHP ? à savoir que javascript peut le faire mais il faut Node JS.

Présice nous un peu plus le comment tu t'y prend (techniquement) et quel sont les langages serveur utilisés
Merci pour votre réponse. Désolé c'est vrai que j'ai oublié de préciser. Nous utilisons le PHP. Merci !
Pour PHP, vous avez déjà une classe ou autre pour communiquer avec la BDD ? pour établir une connexion ?
Modifié par JENCAL (15 May 2024 - 11:42)
Oui, nous avons un formulaire d'inscription qui fonctionne (la BDD est bel et bien acutalisée après la création d'un utilisateur), et également un formulaire de connexion mais c'est peut être ici qu'il y a un problème je ne sais pas.

code d'inscription :

<?php
session_start();

$servername = "localhost";
$username = "id22022299_mto";
$password = "MTOs123456!";
$dbname = "id22022299_bdd_tp3";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$pseudo = $_POST["signupUsername"];
$email = $_POST["signupEmail"];
$password = $_POST["signupPassword"];

$sql = "SELECT * FROM Comptes WHERE Pseudo='$pseudo' OR Adresse_mail='$email'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo json_encode(array("error" => true, "message" => "Le pseudo ou l'email est déjà pris."));
} elseif (strlen($pseudo) < 3) {
    echo json_encode(array("error" => true, "message" => "Le pseudo fait moins de 3 caractères."));
} elseif (strlen($password) < 8) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe fait moins de 8 caractères."));
} elseif (!preg_match('/[A-Z]/', $password)) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe ne contient pas de majuscule."));
} elseif (!preg_match('/[a-z]/', $password)) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe ne contient pas de minuscule."));
} elseif (!preg_match('/[0-9]/', $password)) {
    echo json_encode(array("error" => true, "message" => "Le mot de passe ne contient pas de chiffre."));
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo json_encode(array("error" => true, "message" => "L'email n'est pas valide."));
} else {
    $sql = "INSERT INTO Comptes (Pseudo, Adresse_mail, Mot_de_passe, Credits) VALUES ('$pseudo', '$email', '$password', 5)";
    if ($conn->query($sql) === TRUE) {
        echo json_encode(array("error" => false, "message" => "Nouveau compte créé avec succès."));
    } else {
        echo json_encode(array("error" => true, "message" => "Erreur lors de la création du compte : " . $conn->error));
    }
}
    
$conn->close();


code de connexion :

<?php
session_start();

$servername = "localhost";
$username = "id22022299_mto";
$password = "MTOs123456!";
$dbname = "id22022299_bdd_tp3";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}

$email = $_POST["loginEmail"];
$password = $_POST["loginPassword"];

$sql = "SELECT * FROM Comptes WHERE Adresse_mail='$email' AND Mot_de_passe='$password'";
$sql_p = "SELECT Pseudo FROM Comptes WHERE Adresse_mail='$email'";
$result = $conn->query($sql);
$pseudo = $conn->query($sql_p);

if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    echo json_encode(array("success" => true));
} else {
    echo json_encode(array("success"=> false));
}


code par rapport aux crédits dans le jeu :

<?php
session_start();


$servername = "localhost";
$username = "id22022299_mto";
$password = "MTOs123456!";
$dbname = "id22022299_bdd_tp3";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$pseudo = $_SESSION["Pseudo"];

$result = $conn->query("SELECT Credits FROM Comptes WHERE Pseudo='$pseudo'");

$row = $result->fetch_assoc();
$credits = $row["Credits"];
    
echo json_encode($credits);
Ok donc je vois que vous n'avez pas encore abordée la POO (programmation orienté objet) je vais du coup pas m'avancé sur ce sujet.

Attention au injections SQL (regarde sur google) parce qu'ils vont vous tomber dessus.


Il faudrait voir si ici

if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    echo json_encode(array("success" => true));
} else {
    echo json_encode(array("success"=> false));
}


la connexion fonctionne bien;

est ce que y'a bien quelque chose dans $result et est ce que les sessions sont rempli.



    // tu pourrais faire ceci par exemple, var_dump($result);die();
    // le var dump te permet de debbuger, et le die permet de stoper le programme.
var_dump($result);die();
if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    echo json_encode(array("success" => true));
} else {
    echo json_encode(array("success"=> false));
}


Si tu as quelque chose dans $result alors tes sessions seront bien rempli

et ici pareil
$pseudo = $_SESSION["Pseudo"];

$result = $conn->query("SELECT Credits FROM Comptes WHERE Pseudo='$pseudo'");

$row = $result->fetch_assoc();
var_dump($row);die(); //ne pas oublier d'enlever le die(); dans la connexion pour lui. 
$credits = $row["Credits"];
    
echo json_encode($credits);

Modifié par JENCAL (15 May 2024 - 11:57)
Alors, en effet, je viens de tester et quand je suis sur la page où je veux obtenir les crédits affichés, l'utilisateur n'est pas connecté, mais aucune idée de pourquoi. Qu'est ce qui permet de faire en sorte que la connexion reste d'une page à une autre ? Merci
La pour tester ta connexion tu dois t'appuyer sur $_SESSION["loggedin"] = true;

session_start();
if($_SESSION["loggedin"] === true){
    $servername = "localhost";
    $username = "id22022299_mto";
    $password = "MTOs123456!";
    $dbname = "id22022299_bdd_tp3";

    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $pseudo = $_SESSION["Pseudo"];

    $result = $conn->query("SELECT Credits FROM Comptes WHERE Pseudo='$pseudo'");

    $row = $result->fetch_assoc();
    $credits = $row["Credits"];
    
    echo json_encode($credits);
}else{
var_dump($_SESSION);die();
}

Modifié par JENCAL (15 May 2024 - 12:05)
Oui, j'ai essayé et cela m'affiche que l'utilisateur n'est pas connecté. Je pense qu'il doit y avoir un problème avec mon système de connexion mais je ne comprends pas du tout pourquoi. J'ai pensé au fait que la redirection de page lorsque la connexion se fait (code php de connexion ligne 27 à 30) est par le biais de javascript mais je ne suis pas sur.
et dans ce if là

if ($result->num_rows > 0) {
    $_SESSION["loggedin"] = true;
    $_SESSION["Pseudo"] = $pseudo;
    var_dump($_SESSION);die(); 
    //tu peux rajouter ta redirection ici.  ou la gérer en js via ton success true
    echo json_encode(array("success" => true));
}


tu y accède bien ? il faut que ce code soit executer avant ton accès aux crédits

parce que bizarrement tu fait en début de fichier
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}

alors que tu set la session loggedin après ce if...

EDIT: je t'ai envoyé un MP
Modifié par JENCAL (15 May 2024 - 15:23)