Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion d'un site multilingue

(Même l'IA n'a pas su répondre)

Sujet résolu
28 décembre 2024 à 13:22:52

J'ai finis par trouver, à cette ligne :

$Requete->execute(array($Login_inscription, $Mail_inscription, $Pass_inscription, $Mail_inscription, $IP));


Il y a deux fois $Mail_inscription

Je laisse néamoins le code si jamais ça peut être utile à quelqu'un d'autre



Bonjour à tous ! (Désolé pour le code, lorsque je le met dans la balise code je ne peux pas publier et ça m'envoie sur un site qui me dit que je suis bloqué)...

Des années que je n'étais pas venu sur ce forum, j'ai connu le SdZ pour vous dire ...

Bref, ce n'est pas le sujet. Je programme actuellement un site web multilingue, composer d'une page Index qui contient un menu, un footer, et un double formulaire Connexion/Inscription (On peut choisir grâce à JavaScript lequel affiché, par défaut c'est le formulaire de connexion). Lorsqu'on arrive sur le site, la langue est l'anglais par défaut, il y a une balise <select> dans le menu pour changer de langue ET qui crée un cookie pour se rappeler du choix de la langue la prochaine fois qu'on vient sur le site et qui modifie tout le contenu de la page dynamiquement.

Parlons maintenant du formulaire de connexion.

Ce formulaire fonctionne correctement, les erreurs (Mauvaise combinaison mot de passe/adresse mail par exemple) sont affiché dans la langue choisis OU par défaut en anglais.

Parlons maintenant du formulaire d'inscription.

Lui, il a un gros problème ! Il m'affiche bien les erreurs dans la langue voulu, mais lorsqu'il n'y a pas d'erreur, j'ai une requête qui enregistre les infos dans la base de données.

Le problème se situe dans cette requête. Si je la laisse comme elle est actuellement, rien ne se passe, rien ne s'enregistre et aucun message de validation.

Si je met la requête dans un try/catch, le contenu s'enregistre en double dans la base de données (Seul l'ID est différent), mais il m'affiche le message "Inscription réussis" et si je renvoi le formulaire avec les mêmes informations il m'affiche bien le message "Cette adresse mail est déjà prise".

Voici l'arborescence du projet:

www/Index.php

www/Ajax/Traitement_connexion.php

www/Ajax/Traitement_inscription.php

www/Includes/Configuration.php

www/Includes/Menu.php

www/Includes/Footer.php
www/CSS/(là où se trouvent les feuilles de style de la page).

Voici la base de données "Nouveau_site":

Tables :

Utilisateurs (ID, Login_utilisateurs (varchar 255), Mail_utilisateurs (varchar 255), Pass_utilisateurs (varchar 255), Date_inscription (datetime), Rang (int), Activation (varchar 255), Adresse_IP (varchar 255))

Erreur_inscription (ID, Erreur_langage(varchar 255), Erreur_champs (varchar 255), Erreur_pass (varchar 255), [...], Inscription_succes (varchar 255))

Si besoin, je peux préciser la valeur des champs ci-dessus.

Voici mon code Index.php

<?php
    session_start();
    include "Includes/Configuration.php";
?>
<!DOCTYPE html>
<html lang="EN">
    <head>
        <meta charset="utf-8"/>
        <link rel="stylesheet" media="all" type="text/css" href="CSS/Style_index.css"/>
        <link rel="stylesheet" media="all" type="text/css" href="CSS/Style_commun.css"/>        
        <link rel="shortcut icon" type="image/x-icon" href="Images/Logo.ico"/>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
        <title></title>
        <script src="Ajax/Script_traduction_index.js"></script>
    </head>
    <body>
        
        <?php include("Includes/Menu.php");?>

        <section id="Rejoindre">
            <span class="Titre_rejoindre">
            </span>
            <div id="Utilisateurs">
                <div id="Formulaire_connexion">
                    <h2 id="Connexion_titre"></h2>
                    <form method="post" id="Connexion_formulaire" action="#" enctype="multipart/form-data">
                        <input type="email" name="User_login" id="User_login" placeholder="" maxlength="75" required/>
                        <input type="password" name="Pass_connexion" id="Pass_connexion" placeholder="" maxlength="75" required/>
                        <input type="Submit" id="Connexion_submit" value=""/>
                    </form>    
                
                    <a href="Recuperation_pass" class="Message_pass_oublie" title=""></a>
                    <a href="#Rejoindre" id="Inscription" title="" class="Engagements_lien"></a>
                </div>
                
                <div id="Formulaire_inscription">
                    <h2 id="Formulaire_sous_titre"></h2>
                    <form method="post" id="Inscription_formulaire" action="#" enctype="multipart/form-data">                
                        <input type="text" name="Login_inscription" id="Login_inscription" value="" placeholder="" maxlength="75" required/>
                        <input type="email" name="Mail_inscription" id="Mail_inscription" value="" placeholder="" maxlength="75" required/>
                        
                        <input type="password" name="Pass_inscription" id="Pass_inscription" value="" placeholder="" pattern=".{6,25}" maxlength="25" required/>
                                        
                        <input type="submit" value=""/>
                    </form>
                    <span class="CGU"></span>
                    <br/>
                    <a href="Renvoi_mail.php" class="Message_mail_renvoi" title=""></a>
                    <a href="#Connexion" id="Connexion_bouton" title="" class="Engagements_lien"></a>
                </div>    
                <span class="Erreur"></span>    
            </div>
        </section>
        
        <?php include("Includes/Footer.php");?>
        
        <script>
            $("#Formulaire_connexion").show();
            $("#Formulaire_inscription").hide();
            $("#Inscription").click(function()
                {
                    if ($("#Formulaire_connexion").is(":visible"))
                        {
                            $("#Formulaire_connexion").hide();
                            $("#Formulaire_inscription").show();
                        }
                    else
                        {
                            $("#Formulaire_connexion").show();
                            $("#Formulaire_inscription").hide();
                        }
                }
            );
            $("#Connexion_bouton").click(function()
                {
                    if ($("#Formulaire_inscription").is(":visible"))
                        {
                            $("#Formulaire_inscription").hide();
                            $("#Formulaire_connexion").show();
                        }
                    else
                        {
                            $("#Formulaire_inscription").show();
                            $("#Formulaire_connexion").hide();
                        }
                }
            );
        </script>
        <script>                                    
            $(document).ready(function(){
                $("#Inscription_formulaire").on('submit', function(e){        
                e.preventDefault();
                    var Login_inscription=$("#Login_inscription").val();   
                    var Mail_inscription=$("#Mail_inscription").val();   
                    var Pass_inscription=$("#Pass_inscription").val();   
                    

                    $.ajax({
                        url:'Ajax/Inscription_traitement.php',
                        type:'POST',
                        dataType: 'json',
                        data:
                            {
                                Login_inscription:Login_inscription, Mail_inscription:Mail_inscription, Pass_inscription:Pass_inscription
                            },
                        success:function(response)
                            {    
                                // Afficher le message d'erreur dans le div avec la classe 'Erreur'
                                $('.Erreur').html(response).fadeIn('fast');
                            }
                    });                            

                    setTimeout(function() {
                    $('.Erreur').fadeOut('fast'); }, 3000);
                });                        
            });
        </script>
        <script>                                    
            $(document).ready(function(){
                $("#Connexion_formulaire").on('submit', function(e){        
                e.preventDefault();
                    var User_login=$("#User_login").val();   
                    var Pass_connexion=$("#Pass_connexion").val();                       
                    $.ajax({
                        url:'Ajax/Connexion_traitement.php',
                        type:'POST',
                        dataType: 'json',
                        data:
                            {
                                User_login:User_login, Pass_connexion:Pass_connexion
                            },
                        success: function(response)
                            {
                                // Afficher le message d'erreur dans le div avec la classe 'Erreur'
                                $('.Erreur').html(response).fadeIn('fast');

                                // Optionnel : Rediriger l'utilisateur si la connexion est réussie
                                if (response === 'success')
                                    { // Remplacez 'success' par le message de succès que vous renvoyez
                                        window.location.href = 'Livret.php';
                                    }
                            }
                    });                            

                    setTimeout(function() {
                    $('.Erreur').fadeOut('fast'); }, 3000);
                });                        
            });
        </script>
    </body>
</html>

Le code Inscription_traitement.php

<?php
    $response = false;
    session_start();
    include "../Includes/Configuration.php";

    if(isset($_POST['Login_inscription']) AND isset($_POST['Mail_inscription']) AND isset($_POST['Pass_inscription']))
        {
            if (preg_match("#^(?=.*[a-zàâçéèêîïñôùûüÿ])(?=.*[A-ZÀÂÇÉÈÊÎÏÑÔÙÛÜŸ])(?=.*\d)(?=.*[.,:;!?:\/<>\"\'&²°|\#\(\)\[\]\{\}\*\+=-_\^¨£\$¤µ%@§\\\ ]).{8,25}$#", $_POST['Pass_inscription']))
                {    
                    if(preg_match("#^[a-zA-Z0-9._-]{1,64}+@[a-zA-Z0-9._-]{1,255}\.[a-zA-Z]{2,4}$#", $_POST['Mail_inscription']))
                        {
                            if(preg_match("#^[a-zA-Z0-9][a-zA-Z0-9_\.\-\s]*[a-zA-Z0-9]+$#", $_POST['Login_inscription']))
                                {
                                    $IP = $_SERVER["REMOTE_ADDR"];
                                    $Login_inscription = $_POST['Login_inscription'];
                                    $Mail_inscription = strtolower($_POST['Mail_inscription']);
                                    $Pass_options = ['cost' => 12];
                                    $Pass_inscription = password_hash($_POST['Pass_inscription'], PASSWORD_DEFAULT, $Pass_options);
                                    
                                    $Requete = $BDD->prepare('SELECT Mail_utilisateurs FROM Utilisateurs WHERE Mail_utilisateurs = :Mail_utilisateurs');
                                    $Requete->execute(array(':Mail_utilisateurs'=>$Mail_inscription));
                                    $Donnees_mail = $Requete->fetch();
                                    if ($Donnees_mail == 0) // Si une valeur est retournée c'est qu'un membre possède déjà le pseudo.
                                        {
                                            $Requete = $BDD->prepare('SELECT Login_utilisateurs FROM Utilisateurs WHERE Login_utilisateurs = :Login_utilisateurs');
                                            $Requete->execute(array(':Login_utilisateurs'=>$Login_inscription));
                                            $Donnees_login = $Requete->fetch();
                                            
                                            if ($Donnees_login == 0) // Si une valeur est retournée c'est qu'un membre possède déjà le pseudo.
                                                {
                                                    $Requete = $BDD->prepare('INSERT INTO Utilisateurs (Login_utilisateurs, Mail_utilisateurs, Pass_utilisateurs, Date_inscription, Rang, Activation, Adresse_IP) VALUES(?, ?, ?, NOW(), 0, 0, ?)');
                                                    $Requete->execute(array($Login_inscription, $Mail_inscription, $Pass_inscription, $Mail_inscription, $IP));            
                                                    $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
                                                    $reqErreur = $BDD->prepare("SELECT Inscription_succes FROM Erreur_inscription WHERE Erreur_langage = :langage");
                                                    $reqErreur->execute([':langage' => $langage]);
                                                    $erreur = $reqErreur->fetchColumn();
                                                    $successc = $erreur ?: "";
                                                    
                                                    //$Sujet_mail = 'Votre inscription sur Driv'R';
                                                    //$Message_mail = "Bonjour ".$Mail_inscription.",</div>
                                                                                            
                                                    //Une dernière étape pour vous permettre de profiter pleinement de notre site.<br/>
                                                    //Prenez le temps de valider votre adresse mail grâce au lien ci-dessous.<br/>
                                                                                    
                                                    //<br/>Nous avons bien enregistrer votre inscription sur IPBrowser.fr<br/>
                                                    
                                                    //<br/>Rappel de vos identifiants:<br/>
                                                    //- Adresse mail : ".$Mail_inscription."<br/>
                                                    //- Pass : ".$Pass_naturel."<br/>
                                                    
                                                    //<br/>Pour activer votre compte, veuillez cliquer sur ce lien : <a href='http://drivr.fr/Activation.php?Mail=".urlencode($Mail_inscription)."&Cle=".urlencode($Cle)."'>Activer mon compte</a><br/>        
                                                                                                                                
                                                    //Si ce mail ne vous est pas destiné, merci de l'ignorer.<br/>
                                                    //<br/>Ce mail est envoyé automatiquement, il est inutile d'y répondre.";
                                                    //$Destinataire = $Mail_inscription;
                                                    //$headers = "From: \"IPBrowser.fr\"<Contact@IPBrowser.fr>\n";
                                                    //$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"";
                                                    
                                                    // if(mail($Destinataire,utf8_decode($Sujet_mail),utf8_decode($Message_mail),$headers))
                                                    //    {
                                                            

                                                    //    }
                                                    //else
                                                    //    {
                                                    //        echo 'Une erreur est survenu durant l\'envoi du mail.';
                                                    //        include "Includes/Formulaire.php";
                                                    //    }
                                                                                
                                                    //$Sujet_IPB = 'Nouveau message sur IPBrowser.fr';
                                                    //$Message_contact = "Bonjour M. Alizon,<br/>
                                                                                    
                                                    //<br/>Vous avez reçu un nouveau message sur IPBrowser.<br/>
                                                    //Vous pouvez le consultez depuis votre panel d'administration <a href='http://IPBrowser.fr/Administration' title='Administration'>ici</a>.<br/>
                                                    
                                                    //<br/>Sujet: ".$Sujet."<br/>
                                                    //<br/>Mail: ".$Mail_inscription."<br/>                                                                    
                                                    //<br/>Message: ".$Message."<br/>
                                                                                    
                                                    //<br/>Si ce mail ne vous est pas destiné, merci de l'ignorer.<br/>
                                                    //<br/>Ce mail est envoyé automatiquement, il est inutile d'y répondre.";
                                                    //$Destinataire_contact = $Mail_contact;
                                                    //$headers_contact = "From: \"IPBrowser.fr\"<Contact@IPBrowser.fr>\n";
                                                    //$headers_contact .= "Content-Type: text/html; charset=\"iso-8859-1\"";
                                                    //if(mail($Destinataire_contact,utf8_decode($Sujet_IPB),utf8_decode($Message_contact),$headers_contact))
                                                    //    {
                                                    //    }
                                                    //else
                                                    //    {
                                                    //    }
                                                }
                                            else
                                                {
                                                    // User not found, retrieve error message from database
                                                    $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
                                                    $reqErreur = $BDD->prepare("SELECT Erreur_login FROM Erreur_inscription WHERE Erreur_langage = :langage");
                                                    $reqErreur->execute([':langage' => $langage]);
                                                    $erreur = $reqErreur->fetchColumn();
                                                    $successc = $erreur ?: "";            
                                                }
                                        }
                                    else
                                        {
                                            $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
                                            $reqErreur = $BDD->prepare("SELECT Erreur_mail FROM Erreur_inscription WHERE Erreur_langage = :langage");
                                            $reqErreur->execute([':langage' => $langage]);
                                            $erreur = $reqErreur->fetchColumn();
                                            $successc = $erreur ?: "";
                                        }
                                }
                            else
                                {
                                    $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
                                    $reqErreur = $BDD->prepare("SELECT Erreur_caracteres FROM Erreur_inscription WHERE Erreur_langage = :langage");
                                    $reqErreur->execute([':langage' => $langage]);
                                    $erreur = $reqErreur->fetchColumn();
                                    $successc = $erreur ?: "";
                                }
                        }
                    else
                        {
                            $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
                            $reqErreur = $BDD->prepare("SELECT Erreur_format FROM Erreur_inscription WHERE Erreur_langage = :langage");
                            $reqErreur->execute([':langage' => $langage]);
                            $erreur = $reqErreur->fetchColumn();
                            $successc = $erreur ?: "";
                        }
                }
            else
                {
                    $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
                    $reqErreur = $BDD->prepare("SELECT Erreur_pass FROM Erreur_inscription WHERE Erreur_langage = :langage");
                    $reqErreur->execute([':langage' => $langage]);
                    $erreur = $reqErreur->fetchColumn();
                    $successc = $erreur ?: "";
                }
        }
    else
        {
            $langage = $_COOKIE['Langage'] ?? 'EN'; // Get the user's language from the cookie
            $reqErreur = $BDD->prepare("SELECT Erreur_champs FROM Erreur_inscription WHERE Erreur_langage = :langage");
            $reqErreur->execute([':langage' => $langage]);
            $erreur = $reqErreur->fetchColumn();
            $successc = $erreur ?: "";
        }
    
    $responsec = $successc;
    die(json_encode($responsec));
?>

J'ai également la page Connexion_traitement.php et Script_traduction_index.php (pour traduire le contenu de la page index), mais je n'ai pas vraiment besoin de les partagar étant donné qu'elles fonctionne. Mais si jamais, je peux, notamment Connexion_traitement qui est parfaitement fonctionnel et est codé exactement de la même manière qu'Inscription_traitement.

Si vous avez le moindre indice pour moi, je vous en serez extrêmement reconnaissant, il y a encore des failles de sécurité mais ma priorité pour le moment est de résoudre ce problème.

Merci d'avance à tous !

-
Edité par Lauloque 5 février 2025 à 23:40:21

  • Partager sur Facebook
  • Partager sur Twitter
Agrémenter votre site web grâce à nos templates gratuit sur IPBrowser.fr !