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>
    <!-- c’est l’action 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>&nbsp;</label>
            <a href="#" class="awesome green" id="envoyer">Envoyer</a>
        </div> 
    </form>
    <div id="divreponse"> </div>
</body></html><br><br>
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>
b) le code du fichier envoi-formulaire.php appelé par l'envoi du formulaire
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'] . '&nbsp;&nbsp;&nbsp; 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'] . "&nbsp;&nbsp;&nbsp;&nbsp" . $donnees['identifiant'].  "&nbsp;&nbsp;&nbsp;&nbsp; " . $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'] . '&nbsp;&nbsp;&nbsp; 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'] . "&nbsp;&nbsp;&nbsp;&nbsp" . $donnees['identifiant'].  "&nbsp;&nbsp;&nbsp;&nbsp; " . $donnees['date'] .  "<br>";
	}
	$reponse->closeCursor(); // Termine le traitement de la requête
 
echo $meilleurs;
}
echo json_encode(['reponse' => $meilleurs ]);
?>