appel d'une fonction php avec un clic de souris

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Lolo3194
Lézard à collerette
Messages : 244
Inscription : 22 déc. 2004, 08:57

appel d'une fonction php avec un clic de souris

Message par Lolo3194 »

Bonjour,

Je continue mon apprentissage du php, html
et mysql.

A l'aide d'une feuille css, j'ai divisé ma page
en 4 parties : entête, une partie centrale et deux
parties latérales, une à gauche et une à droite.

Pour donner une idée de la chose :
la partie centrale affichera les caractéristiques
d'une personne (photo d'identité, date d'anniversaire,
et plein d'informations).
la partie de gauche affiche les noms des personnes de sexe
masculin.
la partie de droite affiche les noms des personnes de sexe
féminin.

Toutes les données concernant les personnes sont accessibles
à l'aide de tableau donc la clé est le nom de l'individu. Elles
sont extraites d'une base de données MySQL.

J'aimerai que les données de la personne s'affiche dans la partie
centrale quand je clique sur le nom de la personne. C'est à dire que lors du clic, je voudrais transmettre le nom de la personne à une fonction qui affichera les caractéristiques.

Je dois avouer que je n'ai pas trouvé la solution avec mes recherches
sur internet. La seule solution trouvée était de faire afficher une page
html contenant les données et sauvegardée sur mon disque dur.
Cette solution ne me plaît pas, car les données sont dans une base de
données MySQL.

Si vous avez des pistes, je vous en remercie.

Amicalement
Laurent
WindowsXP familial SP3
Thunderbird 3.0 & Firefox 3.5.5
Avast-4.8
jv2759
Tyrannosaurus Rex
Messages : 4161
Inscription : 12 févr. 2004, 14:29

Message par jv2759 »

alors, mois je vois 4 piste :

1) la plus simple, mais la plus lourd en terme de connection. A chaque clic tu recharche la pages.

2) La plus lourd, en terme de téléchargement. A chaque fois tu envois l'integraliter des donner de tout les utilisateur, et avec javascripte et css tu masque affiche un site...

3) La moins belle, tu utilise une iframe et à chaque clic tu recharge la pages du milieux.

4) LA plus insertaine. Je crois qu'en javascripte tu peux faire un appelle à une pages externe, ou alors un truc dans ce genre, ce qui permet de recharger uniquement une partie de la pages...
Inscrit sur la liste des abonner absent...
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Bonjour,
Voilà ce que je ferai personnellement.

Si le nombre d'individus listables n'est pas trop important, j'opterai pour la suggestion 2) de jv2759, c'est à dire que tu construis une page contenant déjà toutes tes "fiches" en consultant ta base de donnée.
Puis par javascript à l'événement onload tu les masques toutes (en affectant une propriété css display: none à chaque fiche), et tu associes à tous tes liens l'id de la fiche correspondante (important, car si javascript est désactivé celà marchera quand même, en menant le visiteur à l'ancre correspondante). Et pour chaque lien, tu rajoutes une fonction javascript associé à onclick qui masque toutes les fiches et affiche celle sélectionnée.

Si le nombres d'individus est conséquent, la solution précédente s'avère vite trés lourde. J'opterai alors pour un mix des suggestions 1) et 4) de jv2759.
Tu construis d'abord une page, sans javascript, ainsi : tu relèves la liste des personnes listables dans ta base, et tu construis tes listes html avec en lien la même page ($_SERVER['PHP_SELF']) et un identifiant en get. ex:
<a href="<?php echo $_SERVER['PHP_SELF'], '?id=', id[$i]; ?>">mr truc</a>
Dans ton script (ta page) tu peux maintenant récupérer en get l'identifiant si il existe et le filtrer puis le traiter. Quelque chose du genre " if isset($_GET['id']) ", pour le filtrer un $id=(int)$_GET['id'];, et tu récupères les infos correspondante dans ta base de donnée.

Quand ton script fonctionne, tu rajoutes du javascript, en te servant de l'objet XmlHttpRequest, attention ce n'est l'approche la plus simple pour un débutant, surtout pour que la solution soit cross browser, cad marche sous tous les navigateurs.
L'idée, c'est que tu associes une fonction js à tous tes liens des listes sur le onclick, qui retourne false pour désactiver la fonction première du lien, et qui appelle un autre script avec des données post ou get. Ce deuxième script (php), récupère l'id de la personne, tire les infos qui correspondent dans la base de données, et affiche non pas toute une page html, mais seulement la portion de la fiche. Et lorsque l'objet XmlHttpRequest récupère cette portion, on l'insère dans la page d'origine (par exemple avec innerHTML).

Ouf, pas simple, mais jouissif. La solution marche si javascript est désactivé (important), et est trés efficace et économique (et élégante) sinon, la portion html est en principe trés légère (en Ko), et le traitement php devrait également être très légèr. La page d'origine n'est évidement pas rechargée à chaque fois.
Un exemple souvent cité de l'utilisation de XmlHttpRequest, est cette page de google :
http://www.google.com/webhp?complete=1&hl=en

Ceci dit, la 2e solution sans javascript, marche de toute façon trés bien.
Lolo3194
Lézard à collerette
Messages : 244
Inscription : 22 déc. 2004, 08:57

Message par Lolo3194 »

Bonjour,

Merci pour vos suggestions.
Depuis mes réflexions et mes recherches m'ont conduit à une idée qui semble recouper l'explication de Martin.
Je compte utiliser un seul script php.
Du style
if (!$id_personne) affichage dans la partie centrale
else affichage dans les barres latérales des noms avec des liens passant comme variable $id_personne au script pour faire afficher les fiches.

Si j'ai des problèmes, je regarderai la solution de martin avec du javascript.
Mes principales questions sont de comprendre et de définir ce qu'est le $id_personne.
Pour placer dans les barres latérales, j'utilise les commandes <div id="droite">, lors du placement des nom, je risque d'être obligé de fermer et d'ouvrir le php très souvent. J'ai peur d'avoir des problèmes d'affichage en particulier que les noms s'écrasent les uns et les autres.

Amicalement
Laurent
WindowsXP familial SP3
Thunderbird 3.0 & Firefox 3.5.5
Avast-4.8
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Quelques remarques :
Si tu récupères $id_personne comme une variable Get, récupère là par le tableau $_GET, et pas directement.
Filtre là pour éviter les attaques sql par injection, si c'est un entier un simple (int)$_GET['id_personne'] suffira.
Mes principales questions sont de comprendre et de définir ce qu'est le $id_personne
A mon avis quelque chose comme la clé primaire de ta table de personne de ta base de données.
je risque d'être obligé de fermer et d'ouvrir le php très souvent
Essaie de séparer le code du traitement php de l'affichage principal de l'html. Par exemple récupère toutes tes données dans un tableau, et affiche ces données par une boucle dans ton html. Ou alors contruit directement cette partie html lors de la récupération des données, dans une variable php, et affiche là au bon endroit dans ton html.
J'ai peur d'avoir des problèmes d'affichage en particulier que les noms s'écrasent les uns et les autres.
Ca c'est seulement un problème html, à toi de faire tes choix.
Si j'ai des problèmes, je regarderai la solution de martin avec du javascript.
Non, non, fait l'inverse, met au point sans javascript, et seulement après tu peux essayer de le rajouter, c'est un confort supplémentaire pour l'utilisateur qui a javascript d'activé, mais çà doit marcher sans ! Sans compter que le javascript que je te propose n'est pas des plus simple pour un débutant, vas y crescendo dans la complexité :wink: .
else affichage dans les barres latérales des noms
Pourquoi pas les afficher dans tous les cas, pour que l'utilisateur puisse visualiser une autre personne directement ?
Lolo3194
Lézard à collerette
Messages : 244
Inscription : 22 déc. 2004, 08:57

Message par Lolo3194 »

Merci Martin pour toutes ces précisions.

Pour le id, je pensais au nom de la personne. Mais la clé principale
de l'enregistrement est une bien meilleur idée.
Je n'avais pas du tout penser à cela.

Tu as raison je créearais obligatoirement les listes latérales.

Amicalement
Laurent
WindowsXP familial SP3
Thunderbird 3.0 & Firefox 3.5.5
Avast-4.8
Lolo3194
Lézard à collerette
Messages : 244
Inscription : 22 déc. 2004, 08:57

Message par Lolo3194 »

Merci à tous ceux qui m'ont aidé.
J'arrive à faire afficher ce que je désire.
Il me reste des problèmes au niveau de la présentation, surtout pour que la partie centrale aie la même taille que les parties latérales.
Je vais me plonger dans mon css.

Merci.

Amicalement
Laurent
WindowsXP familial SP3
Thunderbird 3.0 & Firefox 3.5.5
Avast-4.8
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité