JeuWeb - Crée ton jeu par navigateur
[Résolu][Javascript] Sauvegarder en BDD la position d'un clic de souris - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][Javascript] Sauvegarder en BDD la position d'un clic de souris (/showthread.php?tid=4017)



[Résolu][Javascript] Sauvegarder en BDD la position d'un clic de souris - Quirinus - 29-05-2009

Bonjour à tous,

Comme vous le savez peut-être j'ai entrepris de créer un jeu il y a quelques mois où le déplacement se fait par clic de souris. Problème : je bloque sur l'envoi en AJAX de la valeur X du clic. Et forcement je suis bloqué...

Voici donc une partie de la page de map (ou s'effectue le clic, et donc le déplacement.
Code PHP :
<?php 
function marcher(event)
{
if(
bougeoupas){
bougeoupas= false; //on stoppe un second mouvement
var x = event.clientX-20;//on fixe le X de la souris, qui servira au deplacement

var data = "s1=" +x;

//envoi sous AJAX , mais fait a la truelle
if(window.XMLHttpRequest) // sous FIREFOX
xhr_object = new XMLHttpRequest();
else if(
window.ActiveXObject) // Sous IE de Windaube
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(
false);

xhr_object.open("POST", "positiondansbdd.php", true);
xhr_object.send(data);
if(
xhr_object.readyState == 4) return(xhr_object.responseText);
else return(
false);

//Activation de la fonction graphique de mouvement
deplacer_image(x);
}
[.....]
///je vous épargne le reste du code, comme la fonction de deplacement ^^

<body>


<
div id="onpeutmarcher" style="margin-left:-10px; margin-top:10px; float:left; position:absolute;"><img src="images/fondessai.jpg" OnDblclick="marcher(event);" ></div>
</
body>

Et positiondansbdd.php, où (normalement) la requete de sauvegarde est enregistrée . :
Code PHP :
<?php 
include('mdp.php');

$value=mysql_query("UPDATE jeu_joueur SET joueur_position=".$_POST["data"]."");

Si une bonne âme pouvait m'éclairer, parce que là, je sèche complètement. :heuuu:


RE: [AJAX] Sauvegarder en BDD la position d'un clic de souris - Argorate - 29-05-2009

Salut,

J’ai quelque remarque pour toi:

Tu dis que tu utilises le click pour le déplacement, je ne sais pas si tu as fait gaf mais tu utilise en faite double click "OnDblclick".
Ensuite pour ta requête :
Citation :$value=mysql_query("UPDATE jeu_joueur SET joueur_position=".$_POST["data"]."");
Concaténer du vide à la fin ne sert à rien Wink

Sinon pour ton envoi de valeur, je ne vois pas où est le problème, pourquoi tu ne passe pas l'Ajax en GET et tu envois ta valeur par url?

Où est le problème concrètement?


RE: [AJAX] Sauvegarder en BDD la position d'un clic de souris - Ter Rowan - 29-05-2009

1) vérfier ce que tu envoies dans l'ajax ( un alert (data) ferait l affaire)

2) vérifier que l'ordre ajax est bien envoyer (firebug fait bien ça)

3) vérifier quel est le retour ajax (toujours avec firebug)

4) vérifier dans ton code php ce que contient $_POST (print_r($_POST) )




bon une fois qu'on a dit ça, je n'ai pas testé ton code mais à la lecture ...

var data = "s1=" +x;
xhr_object.send(data);

$value=mysql_query("UPDATE jeu_joueur SET joueur_position=".$_POST["data"]."");

essaie en mettant $_POST["s1"] mais tant qu'à faire...

teste l'existance dans le code des variables post que tu veux utiliser (isset())
contrôle la qualité des variables retournées, là tu as une faille de sécurité

voili voilo


RE: [AJAX] Sauvegarder en BDD la position d'un clic de souris - Quirinus - 30-05-2009

Merci pour vos réponses rapides et précises. Tout d'abord quelques petites réponses : effectivement il s'agit d'un double-clic, et non d'un clic.
Ensuite oui, le problème venait effectivement (en partie) d'une mauvaise passation de données, et comme je ébute en AJAX j'ignore doù elle venait. Du coup j'ai cherché des exemples d'ajax ailleurs et finalement j'ai dégoté un tuto mieux expliqué que celui que j'avais utilisé.

Code final de la page de jeu :
Code PHP :
<?php 
function marcher(event)
{
if(
bougeoupas){
bougeoupas= false; //on stoppe un second mouvement
var x = event.clientX-20;//on fixe le X de la souris, qui servira au deplacement
var xhr = getXhr();//fonction pour configurer l'AJAX
// Ici on va voir comment faire du post
xhr.open("POST","envoibdd.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
xhr.send("position="+x);

//Activation de la fonction graphique de mouvement
deplacer_image(x);
}
Et pour envoibdd.php
Code PHP :
<?php 
if(isset($_POST["position"]))
{
include(
'mdp.php');
$value=mysql_query("UPDATE jeu_joueur SET joueur_position='".$_POST["position"]."' WHERE joueur_id=1");
}

PS :Merci à Ter Rowan pour son conseil sécurité, faute d'inattention de ma part qui aurait pu coûter cher (la sécurisation du site n'est pas mon fort, je le crains...).


RE: [RESOLU]->AJAX : Sauvegarder en BDD la position d'un clic de souris - Holy - 30-05-2009

Autant te dire que si ton fichier envoibdd.php ressemble à ce que tu nous as envoyé, t'es mal barré.

Je ne sais pas comment se présenter ta position, mais tu dois la sécuriser pour éviter les injections SQL (mysql_real_escape_string) et vérifier que le format est correct. Si j'envoie du texte par exemple genre: "ahahah" en tant que $_POST['position'], ça va complètement buger ton jeu.