Je veux envoyer, à partir d'un site html jquery, un score dans une base de données mysql et afficher les meilleurs scores.
1) Pour l'envoi du formulaire j'ai utilisé http://chez-syl.fr/2012/01/envoyer-u...query-et-json/ qui ne pose pas de problème. Les données sont bien lues par le fichier php.
2) Je voudrai traiter ces données pour les intégrer dans la base de données mysql.
Mon problème : séparément, les 2 parties fonctionnent mais ensemble cela ne marche pas (voir codes 3) ! Mon code php ouvre la base de données mais n'arrive pas à la lire.
Donc mes codes :
1) envoi du formulaire :
a) page html avec ajax et formulaire (certains champs sont cachés car donnés par le jeu)
Code html : 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 <!DOCTYPE html> <html><head> <meta http-equiv="content-type" content="text/html; charset=windows-1252"> <title>Envoi d'un formulaire en Ajax avec jQuery</title> <link rel="stylesheet" href="css/styles.css"> <link rel="stylesheet" href="css/buttons.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <!-- Emplacement du script --> </head> <body> <h2>Envoi d'un formulaire en Ajax avec jQuery</h2> <!-- cest laction du formulaire qui indique la page où on doit aller, pour rester sur la même page "" --> <form id="monForm" action="envoi-formulaire.php" method="post"> <!-- éléments cachés --> <div class="element"> <input id="niveau" name="niveau" type="hidden" value="0" /> </div> <div class="element"> <input id="score" name="score" type="hidden" value="110240" /> </div> <div class="element"> <input id="date" name="date" type="hidden" value="7-5-2015" /> </div> <!-- éléments visibles --> <div class="element"> <label for="pseudo">Pseudo :</label> <input id="pseudo" name="pseudo" type="text"> </div> <div class="element"> <label for="motdepasse">Mot de passe :</label> <input id="motdepasse" name="motdepasse" type="text"> </div> <div class="element"> <label> </label> <a href="#" class="awesome green" id="envoyer">Envoyer</a> </div> </form> <div id="divreponse"> </div> </body></html><br><br>b) le code du fichier envoi-formulaire.php appelé par l'envoi du formulaire
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 <script> $(document).ready(function() { var $form = $('#monForm'); $('#envoyer').on('click', function(e) { $form.trigger('submit'); return false; }); $form.on('submit',function(e) { e.preventDefault(); // empêcher le comportement par défaut var $this = $(this); // L'objet jQuery du formulaire var niveau = $('#niveau').val(); var score = $('#score').val(); var date = $('#date').val(); var pseudo = $('#pseudo').val(); var motdepasse = $('#motdepasse').val(); // 1ère vérification var lareponse = ""; if(pseudo == '' || motdepasse == '') { alert('Les champs doivent être remplis'); } else { $.ajax({ url: $(this).attr('action'),// Le nom du fichier indiqué dans le formulaire type: $(this).attr('method'),// La méthode indiquée dans le formulaire data: $(this).serialize(), // Je sérialise les données (j'envoie toutes les valeurs présentes dans le formulaire) dataType: 'json', success: function(json) { lareponse = json.reponse; $('#divreponse').html( lareponse); } }); } return false; }); }); </script>
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php error_reporting (E_ALL); // analyse de l'envoi if(isset($_POST['niveau']) && isset($_POST['score']) && isset($_POST['date']) && isset($_POST['pseudo']) && isset($_POST['motdepasse'])) { if(($_POST['pseudo'] !== '') && ($_POST['motdepasse'] !== '')) { $meilleurs = 'Niveau : ' . $_POST['niveau'] . ' score : ' . $_POST['score'] . '.'; } else { $meilleurs = 'Les champs sont vides.'; } } else { $meilleurs = 'Tous les champs ne sont pas parvenus.'; } echo json_encode(['reponse' => $meilleurs ]); ?>
2) ajouter des données à la base mysql par php (fonctionne seul)
Code php : 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 <?php try{ $bdd = new PDO('mysql:host=localhost;dbname=suites;charset=utf8', 'root', 'root'); } catch(Exception $e){ die('Erreur : '.$e->getMessage()); } echo ' je lis la base de données. '; // On ajoute une entrée dans la table Suites0 $bdd->exec('INSERT INTO suites0(date, identifiant, motdepasse, score) VALUES("2015-05-06", "gracile", "motdepasse","255452")'); // récupérer les données $reponse = $bdd->query('SELECT score, identifiant, date FROM suites0 ORDER BY score DESC LIMIT 0,20'); echo ' je vais chercher les meilleurs scores.'; // afficher les 20 meilleurs scores $meilleurs = "Les 20 meilleurs scores :<br>"; while ($donnees = $reponse->fetch()){ $meilleurs = $meilleurs . $donnees['score'] . "  " . $donnees['identifiant']. " " . $donnees['date'] . "<br>"; } $reponse->closeCursor(); // Termine le traitement de la requête echo $meilleurs; ?>
3) le code envoi-formulaire.php qui ne fonctionne pas lorsque j'essaie de combiner les 2 (bloque après la ligne "ouverture la bdd ok") ; est appelé par le fichier envoi-formulaire.html précédent.
Code php : 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 <?php error_reporting (E_ALL); // analyse de l'envoi if(isset($_POST['niveau']) && isset($_POST['score']) && isset($_POST['date']) && isset($_POST['pseudo']) && isset($_POST['motdepasse'])) { if(($_POST['pseudo'] !== '') && ($_POST['motdepasse'] !== '')) { $meilleurs = 'Niveau : ' . $_POST['niveau'] . ' score : ' . $_POST['score'] . '.'; $ok = "vrai"; } else { $meilleurs = 'Les champs sont vides.'; $ok = "faux"; } } else { $meilleurs = 'Tous les champs ne sont pas parvenus.'; $ok = "faux"; } echo $meilleurs. " ok=".$ok; // si $ok == vrai if ($ok == "vrai") { // lire la base de données try { $bdd = new PDO('mysql:host=localhost;dbname= suites','root','root', 'array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)'); } catch(Exception $e) { die('Erreur : ' . $e->getMessage()); $meilleurs = "Erreur de lecture de la base de données."; } echo ' Ouverture de la bdd ok'; // ajouter le score $bdd->exec('INSERT INTO suites0(date, identifiant, motdepasse, score) VALUES($_POST[\'date\'], $_POST[\'pseudo\'], $_POST[\'motdepasse\'],$_POST[\'score\'])'); // récupérer les données $reponse = $bdd->query('SELECT score, identifiant, date FROM suites0 ORDER BY score DESC LIMIT 0,20'); echo ' je vais chercher les meilleurs scores.'; // afficher les 20 meilleurs scores $meilleurs = "Les 20 meilleurs scores :<br>"; while ($donnees = $reponse->fetch()){ $meilleurs = $meilleurs . $donnees['score'] . "  " . $donnees['identifiant']. " " . $donnees['date'] . "<br>"; } $reponse->closeCursor(); // Termine le traitement de la requête echo $meilleurs; } echo json_encode(['reponse' => $meilleurs ]); ?>
Partager