Interpréter du Javascript avant de l'insérer dans une BDD

Eléphanteau du PHP | 41 Messages

27 juin 2011, 15:43

Bonjour, pour un limiteur de votes j'utilise Javascript pour récupérer le navigateur et les plugins installés, les insérer dans une base de données puis les comparer lorsque l'utilisateur essaie de voter à nouveau.

Voici le code :

Code : Tout sélectionner

$navigateur = "<script language='Javascript'>document.write(navigator.appCodeName);</script>"; $plugins = "<script language='Javascript'>for(var i=0;i<navigator.plugins.length;i++) { document.write(navigator.plugins[i].filename); }</script>"; $serveur = "<script language='Javascript'>document.write(navigator.userAgent);</script>"; $hash = "$navigateur $serveur $plugins"; $hash = md5($hash); mysql_query("INSERT Into votants (id, hash) values ('', '$hash')") or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
Le problème, c'est que dans ma base j'obtiens "<script language='Javascript'>document.write(navigator.appCodeName);</script>, etc.".

COmment pourrais-je faire pour interpréter le code puis récupérer le résultat pour l'insérer dans la base ?

Merci :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 juin 2011, 21:03

Le javascript s'exécute côté client (c'est le navigateur qui l’interprète), tandis que php s'exécute côté serveur et permet de générer la page qui est ensuite envoyée au navigateur.

Il faut donc le faire en deux temps : afficher une première page à ton utilisateur qui va exécuter le code javascript et transmettre le résultat à php (via un formulaire, une requête ajax, ...) pour faire l'insertion en base sur le serveur
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 41 Messages

28 juin 2011, 19:05

Merci pour ta réponse. Le problème c'est que j'arrive sur ma page par un lien classique, et que je n'ai pas envie de transmettre le hash par l'url. Y'a-t-il un moyen de transmettre la variable de manière cachée sans utiliser de formulaire ? Ou d'interpréter le code (de manière cachée également) et de le transmettre à une variable dans la même page ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 juin 2011, 20:37

En fait ce qu'il te faut dans ce cas, c'est dans ta page commencer par récupérer les valeurs qui t'intéressent dans des variables javascript. A partir de là, tu peux faire appel au serveur de plusieurs manière pour passer ces valeurs.

Tu peux le faire via une requête ajax (un appel au serveur fait en js et dans lequel tu peux passer des paramètres) ou en incluant une iframe ou une image, ou autre dans ta page en passant les paramètres dans l'url avec javascript. L'iframe ferait appel à un script php qui récupérerais les paramètres et les stockerais en base
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...