IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Bataille en php ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut Bataille en php ?
    Bonjour,
    je suis entrain de développer une petite application web, afin de ne pas trop perdre la main.
    J'aimerais donc avoir 2 cartes de jeu retournées (valeur invisible), et retourner les cartes lorsqu'on clique dessus. Les valeurs des cartes sont tirées aléatoirement (rand(1,32)).
    Mais je ne vois vraiment pas comment coder ceci en php.
    Il y aurait-il une solution, ou alors suffit-il d'afficher la valeur des cartes en position absolue lors du clique ?
    Merci d'avance pour vos réponses,
    Cordialement

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Tu veux faire ça en PHP brut ou avec du JavaScript par dessus ?

    Pour faire un deck de cartes, j'ai une fonction pour ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /**
     * @brief Calculates the cartesian product of any number of array in parameter
     *
     * @ingroup Functions
     * @param mixed $a
     * @param mixed $b [...]
     * @return array
     */
    function array_cartesian_product () {
        if (!$c = func_num_args())
            return array();
     
        if ($c == 1) {
            foreach ((array)func_get_arg(0) as $v)
                $r[] = (array)$v;
            return $r;
        }
     
        $a = func_get_args();
        $f = array_shift($a);
        $s = call_user_func_array(__FUNCTION__, $a);
     
        foreach ((array)$f as $v) {
            foreach ($s as $w) {
                array_unshift($w, $v);
                $r[] = $w;
            }
        }
     
        return $r;
    }
     
    $colors = array('Pique', 'Coeur', 'Carreau', 'Trèfle');
    $values = array_merge(range(2,10), array('Valet', 'Dame', 'Roi', 'As'));
     
    // créer le jeu de cartes
    $deck = array_map('implode', array_cartesian_product($values, ' de ', $colors));
     
    // mélanger
    shuffle($deck);
     
    // tirer deux cartes
    var_dump( array_pop($deck) );
    var_dump( array_pop($deck) );

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonjour, et merci de votre réponse.
    Je n'ai encore jamais fait de JS, mais si besoin, je peux m'y mettre.
    Le but et vraiment d'avoir plusieurs cartes sur la table, et de retourner ces cartes(par cliue dessus), afin de découvrir la valeur de la carte choisie

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Mais je ne vois vraiment pas comment coder ceci en php.
    Si tu n'arrives pas à l'imaginer, c'est parce que PHP n'est pas vraiment fait pour ça. Que ton jeu soit en multijoueur et qu'il te faille un serveur pour assurer le lien entre deux joueurs, pourquoi pas. Mais pour l'interface utilisateur, JavaScript est bien plus adapté (surtout au niveau des interactions qui sont beaucoup plus aisées à réaliser).

    Tu en es ou dans le développement ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    En ce qui concerne le développement, j'ai imaginé le jeu sur papier, dessiné les fenêtre à la main, pour avoir une idée du rendu, et fait le système de session.
    Etant entrain de développez une autre application en parallèle, je code le jeu lorsque j'ai un peu de temps. Le jeu ne semble vraiment pas compliqué (même pas de multijoueur pour le moment).

    Pour simplifier, j'ai ma fenêtre dans laquelle j'aimerais avoir des cartes (face cachée), et en cliquant dessus elles devraient se retourner, et dévoiler leurs valeurs (Un peu comme un mémory si on veut). Après je mettrai plusieurs cartes bien-sur, mais pour commencer, deux me semble pas trop mal

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ok, c'est déjà un bon début. Prochaine étape: la state machine. N'importe quel jeu de cartes peut être modélisé avec une state machine. Fais donc quelques diagrames

    Note que compte tenu de la nature du langage, tu vas devoir trouver un moyen de sauvegarder ton automate donc y'a de la sérialisation à prévoir

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    D'accord,
    merci pour votre réponse.
    Je vais donc me renseigner à ce sujet des que possible.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Ne voyant pas vraiment comment faire ce jeu, en automate,
    j'ai un peu réfléchi sur une technique.
    J'ai trouvé une solution, peu orthodoxe.
    En effet j'ai créé un formulaire/bouton,avec une image en fond (carte retournée).
    Et en cliquant sur la carte, je récupère une valeur aléatoire (1 ou 2 pour commencer), ce qui va me permettre de retourner la carte en fonction de la valeur aléatoire.

    Voici le code :
    PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $classe= 'dos';
    	 $classe2 = 'dos';
     
    if (isset($_POST['carte1'])) {
    		$classe='carte1';
    	}
     
    	if (isset($_POST['carte2'])) {
    		$classe='carte2';
    	}
     
    echo '<div class="'.$classe.'"><form method="POST" action="accueil.php">',(fd_form_input(APP_Z_SUBMIT, 'carte'.$v1, '','', 'class="bouton"')),'</form></div>';
    CSS:
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    .carte1 	input[type=submit]{
    	margin-left: 350px;
    	background:url(../images/carte1.jpg) no-repeat;
    	width: 67px;
    	height: 100px;
    	cursor: pointer;
    	border:0;
    }
     
    .carte2 	input[type=submit]{
    	margin-left: 350px;
    	background:url(../images/carte2.jpg) no-repeat;
    	width: 67px;
    	height: 100px;
    	cursor: pointer;
    	border:0;
    }
     
    .dos input[type=submit]{
    	margin-left: 350px;
    	background:url(../images/doscarte1.jpg) no-repeat;
    	width: 67px;
    	height: 100px;
    	cursor: pointer;
    	border:0;
    }

    Avec la fonction fd_form_input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function fd_form_input($type, $name, $value, $size=0, $libre) {
    	$value = htmlentities($value,ENT_COMPAT,'UTF-8'); 
    	$size = ($size == 0) ? '' : "size='{$size}'";
    	return "<input type='{$type}' name='{$name}' {$size} value=\"{$value}\" {$libre}>";
    }
    Ceci est fonctionnel pour une carte, dont la valeur est comprise entre 1 et 2.
    Mais pour 50 cartes

  9. #9
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    peu orthodoxe en effet...

    Tiens, voilà des cartes: http://svg-cards.sourceforge.net/

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Merci pour le lien,
    je vais regarder le svg.
    Je ne pensais vraiment pas que se serait un tel "bazar" pour avoir des cartes aléatoires

  11. #11
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Je crois t'avoir donné la méthode pour construire un jeu de cartes plus haut et tirer des cartes. Il te reste à sauvegarder la pile de cartes et à trouver un moyen de les tirer depuis le navigateur.

    tip: avec jQuery c'est facile:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(function () {
        $('#tirer-cartes').click(function () {
            $('#cartes').load('/tirer_cartes.php');
        });
    })

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Oui c'est exacte pour la méthode.
    pour JQuery, ça n'a en effet pas l'air très compliqué.
    Mais ce qui me perturbe un peu, c'est juste que les cartes sont toutes sur le tapis, et que le joueur les retourne une à une.
    Du coup, il n'y a pas vraiment de main... (J'ai mis un exemple en PJ )
    Images attachées Images attachées  

  13. #13
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Aw ok. C'est pas très dur, tu n'as qu'a utiliser un attribut du genre data-card="numero" et faire jouer tout ça en JavaScript.

    Je me répète mais tu y arrivera beaucoup plus facilement avec JS.

  14. #14
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    C'est ce que je pensais aussi.
    Donc je vais devoir prendre un peu de temps pour apprendre les bases du JS, vu que je n'en ai malheureusement encore jamais fait

  15. #15
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonsoir,
    me voila de retour après avoir commencé le JS.
    Afin de me familiariser un peu avec JS, j'ai décidé de reprendre mon formulaire d'inscription, pour le rendre dynamique (script).

    Le truc, c'est que maintenant je ne peux plus passer par PHP pour effectuer mes requête lors u clique sur le bouton submit.

    Voici le code PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
    // Inclusion de la bibliothèque
    	include('bibli_loto.php');
        fd_html_head('Kartelott | Accueil');
     
    if( isset($_POST['submit'])){
    		echo 'tititititititi';
    		}
     ?>   
    		<div id="Aligne">
    			<p> Pour vous inscrire &agrave; <b>Kartelott</b>, veuillez remplir le formulaire ci-dessous</p>
     
    			<form method="POST" action="test.php" id="Formulaire">
     
    			<label class="form_col" for="login">Pseudo : </label>
    			<input name="txtNom" id="login" type="text"/>
    			<span class="tooltip">Le pseudo ne peut pas faire moins de 4 caract&egrave;res ou plus de 30</span>
    			<br /><br />
     
    			<label class="form_col" for="Mail">E-mail : </label>
    			<input name="txtMail" id="Mail" type="text"/>
    			<span class="tooltip">L'adresse mail n'est pas valide</span>
    			<br /><br />
     
    			<label class="form_col" for="Mail2">E-mail : (confirmation) </label>
    			<input name="txtMail2" id="Mail2" type="text" />
    			<span class="tooltip">L'adresse mail doit &ecirc;tre identique &agrave; celle d'origine</span>
    			<br /><br />
     
    			<label class="form_col" for="Pwd1">Mot de passe : </label>
    			<input name="txtPasse" id="Pwd1" type="password" />
    			<span class="tooltip">Le mot de passe ne doit pas faire moins de 4 caract&egrave;res ou plus de 20</span>
    			<br /><br />
     
    			<label class="form_col" for="Pwd2">Mot de passe (confirmation) : </label>
    			<input name="txtVerif" id="Pwd2" type="password" />
    			<span class="tooltip">Le mot de passe de confirmation doit &ecirc;tre identique &agrave; celui d'origine</span>
    			<br /><br />
     
    			<label class="form_col" for="country">Pays : </label>
    			<select name="country" id="country">
    				<option value="none">S&eacute;lectionnez votre pays de r&eacute;sidence</option>
    				<option value="en">Angleterre</option>
    				<option value="us">&Eacute;tats-Unis</option>
    				<option value="fr">France</option>
    				<option value="ot">Autre</option>
    			</select>
    			<span class="tooltip">Vous devez s&eacute;lectionner votre pays de r&eacute;sidence</span>
    			<br /><br />
    			<span class="form_col"></span>
    			<input name="submit" type="submit" value="M'inscrire" class="bouton" />
    			<input type="reset" value="R&eacute;initialiser le formulaire" class="bouton"/>
    			</form>
    			</div>
    		</div>
    	<script src="../JavaScript/inscription.js"></script>
        </body></html>
    Et le JS :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    (function() { // On utilise une IEF pour ne pas polluer l'espace global
     
        // Fonction de désactivation de l'affichage des « tooltips »
     
        function deactivateTooltips() {
     
            var spans = document.getElementsByTagName('span'),
            spansLength = spans.length;
     
            for (var i = 0 ; i < spansLength ; i++) {
                if (spans[i].className == 'tooltip') {
                    spans[i].style.display = 'none';
                }
            }
     
        }
     
     
        // La fonction ci-dessous permet de récupérer la « tooltip » qui correspond à notre input
     
        function getTooltip(element) {
     
            while (element = element.nextSibling) {
                if (element.className === 'tooltip') {
                    return element;
                }
            }
     
            return false;
     
        }
     
     
        // Fonctions de vérification du formulaire, elles renvoient « true » si tout est OK
     
        var check = {}; // On met toutes nos fonctions dans un objet littéral
     
     
        check['login'] = function(id) {
     
            var name = document.getElementById(id),
                tooltipStyle = getTooltip(name).style;
     
            if (name.value.length >= 4 && name.value.length <= 30) {
                name.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                name.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
    	check['Mail'] = function(id) {
     
            var name = document.getElementById('Mail'),
                tooltipStyle = getTooltip(name).style;
     
            if (name.value.length >= 4 && name.value.length <= 30 && name.value.contains('@') && name.value.contains('.')) {
                name.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                name.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
    	check['Mail2'] = function(id) {
     
            var Mail = document.getElementById('Mail'),
                Mail2 = document.getElementById('Mail2'),
                tooltipStyle = getTooltip(Mail2).style;
     
            if (Mail.value == Mail2.value && Mail2.value != '') {
                Mail2.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                Mail2.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
       check['Pwd1'] = function() {
     
            var Pwd1 = document.getElementById('Pwd1'),
                tooltipStyle = getTooltip(Pwd1).style;
     
            if (Pwd1.value.length >= 4) {
                Pwd1.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                Pwd1.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
        check['Pwd2'] = function() {
     
            var Pwd1 = document.getElementById('Pwd1'),
                Pwd2 = document.getElementById('Pwd2'),
                tooltipStyle = getTooltip(Pwd2).style;
     
            if (Pwd1.value == Pwd2.value && Pwd2.value != '') {
                Pwd2.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                Pwd2.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
        check['country'] = function() {
     
            var country = document.getElementById('country'),
                tooltipStyle = getTooltip(country).style;
     
            if (country.options[country.selectedIndex].value != 'none') {
                tooltipStyle.display = 'none';
                return true;
            } else {
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
     
        // Mise en place des événements
     
        (function() { // Utilisation d'une fonction anonyme pour éviter les variables globales.
     
            var Formulaire = document.getElementById('Formulaire'),
                inputs = document.getElementsByTagName('input'),
                inputsLength = inputs.length;
     
            for (var i = 0 ; i < inputsLength ; i++) {
                if (inputs[i].type == 'text' || inputs[i].type == 'password') {
     
                    inputs[i].onkeyup = function() {
                        check[this.id](this.id); // « this » représente l'input actuellement modifié
                    };
     
                }
            }
     
            Formulaire.onsubmit = function() {
     
                var result = true;
     
                for (var i in check) {
                    result = check[i](i) && result;
                }
     
                if (result) {
                    alert('Le formulaire est bien rempli.');
                }
     
                return false;
     
            };
     
            Formulaire.onreset = function() {
     
                for (var i = 0 ; i < inputsLength ; i++) {
                    if (inputs[i].type == 'text' || inputs[i].type == 'password') {
                        inputs[i].className = '';
                    }
                }
     
                deactivateTooltips();
     
            };
     
        })();
     
     
        // Maintenant que tout est initialisé, on peut désactiver les « tooltips »
     
        deactivateTooltips();
     
    })();

    J'ai donc essayer de détecter le bouton submit comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php if(isset ($_POST['submit'])) echo titi ?>
    Mais bien-sur ceci ne fonctionne pas.
    Comment faire alors pour pouvoir déclencher une requête SQL lors du clique sur le bouton ?
    Faut-il passer par AJAX ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    N'y a t'il que Ajax qui permet de lancer une requête sql au clique sur un submit, si le formulaire est dynamisé par du JS ?

  17. #17
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    C'est très attrayant d'avoir un formulaire avec affichage des erreurs immédiat, mais je n'arrive toujours pas à exécuter du SQL derrière

  18. #18
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Citation Envoyé par Bebuck Voir le message
    N'y a t'il que Ajax qui permet de lancer une requête sql au clique sur un submit, si le formulaire est dynamisé par du JS ?
    Oui, il faut utiliser Ajax.

    C'est très attrayant d'avoir un formulaire avec affichage des erreurs immédiat, mais je n'arrive toujours pas à exécuter du SQL derrière
    C'est le script PHP invoqué par la requête Ajax qui fera les requêtes SQL. C'est pas différent de ce que tu fais d'habitude sauf qu'au lieu d'une requête directe, c'est un XHR qui envoie les informations, PHP voit pas la différence.

  19. #19
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonjour,
    me voici de retour, après un long moment pendant lequel mon projet est rester "au placard" !
    Je vais donc essayer de le reprendre (merci les commentaires que j'avais laissé).

    Je crois me souvenir que j'avais un certain problème pour dynamiser mon formulaire (je n'arrivais pas à envoyer des requêtes...)

    Or je viens de me remettre dans le code, et j'ai réussis à créer une page pour s'authentifier, en OHO/HTML/JS, sans problème.

    Ma première question, est donc une question de sécurité...

    Est-il correct de créer un formulaire d'inscription comme suit :

    JS :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    (function() { // On utilise une IEF pour ne pas polluer l'espace global
     
        // Fonction de désactivation de l'affichage des « tooltips »
     
        function deactivateTooltips() {
     
            var spans = document.getElementsByTagName('span'),
            spansLength = spans.length;
     
            for (var i = 0 ; i < spansLength ; i++) {
                if (spans[i].className == 'tooltip') {
                    spans[i].style.display = 'none';
                }
            }
     
        }
     
     
        // La fonction ci-dessous permet de récupérer la « tooltip » qui correspond à notre input
     
        function getTooltip(element) {
     
            while (element = element.nextSibling) {
                if (element.className === 'tooltip') {
                    return element;
                }
            }
     
            return false;
     
        }
     
     
        // Fonctions de vérification du formulaire, elles renvoient « true » si tout est OK
     
        var check = {}; // On met toutes nos fonctions dans un objet littéral
     
     
        check['login'] = function(id) {
     
            var name = document.getElementById(id),
                tooltipStyle = getTooltip(name).style;
     
            if (name.value.length >= 4 && name.value.length <= 30) {
                name.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                name.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
    	check['Mail'] = function(id) {
     
            var name = document.getElementById('Mail'),
                tooltipStyle = getTooltip(name).style;
     
            if (name.value.length >= 4 && name.value.length <= 30 && name.value.contains('@') && name.value.contains('.')) {
                name.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                name.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
    	check['Mail2'] = function(id) {
     
            var Mail = document.getElementById('Mail'),
                Mail2 = document.getElementById('Mail2'),
                tooltipStyle = getTooltip(Mail2).style;
     
            if (Mail.value == Mail2.value && Mail2.value != '') {
                Mail2.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                Mail2.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
       check['Pwd1'] = function() {
     
            var Pwd1 = document.getElementById('Pwd1'),
                tooltipStyle = getTooltip(Pwd1).style;
     
            if (Pwd1.value.length >= 4) {
                Pwd1.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                Pwd1.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
        check['Pwd2'] = function() {
     
            var Pwd1 = document.getElementById('Pwd1'),
                Pwd2 = document.getElementById('Pwd2'),
                tooltipStyle = getTooltip(Pwd2).style;
     
            if (Pwd1.value == Pwd2.value && Pwd2.value != '') {
                Pwd2.className = 'correct';
                tooltipStyle.display = 'none';
                return true;
            } else {
                Pwd2.className = 'incorrect';
                tooltipStyle.display = 'inline-block';
                return false;
            }
     
        };
     
     
        // Mise en place des événements
     
        (function() { // Utilisation d'une fonction anonyme pour éviter les variables globales.
     
            var Formulaire = document.getElementById('Formulaire'),
                inputs = document.getElementsByTagName('input'),
                inputsLength = inputs.length;
     
            for (var i = 0 ; i < inputsLength ; i++) {
                if (inputs[i].type == 'text' || inputs[i].type == 'password') {
     
                    inputs[i].onkeyup = function() {
                        check[this.id](this.id); // « this » représente l'input actuellement modifié
                    };
     
                }
            }
     
            Formulaire.onsubmit = function() {
     
                var result = true;
     
                for (var i in check) {
                    result = check[i](i) && result;
                }
     
                if (result) {
     
    				requete="Log='"+document.Formulaire.txtNom.value+"'";
    				requete=requete + " AND Mail='"+document.Formulaire.Mail.value+"'";
    				requete=requete+ " AND Passwo='"+document.Formulaire.Pw1.value+"'";
    				document.Formulaire.UneRequete.value="INSERT INTO eurouti"+requete;
    				document.Formulaire.submit();
    			}
                return false;
     
            };
     
            Formulaire.onreset = function() {
     
                for (var i = 0 ; i < inputsLength ; i++) {
                    if (inputs[i].type == 'text' || inputs[i].type == 'password') {
                        inputs[i].className = '';
                    }
                }
     
                deactivateTooltips();
     
            };
     
        })();
     
     
        // Maintenant que tout est initialisé, on peut désactiver les « tooltips »
     
        deactivateTooltips();
     
    }
     
     
    )();

    PHP/HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    <?php
    // Inclusion de la bibliothèque
    	include('bibli_site.php');
        fd_html_head('site | Accueil');
     
    if( isset($_POST['submit'])){
    		fdl_add_utilisateur();
    		}
     
    	function fdl_add_utilisateur() {
    		//-----------------------------------------------------
    		// Vérification des zones
    		//-----------------------------------------------------
    		$erreurs = array();
     
    		$txtNom = trim($_POST['txtNom']);
    		$long = strlen($txtNom);
    		if ($long < 4 || $long > 30){
    			$erreurs[] = 'Le nom doit avoir de 4 Ã* 30 caractères';
    		}
     
    		// Vérification du mail
    		$txtMail = trim($_POST['txtMail']);
    		if ($txtMail == '') {
    			$erreurs[] = 'L\'adresse mail est obligatoire';
     
    		} elseif (strpos($txtMail, '@') === FALSE || strpos($txtMail, '.') === FALSE){
    			$erreurs[] = 'L\'adresse mail n\'est pas valide';
    		} else {
    			// Vérification que le mail n'existe pas dans la BD
    			fd_db_open();
     
    			$mail = mysql_real_escape_string($txtMail);
     
    			$S = "SELECT	count(*)
    					FROM	t1
    					WHERE	Mail = '$mail'";
     
    			$R = mysql_query($S) or fd_db_err($S);
     
    			$D = mysql_fetch_row($R);
     
    			if ($D[0] > 0) {
    				$erreurs[] = 'Cette adresse mail est d&eacute;jÃ* inscrite.';
    			}
    		}
    		// Vérification seconde adresse
    		$txtMail2 = trim($_POST['txtMail2']);
    		if ($txtMail != $txtMail2) {
    			$erreurs[] = 'Les adresse e-mails ne correspondent pas';
    		}
    		// Vérification du mot de passe
    		$txtPasse = trim($_POST['txtPasse']);
    		$long = strlen($txtPasse);
     
    		if ($long < 4 || $long > 20) {
    			$erreurs[] = 'Le mot de passe doit avoir de 4 Ã* 20 caractères';
    		}
     
    		$txtVerif = trim($_POST['txtVerif']);
    		if ($txtPasse != $txtVerif) {
    			$erreurs[] = 'Le mot de passe est diff&eacute;rent dans les 2 zones';
    		}
     
    		// Si il y a des erreurs, la fonction renvoie le tableau d'erreurs
    		if (count($erreurs) > 0) {
    			return $erreurs;		// RETURN : des erreurs ont été détectées
    		}
     
    		//-----------------------------------------------------
    		// Insertion d'un nouvel utilisateur dans la base de données
    		//-----------------------------------------------------
    		$txtPasseClean = $txtPasse;
    		$txtPasse = mysql_real_escape_string(md5($txtPasse));
    		$nom = mysql_real_escape_string($txtNom);
    		$txtMail = mysql_real_escape_string($txtMail);
    		$ip = $_SERVER["REMOTE_ADDR"];
     
    		$S = "INSERT INTO t1 SET
    				Log = '$nom',
    				Passwo = '$txtPasse',
    				Mail = '$txtMail'";
     
    		$R = mysql_query($S) or fd_db_err($S);
     
     
    		// Requête de récupération de l'id
    		$SS = 	"SELECT 	ID
    				FROM	t1
    				WHERE Mail= '$mail'";
     
    			$RR=mysql_query($SS) or fd_db_err($SS);
     
    			$DD=mysql_fetch_assoc($RR);
     
    		$id = $DD['ID'];
     
    		// Requête de sauvegarde de l'ip
    		$S2 = "INSERT INTO t2 SET
    				ID = '$id',
    				IP='$ip'";
     
    		$R2 = mysql_query($S2) or fd_db_err($S2);
     
    		//Initialisation des gains
    		$S2 = "INSERT INTO t3 SET
    				ID = $id, 
    				nbGainTot=0,
    				nbGain=0,
    				nbPart=0";
     
    		$R2 = mysql_query($S2) or fd_db_err($S2);
    		//-----------------------------------------------------
    		// Ouverture de la session et redirection vers la page agenda.php
    		//-----------------------------------------------------
    		session_start();
    		$_SESSION['passClean'] = $txtPasseClean;
    		$_SESSION['ID'] = $id;
    		$_SESSION['Log'] = $txtNom;
    		$_SESSION['Mail'] = $txtMail;
     
    		fd_redirige('confirmation.php');
    	}
     ?>   
     
    		<div id="Aligne">
    			<p> Pour vous inscrire &agrave; <b>mon appli</b>, veuillez remplir le formulaire ci-dessous</p>
     
    			<form method="POST" action="test.php" id="Formulaire">
     
    			<label class="form_col" for="login">Pseudo : </label>
    			<input name="txtNom" id="login" type="text"/>
    			<span class="tooltip">Le pseudo ne peut pas faire moins de 4 caract&egrave;res ou plus de 30</span>
    			<br /><br />
     
    			<label class="form_col" for="Mail">E-mail : </label>
    			<input name="txtMail" id="Mail" type="text"/>
    			<span class="tooltip">L'adresse mail n'est pas valide</span>
    			<br /><br />
     
    			<label class="form_col" for="Mail2">E-mail : (confirmation) </label>
    			<input name="txtMail2" id="Mail2" type="text" />
    			<span class="tooltip">L'adresse mail doit &ecirc;tre identique &agrave; celle d'origine</span>
    			<br /><br />
     
    			<label class="form_col" for="Pwd1">Mot de passe : </label>
    			<input name="txtPasse" id="Pwd1" type="password" />
    			<span class="tooltip">Le mot de passe ne doit pas faire moins de 4 caract&egrave;res ou plus de 20</span>
    			<br /><br />
     
    			<label class="form_col" for="Pwd2">Mot de passe (confirmation) : </label>
    			<input name="txtVerif" id="Pwd2" type="password" />
    			<span class="tooltip">Le mot de passe de confirmation doit &ecirc;tre identique &agrave; celui d'origine</span>
    			<br /><br />
     
    			<label class="form_col" for="country">Pays : </label>
    			<select name="country" id="country">
    				<option value="none">S&eacute;lectionnez votre pays de r&eacute;sidence</option>
    				<option value="en">Angleterre</option>
    				<option value="us">&Eacute;tats-Unis</option>
    				<option value="fr">France</option>
    				<option value="ot">Autre</option>
    			</select>
    			<span class="tooltip">Vous devez s&eacute;lectionner votre pays de r&eacute;sidence</span>
    			<br /><br />
    			<span class="form_col"></span>
    			<input name="submit" type="submit" value="M'inscrire" class="bouton" />
    			<input type="reset" value="R&eacute;initialiser le formulaire" class="bouton"/>
    			</form>
    			</div>
    		</div>
    	<script src="../JavaScript/inscription.js"></script>
        </body></html>
    Encore une fois, merci d'avance pour vos réponses, remarques....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 21h08
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 08h45
  3. L'avenir est-il au PHP ?
    Par Manolo dans le forum Langage
    Réponses: 468
    Dernier message: 11/02/2008, 19h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo