Transmission chaine de caracteres Javas cript->PHP

Le
Zarak
Bonjour,

J'ai un problème que je vais essayer de résumer simplement : je voudrais
transmettre une chaine de caractère depuis Javascript vers PHP, chaine
qui sera ensuite traitée dans une requête SQL.

La fonction Javascript récupère un évenement clavier, qui est transmis -
avec succès - vers une fonction php "Rechercher" :

/* Fonction Javascript */
function Update(frappe)
{
document.getElementById("textfield").value = "<?php Rechercher('"+frappe+"'); ?>";
}

/* Fonction PHP */
function Rechercher($text)
{
$result = RequeteSQL("SELECT nom FROM table WHERE nom LIKE '$text%' ORDER BY nom");
$ligne = mysql_fetch_array($result);
echo $ligne[0];
}

A partir de là, un truc bizarre se produit : la chaîne est bien transmise, un "echo" peut
le prouver, mais la requête SQL ne renvoit rien. Si je rajoute par exemple au début de la
fonction PHP $text = "V", ça va marcher, la requête SQL va me renvoyer le premier enregistrement
commençant par "V". Si ce même "V" provient du Javascript, 'a marche pu.

Qu'est-ce qui ne fonctionne pas entre Javascript, MySQL et l'appel PHP ? N'y a-t-il pas une
histoire de formatage de chaîne de caractère ou qqch dans le genre ?

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #21698941
Bonjour,

Le 06/05/2010 18:34, Zarak a écrit :

J'ai un problème que je vais essayer de résumer simplement : je voudrais
transmettre une chaine de caractère depuis Javascript vers PHP, chaine
qui sera ensuite traitée dans une requête SQL.



Ok. Le problème -- classique -- est que tu n'as pas encore compris
comment PHP et JavaScript s'articulent : voir par exemple dans la FAQ

En très gros, les étapes sont les suivantes :
1) Le script PHP s'exécute sur le serveur web, et génère la page HTML,
laquelle peut éventuellement contenir du JavaScript (mais bien sûr ce
code n'est pas encore exécutable).
2) La page HTML générée est envoyée au navigateur, et elle est
maintenant une page *statique* du point de vue du serveur (plus aucun
code PHP ne peut s'exécuter).
3) C'est alors que JavaScript peut entrer dans la danse, dans le
navigateur, et récupérer d'éventuels événements clavier. Mais comme dit
ci-dessus PHP n'existe plus ; l'interpréteur PHP sur le serveur a fini
de travailler depuis longtemps, et ne recommencera que pour une *autre*
page web.

La fonction Javascript récupère un évenement clavier, qui est transmis -
avec succès - vers une fonction php "Rechercher" :



Non, tu te trompes. L'événement clavier ne *peut* pas être transmis avec
succès à PHP car il n'y a plus de PHP.

Cordialement,
--
Olivier Miakinen
Pascal
Le #21699991
Zarak a écrit :
Bonjour,



Bonjour,

/* Fonction Javascript */
function Update(frappe)
{
document.getElementById("textfield").value = "<?php
Rechercher('"+frappe+"'); ?>";
}



Je ne comprends pas la cinématique, là.
Qu'est-ce que les balises PHP font dans le corps de la fonction JavaScript ?

Comment les données sont-elles transmises ? (GET, POST, AJAX ?)
Comment sont-elles récupérées dans PHP ?

A partir de là, un truc bizarre se produit : la chaîne est bien
transmise, un "echo" peut
le prouver,



Où se trouve le "echo" lors du test ?
Il manque des détails de fonctionnement pour comprendre, je crois.
J'attends la suite, à moins que d'autres soient plus imaginatifs.

Cordialement,
Pascal
Olivier Miakinen
Le #21702091
Le 06/05/2010 19:18, Pascal a écrit :
Zarak a écrit :
Bonjour,



Bonjour,

/* Fonction Javascript */
function Update(frappe)
{
document.getElementById("textfield").value = "<?php
Rechercher('"+frappe+"'); ?>";
}



Je ne comprends pas la cinématique, là.
Qu'est-ce que les balises PHP font dans le corps de la fonction JavaScript ?



:-D

Il faut lire le code PHP indépendamment du code JavaScript :
<?php Rechercher('"+frappe+"'); ?>

Lors de la génération de la page HTML, on appelle donc la fonction
Recherche() en lui passant une chaîne de 10 caractères qui sont un
guillemet, un plus, six lettres, un plus et un guillemet. En clair,
$text vaut « "+frappe+" ».

La requête SQL est donc :
« SELECT nom FROM table WHERE nom LIKE '"+frappe+"' ORDER BY nom »
(oui, avec deux sortes de guillemets au sein de la même chaîne)

Si, comme on peut le supposer, le echo dans Rechercher() retourne une
chaîne vide, alors le code JavaScript résultant est :
«
function Update(frappe)
{
document.getElementById("textfield").value = "";
}
»

Pas étonnant que ça ne fonctionne pas !

Cordialement,
--
Olivier Miakinen
Pascal
Le #21704421
Olivier Miakinen a écrit :
Il faut lire le code PHP indépendamment du code JavaScript :
<?php Rechercher('"+frappe+"'); ?>



Je m'en doutais un peu, sans approfondir, mais je faisais de la
maïeutique avec mes questions. Il faut que notre ami se creuse pour y
répondre, ça peut l'éclairer.

Cordialement,
Pascal
Bruno Desthuilliers
Le #21709001
Pascal a écrit :
je faisais de la
maïeutique avec mes questions.



Pascal, ce que tu fais chez toi ne regarde que toi, mais ici c'est un
neswgroup sérieux alors par pitié épargne nous le récit de tes turpitudes.
Denis Beauregard
Le #21709011
Le 06 May 2010 17:05:02 GMT, Olivier Miakinen écrivait dans fr.comp.lang.php:

Bonjour,

Le 06/05/2010 18:34, Zarak a écrit :

J'ai un problème que je vais essayer de résumer simplement : je voudrais
transmettre une chaine de caractère depuis Javascript vers PHP, chaine
qui sera ensuite traitée dans une requête SQL.



Ok. Le problème -- classique -- est que tu n'as pas encore compris
comment PHP et JavaScript s'articulent : voir par exemple dans la FAQ



Par curiosité, comment Google fait-il pour réussir cette opération ?
C'est du java qui appelle le serveur à chaque saisie d'un caractère ?

Le code de la page de Google est très compliqué et il y a beaucoup de
javascript et un .js avec un nom aléatoire. Mais pas de php dans ce
code... Une question pour le forum des auteurs ? (suivi en
conséquence)


Denis
Denis Beauregard
Le #22036701
Le 06 May 2010 17:05:02 GMT, Olivier Miakinen écrivait dans fr.comp.lang.php:

Bonjour,

Le 06/05/2010 18:34, Zarak a écrit :

J'ai un problème que je vais essayer de résumer simplement : je voudrais
transmettre une chaine de caractère depuis Javascript vers PHP, chaine
qui sera ensuite traitée dans une requête SQL.



Ok. Le problème -- classique -- est que tu n'as pas encore compris
comment PHP et JavaScript s'articulent : voir par exemple dans la FAQ



Par curiosité, comment Google fait-il pour réussir cette opération ?
C'est du java qui appelle le serveur à chaque saisie d'un caractère ?

Le code de la page de Google est très compliqué et il y a beaucoup de
javascript et un .js avec un nom aléatoire. Mais pas de php dans ce
code... Une question pour le forum des auteurs ? (suivi en
conséquence)


Denis
Olivier Miakinen
Le #22036691
Le 06/05/2010 23:52, Denis Beauregard a écrit :

[faire des requêtes au serveur au fur et à mesure de la saisie]





Par curiosité, comment Google fait-il pour réussir cette opération ?
C'est du java qui appelle le serveur à chaque saisie d'un caractère ?



Du Java, ça m'étonnerait. À mon avis ça doit être plutôt du JavaScript
avec XMLHttpRequest, plus communément appelé AJAX. Voir par exemple

Le code de la page de Google est très compliqué et il y a beaucoup de
javascript et un .js avec un nom aléatoire.



Je n'ai pas regardé, mais je veux bien le croire.

Mais pas de php dans ce code...



Tu n'as aucun moyen (ni moi non plus) de savoir quel code est exécuté
côté serveur. Cela pourrait être du PHP, du Perl, un exécutable issu
d'un code source C ou C++, voire du BASIC, du Cobol, du Fortran, ou quoi
que ce soit d'autre.

Cordialement,
--
Olivier Miakinen
Mickaël Wolff
Le #22036681
Le 06/05/2010 23:52, Denis Beauregard a écrit :

Par curiosité, comment Google fait-il pour réussir cette opération ?
C'est du java qui appelle le serveur à chaque saisie d'un caractère ?

Le code de la page de Google est très compliqué et il y a beaucoup de
javascript et un .js avec un nom aléatoire. Mais pas de php dans ce
code... Une question pour le forum des auteurs ? (suivi en
conséquence)



Je ne doute pas que tu as Firebug, et que tu as l'onglet réseau. Tu
verras les requête HTTP qu'il fait. Ces requêtes sont faites un
utilisant XHR en javascript. Du coup, à chaque frappe, il y a un script
ou un CGI qui est requêté.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
SAM
Le #22036671
Le 5/7/10 12:13 AM, Mickaël Wolff a écrit :
Le 06/05/2010 23:52, Denis Beauregard a écrit :

Par curiosité, comment Google fait-il pour réussir cette opération ?
C'est du java qui appelle le serveur à chaque saisie d'un caractère ?

Le code de la page de Google est très compliqué et il y a beaucoup de
javascript et un .js avec un nom aléatoire. Mais pas de php dans ce
code... Une question pour le forum des auteurs ? (suivi en
conséquence)



Je ne doute pas que tu as Firebug, et que tu as l'onglet réseau. Tu
verras les requête HTTP qu'il fait. Ces requêtes sont faites un
utilisant XHR en javascript. Du coup, à chaque frappe, il y a un script
ou un CGI qui est requêté.



et ils arrivent à servir instantanément les 900 millions d'internautes
qui tapotent en même temps ?
Publicité
Poster une réponse
Anonyme