Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transmission chaine de caracteres Javas cript->PHP

16 réponses
Avatar
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.

10 réponses

1 2
Avatar
Olivier Miakinen
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
<http://faqfclphp.free.fr/#rub2.3>.

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
Avatar
Pascal
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
Avatar
Olivier Miakinen
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
Avatar
Pascal
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
Avatar
Bruno Desthuilliers
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.
Avatar
Denis Beauregard
Le 06 May 2010 17:05:02 GMT, Olivier Miakinen <om+
é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
<http://faqfclphp.free.fr/#rub2.3>.



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
Avatar
Denis Beauregard
Le 06 May 2010 17:05:02 GMT, Olivier Miakinen <om+
é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
<http://faqfclphp.free.fr/#rub2.3>.



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
Avatar
Olivier Miakinen
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
<http://fr.wikipedia.org/wiki/XMLHttpRequest>.

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
Avatar
Mickaël Wolff
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
Avatar
SAM
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 ?
1 2