Infernus32
Messages postés6Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 1 mai 2008
-
19 juin 2007 à 19:22
Infernus32
Messages postés6Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 1 mai 2008
-
22 juin 2007 à 16:22
Bonjour,
Voilà plusieurs heures que cherche une solution à mon promlème, sans succès !
En fait, mon script récupère la "classe CPU" (c'est à dire 'x86' pour un CPU 32 bits ou 'x64' pour un 64 bits) en JavaScript puis l'ajoute à ma table avec l'heure.
Or le problème est que j'obtiens une erreur SQL : "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Javascript'> document.write(navigator.cpuClass); ')' at line 1".
Alors que lorsque j'ajoute juste la variable 'date' sans la variable 'cpu', ça marche !
J'ai affiché les valeurs de toutes les variables (date, cpu et sql) avec un echo mais tout à l'air bon.
Je vois vraiment pas pourquoi ça bug, ça vient peut être du JS ???
Merci de m'éclairer un peu car là je comprend plus rien
the_wwt
Messages postés177Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention16 janvier 20091 21 juin 2007 à 17:11
Bonjour,
et bien c'est plutôt évident le message correspond...Tu as des quote dans ta variable cpu...
Je crois qu'il existe une fonction du genre escape_quote...
En fait ta requete est celle ci:
INSERT INTO ltable (date,cpu) VALUES('date('U')','<script language='Javascript'> document.write(navigator.cpuClass); </script>')
Donc je pense que ça ne peux pas marcher...
Cdlt,
Pierrick
Infernus32
Messages postés6Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 1 mai 2008 22 juin 2007 à 12:02
Merci de ta réponse. J'ai donc enlevé les quote aux extrémités de la variable cpu.
La requete ne renvoie plus d'erreur mais lorsque je regarde ce qui a été stocké dans la table, ce n'est pas la valeur de la variable cpu mais la ligne de code JS, c'est à dire ça : "<script language='Javascript'> document.write(navigator.cpuClass); </script>" alors qu'il devrait y avoir "x86" par exemple.
Avez vous une idée pour éviter ce problème, ou existe une autre méthode pour récupérer une variable JavaScript en PHP ?
the_wwt
Messages postés177Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention16 janvier 20091 22 juin 2007 à 14:19
Bonjour,
je crois que tu te trompes profondément...
Le code javascript contenu dans ta variable cpu - s'il est envoyé sur la page du client - écrit dans le document la classe du CPU.
Mais toi tu ne récupères jamais cette information en php... Tu saisis?
Il te faut envoyer cette info dans une requete au serveur soit en ajax soit en redirigeant l'utilisateur vers une page en php à laquelle tu lui donne en paramètre. Dans cette page, tu récupères ce paramètre et là tu execute ton insert...
Si tu débutes...bon courage.
Cdlt,
Pierrick
Infernus32
Messages postés6Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention 1 mai 2008 22 juin 2007 à 16:22
Je crois avoir compris pourquoi mon code n'avait aucune chance de fonctionner : le JS est exécuté chez le client et le serveur ne peut donc pas connaître la valeur de la variable cpu, c'est bien ça ?
J'ai donc suivi ton conseil d'envoyer la valeur de la variable cpu en paramètre, mais j'ai utilisé la méthode POST et non GET pour que ce soit plus "transparant" (c'est à dire que la variable cpu ne soit pas affichée dans l'url).
Malheureusement, j'obtiens toujours une erreur de syntaxe lors de la requete !
Voici le code :
<?php
$add = (isset($_POST['add']))?$_POST['add']:0; // on récupère l'éventuelle variable postée
if($add==0)
{
?>
<form name="form" method="post" action="">
document.write(navigator.cpuClass); </script>">
</form>
<?
}
else
{ // ajout des infos à la table
// on récupère les infos
$date = date('U');
$cpu = (isset($_POST['cpu']))?$_POST['cpu']:"Inconnu";
include "sql.php";
$sql = "INSERT INTO table (date,cpu) VALUES ('$date','$cpu')";
mysql_query($sql) or die('Erreur SQL !
'.mysql_error()); // erreur de syntaxe lors de cette requete