Bonjour à tous,

Voilà je suis toujours sur mon site d'aviation qui comprend le site, un forum et 2 autre site.

Chaque élément nécessite à la base une inscription individuel, le truc bien chiant quoi. Donc je suis en train de faire un formulaire unique qui fera tout.

Donc ma première question est sur ma logique:

Je vérifie via ajax et java, ce qui est rentré dans les champs, avec java je fais du match pour vérifié que ce qui est rentré est cohérent et ajax pour bloquer les double compte. Par contre j'ai un doute que cette partie du formulaire ne soit pas à l’abri d'injection.

Ensuite il y aura un traitement en php dans un autre fichiers ou il y aura une seconde vérification avec des pregmatchs, des str replace, magic quote... au cas ou quelqu'un ne passerai pas par la page formulaire

suis je bien partis?

seconde question,

j'ai un champs commentaire, ou la personnes doit expliquer pourquoi il vient, et la je cherche une expression réguliére qui couvre un teste de base avec les accent, ponctuation de base, et retour à la ligne...
Quelqu'un aurai t'il une expression régulière java qui correspondrait sous la main, car je suis vraiment pas à l'aise avec ça.

troisième question
Hormis que c'est le bordel dans ce code, et que c'est optimisation à mort, voyez vous de grosse aberrations, surtout au point de vue sécurité.
Je sais que mon formulaire n'a pas les balises forms et c'est volontaire, pour le moment, c'est pour éviter des fausse manip.

page formulaire.

<div class="container">
    <div class="row">
        <div class="col-lg-2"></div>
            <div class="col-lg-8">
                <label for="username">Nom d’utilisateur:</label><span>La longueur doit être comprise entre 5 et 20 caractères.</span><br>
                <input type="text" tabindex="3" name="username" id="username" class="username" size="25" value=""><span class="check_username"></span><br>
                <label for="email">Adresse e-mail:</label><br>
                <input type="text" tabindex="4" name="email" id="email" class="email" size="25" maxlength="100" value="" title="Adresse e-mail" autocomplete="off"><span class="check_email"></span><br>

                <label for="email_confirm">Confirmation de l’adresse e-mail:</label><br>
                <input type="text" tabindex="5" name="email_confirm" id="email_confirm" class="email_confirm" size="25" maxlength="100" value="" title="Confirmation de l’adresse e-mail" autocomplete="off"><span class="re_checkemail"></span><br>
                <label for="tz">Fuseau horaire:</label><span>[UTC] Europe de l’Ouest, Méridien de Greenwich par défaut</span><br>
                <select name="tz" id="tz" tabindex="7" class="autowidth">
                    <option title="[UTC - 12] Île Baker" value="-12">[UTC - 12] Île Baker</option>
                    <option title="[UTC - 11] Niue, Samoa" value="-11">[UTC - 11] Niue, Samoa</option>
                    <option title="[UTC - 10] Hawaii-Aleutian, Île Cook" value="-10">[UTC - 10] Hawaii-Aleutian, Île Cook</option>
                    <option title="[UTC - 9:30] Îles Marquises" value="-9.5">[UTC - 9:30] Îles Marquises</option>
                    <option title="[UTC - 9] Alaska, Île Gambier" value="-9">[UTC - 9] Alaska, Île Gambier</option>
                    <option title="[UTC - 8] Pacifique" value="-8">[UTC - 8] Pacifique</option>
                    <option title="[UTC - 7] Montagnes Rocheuses" value="-7">[UTC - 7] Montagnes Rocheuses</option>
                    <option title="[UTC - 6] Centre" value="-6">[UTC - 6] Centre</option>
                    <option title="[UTC - 5] Est" value="-5">[UTC - 5] Est</option>
                    <option title="[UTC - 4:30] Venezuela" value="-4.5">[UTC - 4:30] Venezuela</option>
                    <option title="[UTC - 4] Atlantique" value="-4">[UTC - 4] Atlantique</option>
                    <option title="[UTC - 3:30] Terre-Neuve" value="-3.5">[UTC - 3:30] Terre-Neuve</option>
                    <option title="[UTC - 3] Amazonie, Groenland Central" value="-3">[UTC - 3] Amazonie, Groenland Central</option>
                    <option title="[UTC - 2] Fernando de Noronha, Géorgie du Sud & les Îles Sandwich du Sud" value="-2">[UTC - 2] Fernando de Noronha, Géorgie du Sud & les Îles Sandwich du Sud</option>
                    <option title="[UTC - 1] Açores, Cap-Vert, Groenland de l’Est" value="-1">[UTC - 1] Açores, Cap-Vert, Groenland de l’Est</option>
                    <option title="[UTC] Europe de l’Ouest, Méridien de Greenwich" value="0" selected="selected">[UTC] Europe de l’Ouest, Méridien de Greenwich</option>
                    <option title="[UTC + 1] Europe Centrale, Afrique de l’Ouest" value="1">[UTC + 1] Europe Centrale, Afrique de l’Ouest</option>
                    <option title="[UTC + 2] Europe de l’Est, Afrique Centrale" value="2">[UTC + 2] Europe de l’Est, Afrique Centrale</option>
                    <option title="[UTC + 3] Moscou, Afrique de l’Est" value="3">[UTC + 3] Moscou, Afrique de l’Est</option>
                    <option title="[UTC + 3:30] Iran" value="3.5">[UTC + 3:30] Iran</option>
                    <option title="[UTC + 4] Gulf, Samara" value="4">[UTC + 4] Gulf, Samara</option>
                    <option title="[UTC + 4:30] Afghanistan" value="4.5">[UTC + 4:30] Afghanistan</option>
                    <option title="[UTC + 5] Pakistan, Iekaterinbourg" value="5">[UTC + 5] Pakistan, Iekaterinbourg</option>
                    <option title="[UTC + 5:30] Inde, Sri Lanka" value="5.5">[UTC + 5:30] Inde, Sri Lanka</option>
                    <option title="[UTC + 5:45] Népal" value="5.75">[UTC + 5:45] Népal</option>
                    <option title="[UTC + 6] Bangladesh, Bhoutan, Novosibirsk" value="6">[UTC + 6] Bangladesh, Bhoutan, Novosibirsk</option>
                    <option title="[UTC + 6:30] Îles Cocos, Myanmar" value="6.5">[UTC + 6:30] Îles Cocos, Myanmar</option>
                    <option title="[UTC + 7] Indochine, Krasnoyarsk" value="7">[UTC + 7] Indochine, Krasnoyarsk</option>
                    <option title="[UTC + 8] Chine, Australie de l’Ouest, Irkutsk" value="8">[UTC + 8] Chine, Australie de l’Ouest, Irkutsk</option>
                    <option title="[UTC + 8:45] Australie du Sud-Est" value="8.75">[UTC + 8:45] Australie du Sud-Est</option>
                    <option title="[UTC + 9] Japon, Corée, Chita" value="9">[UTC + 9] Japon, Corée, Chita</option>
                    <option title="[UTC + 9:30] Australie Centrale" value="9.5">[UTC + 9:30] Australie Centrale</option>
                    <option title="[UTC + 10] Australie de l’Est, Vladivostok" value="10">[UTC + 10] Australie de l’Est, Vladivostok</option>
                    <option title="[UTC + 10:30] Lord Howe" value="10.5">[UTC + 10:30] Lord Howe</option>
                    <option title="[UTC + 11] Île Solomon, Magadan" value="11">[UTC + 11] Île Solomon, Magadan</option>
                    <option title="[UTC + 11:30] Île Norfolk" value="11.5">[UTC + 11:30] Île Norfolk</option>
                    <option title="[UTC + 12] Nouvelle Zélande, Fiji, Kamchatka" value="12">[UTC + 12] Nouvelle Zélande, Fiji, Kamchatka</option>
                    <option title="[UTC + 12:45] Îles Chatham" value="12.75">[UTC + 12:45] Îles Chatham</option>
                    <option title="[UTC + 13] Tongo, Îles Phoenix" value="13">[UTC + 13] Tongo, Îles Phoenix</option>
                    <option title="[UTC + 14] Île de Wight" value="14">[UTC + 14] Île de Wight</option>
                </select><br>

                <label for="pseudo">Quel est votre pseudo FSX:</label><br>
                <input type="text" tabindex="6" name="pseudo" id="pseudo" class="pseudo" size="25" maxlength="100" value="" title="Pseudo sous FSX" autocomplete="off"><span class="check_pseudo"></span><br>

                <label for="airport">Quel est l'aéroport ou aérodrome le plus proche de chez vous:</label><br>
                <input type="text" tabindex="7" name="airport" id="airport" class="airport" size="25" maxlength="100" value="" title="airport" autocomplete="off"><span class="check_airport"></span><br>

                <label for="new_password">Mot de passe:</label><br><span>Le mot de passe doit avoir une longueur comprise entre 6 et 100 caractères.</span><br>
                <input type="password" tabindex="8" name="password1" id="password1" size="25" value="" class="password1" title="Nouveau mot de passe" autocomplete="off"><span class="check_password"></span><br>

                <label for="password_confirm">Confirmation du mot de passe:</label><br>
                <input type="password" tabindex="9" name="password_confirm" class="password_confirm" id="password_confirm" size="25" value="" title="Confirmation du mot de passe" autocomplete="off"><span class="check_password_confirm"></span><br>
                <label for="raison">Afin de mieux comprendre le but de votre inscription, merci de nous dire pourquoi venez vous chez nous.</label><br>
                <textarea name="raison" tabindex="10" name="raison" cols="75" rows="5"></textarea><span class="raison"></span><br>

                <input type="hidden" name="lang" id="lang" value="fr"><!--champs masqué -->

                <script type="text/javascript">
                var email;
                var email_confirm;
                var password;
                var password_confirm;
                    $(function()
                        {
                            $('.username').keyup(function()
                                {
                                    username=$(this).val();
                                    username=remove_whitespaces(username);
                                    //alert('username='+username);
                                    if (username.match(/^\.\\]\wæøå-]{5,30}$/))
                                        {
                                            $('.check_username').fadeIn(400).html('<img src="./site/public/register/ajax-loading.gif" /> ');
                                            var String = 'pseudo='+ username;
                                            $.ajax({
                                                        type: "POST",
                                                        url: "./site/public/register/test_pseudo.php",
                                                        data: String,
                                                        cache: false,
                                                        success: function(result)
                                                            {
                                                                var result=remove_whitespaces(result);
                                                                if(result=="")
                                                                    {
                                                                        $('.check_username').html('<img src="./site/public/register/accept.png" /> Pseudo correct et disponible');
                                                                    }
                                                                else
                                                                    {
                                                                        $('.check_username').html('<img src="./site/public/register/error.png" /> Pseudo correct mais indisponible');
                                                                    }
                                                            }
                                                        });

                                        }
                                    else
                                        {
                                            $('.check_username').html('<img src="./site/public/register/error.png" /> Pseudo incorrect');
                                        }
                                });
                            $('.email').keyup(function()
                                {
                                    //alert('email='+email);
                                    email=$(this).val();
                                    email=remove_whitespaces(email);
                                    if (email.match(/^\w+\w-\.]*\@\w+((-\w+)|(\w*))\.[a-zA-Z]{2,3}$/))
                                        {
                                            $('.check_email').fadeIn(400).html('<img src="./site/public/register/ajax-loading.gif" /> ');
                                            var String = 'mail='+ email;
                                            $.ajax({
                                                        type: "POST",
                                                        url: "./site/public/register/test_mail.php",
                                                        data: String,
                                                        cache: false,
                                                        success: function(result2)
                                                            {
                                                                var result2=remove_whitespaces(result2);
                                                                if(result2=="")
                                                                    {
                                                                        $('.check_email').html('<img src="./site/public/register/accept.png" /> Email correct et disponible');

                                                                    }
                                                                else
                                                                    {
                                                                        $('.check_email').html('<img src="./site/public/register/error.png" /> Email correct mais indisponible');
                                                                    }
                                                            }
                                                        });

                                        }
                                    else
                                        {
                                            $('.check_email').html('<img src="./site/public/register/error.png" /> Email incorrect');
                                        }
                                });

                            $('.email_confirm').keyup(function()
                                {
                                    //alert('email='+email);
                                    email_confirm=$(this).val();
                                    email_confirm=remove_whitespaces(email_confirm);
                                    $('.re_checkemail').html('');
                                    if (email==email_confirm)
                                        {
                                            $('.re_checkemail').html('<img src="./site/public/register/accept.png" /> Confirmation Email correct');
                                        }
                                    else
                                        {
                                            $('.re_checkemail').html('<img src="./site/public/register/error.png" /> Confirmation Email incorrect');
                                        }
                                });

                            $('.pseudo').keyup(function()
                                {
                                    pseudo=$(this).val();
                                    pseudo=remove_whitespaces(pseudo);
                                    //alert('pseudo='+pseudo);
                                    if (pseudo.match(/^\.\\]\wæøå-]{5,30}$/))
                                        {
                                            $('.check_pseudo').html('<img src="./site/public/register/accept.png" /> Pseudo FSX correct');
                                        }
                                    else
                                        {
                                            $('.check_pseudo').html('<img src="./site/public/register/error.png" /> Pseudo FSX incorrect');
                                        }
                                });
                            $('.airport').keyup(function()
                                {
                                    airport=$(this).val();
                                    airport=remove_whitespaces(airport);
                                    //alert('airport='+airport);
                                    if (airport.match(/^[a-zA-Z0-9]{3,4}$/))
                                        {
                                            $('.check_airport').fadeIn(400).html('<img src="./site/public/register/ajax-loading.gif" /> ');
                                            var String = 'airport='+ airport;
                                            $.ajax({
                                                        type: "POST",
                                                        url: "./site/public/register/search_airport.php",
                                                        data: String,
                                                        cache: false,
                                                        success: function(result2)
                                                            {
                                                                var result2=remove_whitespaces(result2);
                                                                if(result2=="")
                                                                    {
                                                                        $('.check_airport').html('<img src="./site/public/register/error.png" />');

                                                                    }
                                                                else
                                                                    {
                                                                        $('.check_airport').html('<img src="./site/public/register/accept.png" />' +result2);
                                                                    }
                                                            }
                                                        });
                                        }
                                    else
                                        {
                                            $('.check_airport').html('<img src="./site/public/register/error.png" /> Aéroport incorrect');
                                        }
                                });

                            $('.password1').keyup(function()
                                {
                                    password1=$(this).val();
                                    password1=remove_whitespaces(password1);
                                    //alert('password1='+password1);
                                    if (password1.match(/^\.\\]\wæøå-]{5,30}$/))
                                        {
                                            $('.check_password').html('<img src="./site/public/register/accept.png" /> Mot de passe correct');
                                        }
                                    else
                                        {
                                            $('.check_password').html('<img src="./site/public/register/error.png" /> Mot de passe incorrect');
                                        }
                                });
                            $('.password_confirm').keyup(function()
                                {
                                    //alert('password_confirm='+password_confirm);
                                    password_confirm=$(this).val();
                                    password_confirm=remove_whitespaces(password_confirm);
                                    $('.password_confirm').html('');
                                    if (password1==password_confirm)
                                        {
                                            $('.check_password_confirm').html('<img src="./site/public/register/accept.png" /> Confirmation Mot de passe correct');
                                        }
                                    else
                                        {
                                            $('.check_password_confirm').html('<img src="./site/public/register/error.png" /> Confirmation Mot de passe incorrect');
                                        }
                                });
                        });

                    function remove_whitespaces(str)
                        {
                            var str=str.replace(/^\s+|\s+$/,'');
                            return str;
                        }
                </script>
            </div>
        </div>
    </div>
</div>

et l'un des test ajax

<?php
/////vérifiaction de la protection active page appelante/////
//if(!defined('PROTECTIONINCLUDE')){die('Interdit');}
/////activation protection page appelé/////
define('PROTECTIONINCLUDE', TRUE);
/////insertion des base de donnée/////
include ($_SERVER"DOCUMENT_ROOT"].'/site/config/bdall.php');
if(isset($_POST'mail']) && !empty($_POST'mail']))
    {
        //$pseudo="pignouf";
        $mail=$_POST'mail'];
        try
            {
                $DBPDO = new PDO($dbdns1,$dbuser1 , $dbpass1,
                array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                $DBPDO-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
                    try{
                            $sql = "SELECT * FROM `phpbb_users` WHERE `user_email` LIKE '$mail'";
                            $req = $DBPDO ->query($sql);
                            while($test_pseudo=$req->fetch(PDO::FETCH_OBJ)) 
                                {
                                    echo $HTML="une correspondance existe";
                                }
                        }
                    catch (PDOException $e){erreur_req ($e);}

            }
        catch (PDOException $e){erreur_req ($e);}
    }
?>

Merci d'avance de votre aide

Flo

7 réponses


flo3376
Auteur
Réponse acceptée

Salut Vallyan,
Alors merci pour la note culturel, c'est pas que j'ai la flemme d'écrire javascript, c'est que comme tu l'as supposé, je n'ai aucune notion de différence entre java, JS et Jquerry, pour mois c'est des cousins trop proche mais bon.

Réponse 1
Pour l'utilité de ce formulaire supposons que j'aille créer un site qui regroupe 4 forum php_bb avec des version différente donc 4 jeux de table différentes et incompatible. Dans la réalité, j'ai un forum PHP_BB, 2 enregistreur de vol PHP_VMS et un gestionnaire de fichier, petite question d'ailleurs comment doit on appeler ces chose, des application?
Donc au lieu de devoir s'inscrire à chaque, je souhaiterai faire un formulaire unique qui enregistre un utilisateur dans tous les modules d'un coup.

Réponse 2
Dans mon formulaire au bout d'un moment je demande disons un commentaire. Je souhaiterai une regex disons qui accepte le français courant mais bloque tout balise php, sql et JS pour éviter des injections.

Réponse 3, il est vrai que je viens de comprendre que très récemment la notion de classe et d'id, et que j'ai du mal à les utiliser au bon moment en JS. Bien que les performances soit le cadet de mes soucis dans ce cas, je vais avoir des chose plus compliqué plus tard, donc je prend note.

Pour ma fonction test de l'email, je vérifie que la personne n'essaie pas de faire un double compte en gros.

Pour ce qui est de ma fonction remove_whitespace(), disons que c'est une fonction que j'utilisai au début et dont je ne me suis jamais débarrassé. Comme je n'ai jamais fais de formulaire aussi complet et large, elle ne m'avait jamais posé de soucis, mais c'est vrai que là j'ai fais le boulet.

Pour l'ICAO, tu as raison c'est bien tout en majuscule, mais bon dans php il y a str upper qui le fera, et pour l'histoire de l'espace, je t'avouerai que la moitié ne savent pas ce qu'est un ICAO donc va faire un copier coller du truc, et ceux qui le savent, savent comment ça s'écrit, oui là je sais je suis insolent, désolé.

En tout cas merci de me consacrer du temps, car je pense que par moment tu dois avoir envie pleurer en voyant ce que j'écris.

Bon je revois ma copie de suite alors.

Alors pur commencer, si tu as la flemme d'écrire javascript, tu peux utiliser JS. le java est un autre langage qui n'a rien a voir (bon, on pige bien que tu parles du JS ... mais c'est pour ta culture ^^).

1- Pas compris ... tu as plusieurs site différents mais hébergés sur le meme serveur ? ... et tu veux que les users soient partagés ? il te suffit de faire tes requètes sur la meme table, alors, non ? Auquel cas la logique nécessaire pour éviter qu'un meme utilisateur s'enregistre deux fois sur le même site est la meme que celle qui évite qu'il s’enregistre sur un autre de tes sites alors qu'il est déja sur l'un deux ...

2- Que veux-tu identifier avec ta regex, exactement ? Tu demandes si on a une regex qui correspond a ce que tu veux sans vraiment dire ce que tu veux. (la regex (é|è|\s|.), par exemple, va détecter les é, les è, les espaces et les points ... mais je doute que ce soit ce dont tu as besoin).

3- (i) Pour ce que j'ai vu de ton code (je ne suis clairement pas allé dans le détail de bugs potentiels), tu as l'air d'utiliser les id et classe un peu de façon interchangeable. Les id sont vraiment la pour identifier des éléments de façon unique, alors que les classes doivent être réservées a des groupes d'éléments. Mettre, pour chaque input, une classe identique a l'id n'est pas nécessaire. En outre, faire tes sélections pour les vérifs en utilisant les classes de fait perdre (un peu) en performances par rapport a l'utilisation des id.
Conclusion: vire tes class de tes input, et utilise les id dans ton jQuery.
(ii) Ta fonction pour valider les emails me semble bien complexe quand il est seulement nécessaire d'avoir un input de type email ...
(iii) Je ne vois pas l'intéret non plus de ta fonction remove_whitespace(). Si tu ne veux pas d'espaces, alors inclu la verif d'espaces dans ta validation, mais ne les enlèves pas automatiquement. Si ton utilisateur en met, et que dans les coulisses tu commences a lui modifier son pseudo ou son mdp, alors lorsqu'il se loggera il mettra son espace (ne sachant pas que tu les as enlevé) et se fera refouler sans comprendre ...
D'ailleurs dans ta regex pour la validation des codes IATA et ICAO (/^[a-zA-Z0-9]{3,4}$/), si le mec met un espace la validation de passera pas ... (et il me semble que c'est tout en majuscules, non ?)

flo3376
Auteur

alors petite élément de réponse à ma décharge, comme je me suis mal démerdé avec mon ajax, ma fonction removewhitespane nettoie ma chaine afin d'éviter que ma requête ajax ne me retourne rien

Toujours pour la culture: Java est aussi différent de javascript que PHP ou Ruby le sont du javascript ou du C++ ... ce sont juste des langages complètement différents. Tu n'as sans doute jamais écrit une ligne de code en java (et de toute facon je ne te le conseil pas ^^). jQuery quant a lui est une sorte de surcouche appliqué a javascript. Il l'améliore, si tu veux, en lui ajoutant des fonctions faciles a utiliser, mais jQuery n'existe pas sans javascript ...

Enfin bref ...

1- Tu peux effectivement les appeler des applications. Tu en as donc 4: phpBB et 3 autres que tu développes. La solution la plus simple pour avoir des users communs que je vois serait juste d'obliger les gens a s'enregistrer sur phpbb, au lieu d'avoir plusieurs systèmes d'enregistrement qui se vérifient les uns les autres pour les doublons éventuels ... surtout si le mec utilise des emails différents
Ce que je suggère:
* Ta seule et unique table utilisateurs, pour toutes tes applications, est celle de phpbb
* Pour tes 3 autres applications non phpbb:
| Tu codes simplement le script de login qui requête la table users de phpbb (je sais plus comment elle s'appelle)
| Les liens "sign up" redirigent tous vers le sign-up de phpbb
De cette facon tu restes hyper propre, tu as une seule table avec tous tes utilisateurs (c'est plus facile dans ce sens, que de bidouiller phpbb pour qu'il prenne ses users depuis ta table a toi ...). Tu peux éventuellement ajouter un truc un peux classe en javascript pour que la page de sign-up de phpbb sache depuis quelle page l'utilisateur arrive, et le renvoie vers celle-ci après l'enregistrement.

2- Pour injecter du javascript, il faudrait le faire passer dans les balises html. Donc tu peux supprimer tout type de balise avec un preg_replace qui utilise la regex suivante: <.*>.*</.*> (elle vire tout tag avec ce qu'il y a entre). Bien sur il y a aussi le html entities.
Contre les injection sql, si tu utilise PDO correctement (c'est a dire tout le temps, et toujours en séparant la requête des valeurs), tu es bon.

3- Je persiste a penser que remove_whitespace() n'est pas necessairement une bonne idée ^^ ... au pire il y a la fonction trim() que tu peux utiliser.

Si je peux me permettre: tu as l'air de passer beaucoup de temps et d'energie a faire des trucs en javascript qui valident toutes sorte de choses ... Je ne suis pas sur que tu gardes bien en tete que, si je schématise, cela ne sert pas a grand chose: la validation coté serveur est absolument impérative, le JS reste un petit luxe pour rendre les choses un peu plus sympa (le JS est trop facilement modifiable, que ce soit parce que le navigateur est trop vieux, l'utilisateur a désactivé le js, ou c'est un vilain hacker).

La démarche qui est en générale adoptée est de coder toute la vérif coté serveur d'abord. (i) D'une c'est la priorité et de toute façon et il faudra le faire, (ii) de deux cette validation doit être rock-solide et te permet d'etre plus serein sur la non-exhaustivité de la validation coté client (manque de temps, ou flemme, ou autre), (iii) de trois ca te permet de te concentrer, en JS, sur les erreurs légitimes, et non d'imaginer tous les hack bidons des petits crétins qui se prennent pour des black hat, (iv) et enfin dernièrement si toute la validation est faite coté JS quand tu veux tester ta validation coté serveur, ca va etre un enfer (il faudra systématiqement désactiver ta protection JS pour pouvoir envoyer des valeurs erronées lors de tes tests).

Concentre-toi sur la partie PHP, qui lit les valeurs envoyées, les vérifie, et retourne le formulaire si jamais il y a un problème, avec la mention de celui-ci. Je pense qu'il faut vraiment voir le JS comme de la fioriture, la petite touche qui rend la vérif d'un formulaire un peu plus sympa. Il ne faut surtout pas imaginer tous les problèmes possible, seulement ceux qui sont légitimes.

flo3376
Auteur

ce que j'adore avec toi, c'est que c'est très bien expliqué.
alors je vais te répondre dans le désordres.
pour trim je vais me documenter, ça je sais faire, et je pourrais virer cette fonction.

Pour ce qui est du luxe du JS, je suis bien d'accord, ce n'est pas ma la chose importante d'un formulaire, et il m'est évident que c'est le php de traitement qui dois être béton et que je ne dois absolument pas me reposer sur JS. Bien que je ne maitrise pas la console su google, j'ai bien compris qu'il était facile de piloter un script via celle-ci. Mon tout premier formulaire n'était pas béton et par chance avant qu'il se fasse bouffer, je suis tomber sur des tutos expliquant l'injection et j'ai corrigé le tire.

J'utilise PDO depuis 1 ans, bien que je ne maitrise pas, j'arrive à mes fins en général. Quand tu dis "et toujours en séparant la requête des valeurs" par contre j'ai un doute, voici le genre de requéte que je fait

$sql = "INSERT INTO `enr_cil_pilot_op` VALUES ('','','$t_cil_pilote[pilotid]','a', '$libellé1','' , '$somme', '$time')";    
                                                                                    $req = $DBPDO ->query($sql);

je pense que tu parles plutôt de requêtes préparés, si c'est le cas je vais devoir me forcé, car à mes début de PDO je me suis faché avec cette méthode.

Et là où je coince par contre, mais il est fort possible que j'ai compris de travers, tu penserais que je devrait faire tourner mes autre application sur table user du php_BB?

C'est application ne sont pas de moi, ce sont de vrai application et pas d’infâme bidouillage de ma pomme et je n'ai pas la capacité de les modifier pour quelle viennent s'alimenter sur la table user du forum, c'est pour ça que je souhaite faire un formulaire unique, j'ai observé le comportement global des app pour savoir à peu prés comment créer de nouveaux utilisateur.

Je vais étudier tout ça et je vais revenir.

Oui, pour PDO je parle des requêtes préparées. Force-toi a n'utiliser que cela a travers tout ton site (et pas seulement suite a des inputs d'utilisateurs) pour un maximum de sécurité.

Pour ce qui est de la bdd j'avais compris que les 3 autres appli étaient de ton cru ... effectivement il faudrait mettre les mains dans le camboui pour les modifier ... mais alors du coup je pige pas bien comment tu veux faire en sorte de synchroniser tout le monde ...

flo3376
Auteur

juste pour montré que je suis pas sourd, enfin pas totalement, voici juste la première pierre de ma page de traitement, mod diag bien entendu sinon il y aurai des echos en trop

<?php 
include ($_SERVER"DOCUMENT_ROOT"].'/site/public/register/recaptchalib.php');
 ?>
<pre><?php var_dump($_POST); ?></pre>
<?php 
if (!empty($_POST))
    {
        $retour=recaptcha_check_answer(' ******************************************',$_SERVER'REMOTE_ADDR'],$_POST'recaptcha_challenge_field'],$_POST'recaptcha_response_field']);
        if ($retour->is_valid)
            {
                echo "ok";
                foreach ($_POST as $key => $value) 
                    {
                        echo "Clé : $key; Valeur : $value<br />\n";
                        $pattern='/<.*>.*<\/.*>/';
                        $replacement = '';
                        echo $_POST$key]=htmlentities(trim(preg_replace($pattern, $replacement, $value)));
                        echo "<br>";
                    }
                extract($_POST);
            }
        else {echo "pas ok<br>";}
    }
else
    {
        ?><div class="well" >Données du formulaire non conformes</div><?
        exit();
    }

donc je pense pour le moment que mes valeurs, sont saines, pas conforme encore au attente, les vérifs viennent aprés. Suis je de retour dans le droit chemin "smyley sourrie" (on ne se moque pas je suis incapable de le faire ici)