Bonjour,
C'est peut-être une question un peu C... mais je sèche depuis ce matin:

J'ai une page1 qui permet d'acceder à une page2 pour envoyer un mail

je veux faire passer des variables en hiden

comme ce lien se trouve dans une liste dont l'esthétique est déjà défini en texte je voudrais donc qu'il ait la tête suivante [envoyer un mail] (ouais je sais c'est pas bien compliqué)
le PB c'est que pour faire passer mes variables, je fais un formulaire avec des champs cachés qui me donne un bouton d'input
Peux-je le remplacer par un bête texte et comment ?

Précisons que je ne veux pas faire un lien php avec ces longues variables pleines de carractères spéciaux en URL

Merci

Hugues
Modifié par papa22 (11 Jun 2008 - 16:15)
Salut,

Réponse 1 : il ne faut pas faire ça. En terme d'ergonomie et d'accessibilité, c'est vraiment pas top, mais on peut, avec javascript, si on aime se compliquer la vie pour pas grand chose.
Réponse 2 : faire un bouton, et le styler avec CSS. (retirer les bords, le fond, et le souligner éventuellement).
Modifié par Lanza (11 Jun 2008 - 18:31)
Lanza a écrit :


Réponse 1 : il ne faut pas faire ça. En terme d'ergonomie et d'accessibilité, c'est vraiment pas top, mais on peut, avec javascript, si on aime se compliquer la vie pour pas grand chose.


Désolé J'insiste

Ce n'est pas une question d'ergonomie du submit puisqu'il s'agit que de faire passer un texte en variable dans la page destinatrice (ce n'est pas un formulaire)

Pour poser la question différemment comment puis-je faire passer une variable simplement en cache d'une page à une autre sans passer par l'url (et en evitant les sessions SVP) avec un lien hypertexte

Merci
h
papa22 a écrit :
Désolé J'insiste

C'est que c'est têtu ces petites bêtes-là. Smiley lol

papa22 a écrit :
Ce n'est pas une question d'ergonomie du submit puisqu'il s'agit que de faire passer un texte en variable dans la page destinatrice (ce n'est pas un formulaire)

Le texte est tapé ou modifié par le visiteur? Si c'est le cas, alors c'est un formulaire, quel que soit le style qu'on donne à l'élément de validation.
Si c'est un texte déjà en base de données, il suffit de faire passer un paramètre en GET.

papa22 a écrit :
Pour poser la question différemment comment puis-je faire passer une variable simplement en cache d'une page à une autre sans passer par l'url (et en evitant les sessions SVP) avec un lien hypertexte

Alors si je lis bien:
1. Sans passer par l'URL, donc pas de contenu en GET, et pas de variable en GET pour pointer vers un texte déjà enregistré.
2. Sans formulaire, donc pas en POST non plus.

Je dirais qu'il te reste la prière et l'opération du saint-esprit. Smiley cligne Ou à la rigueur un bidouillage en JavaScript, histoire de faire quelque chose de pas accessible.

À vue de nez, je dirais qu'un formulaire en post (avec élément BUTTON pour la validation) est la marche à suivre. Maintenant, il est possible que tu aies des contraintes ou des besoins différents. Auquel cas je serais curieux de savoir lesquels.
Modifié par Florent V. (12 Jun 2008 - 10:42)
a écrit :
C'est que c'est têtu ces petites bêtes-là.


Bon vous énervez pas, Smiley biggrin j'explique Smiley biggrin
J'ai en bas et à droite de cette magnifique page : voir la magnifique page un très joli lien [Envoyer un Email au loueur] dont la charte graphique a été artistement créée en son temps par..... Alsacréation

Pour des raisons de convenances personnelles, j'ai bêtement décidé d'ajouter au message envoyé, un résumé de l'annonce de référence, histoire que ceux qui ont plusieurs maisons à la location(si, si y en a) puissent savoir immediatement de laquelle il s'agit
a écrit :
Darling, la 14827, c'est la remise ou le chateau ?

Comme je ne veux pas requestionné ma base et refaire en page 2 ce que la page 1 à déjà si bien produit, j'ai donc une variable $resume que je fais passer en form hiden,

mais la, problème! Smiley fache :
je me retrouve avec un affreux gros bouton au milieu de mes jolis liens (toujours en bas à droite) voir la pas belle page avec son gros bouton

Je cherche donc une solution pour que ma variable passe avec un clic sur le lien hypertexte ou, à la rigueur, que mon gros bouton ressemble à ces liens
ai-je frappé la bonne porte ?

Merci
h
papa22 a écrit :
Comme je ne veux pas requestionné ma base

De peur qu'elle se fâche? Je crois que la base de données ne se formalisera pas pour si peu. Smiley cligne

papa22 a écrit :
j'ai donc une variable $resume que je fais passer en form hiden

Ça me semble être un dispositif très largement inutile.
Je procéderais ainsi:

1. Sur la page de descriptif, un lien comme actuellement: /SendMail.php?PROPID=44&ANNOID=32
(On peut faire de la réécriture d'URL si on trouve pas ça joli. Ça peut donner une URL du type /envoyer-un-mail-au-loueur/44-32)

2. Sur la page du formulaire de contact, on récupère les deux paramètres, et on interroge la base pour afficher un descriptif court ou la référence de la location (pour que l'utilisateur sache à qui il envoie un mail; oui, il vient de cliquer, mais lui dire explicitement «Vous écrivez à ... au sujet de ...», c'est pas idiot), et on réinjecte ces mêmes paramètres dans le formulaire via des INPUT de type hidden.

3. Le script qui traite le formulaire réinterroge la base (oui, encore!), utilise les paramètres en base pour récupérer les coordonnées mail nécessaires et toutes les informations que l'on voudra ajouter au mail (référence de la location ou descriptif court par exemple), et ajoute ces informations à celles saisies par l'utilisateur.

Et voilà.

papa22 a écrit :
Je cherche donc une solution pour que ma variable passe avec un clic sur le lien hypertexte

Javascript un poil compliqué à mettre en place si on ne connait pas bien, et bien sûr pas accessible. À oublier.

papa22 a écrit :
ou, à la rigueur, que mon gros bouton ressemble à ces liens

Élément BUTTON stylé en CSS, comme indiqué précédemment.
http://www.la-grange.net/w3c/html4.01/interact/forms.html#edef-BUTTON

Quick 'n dirty:
<button style="border: none; background: none; cursor: pointer;"><span style="text-decoration: underline; color: blue;">Envoyer un mail</span></button>

Modifié par Florent V. (13 Jun 2008 - 11:23)
Merci, je vais voir tout ça
ce qui m'embète sur l'interrogation de base c'est que cela me fait interroger deux tables différentes dans la même page ce qui ,parrait-il, n'est pas super propre

En apparté : tes boites à ascenseur pour mettre les codes apparaissent trop petite dans ton messsage pour que le contenu soit visible dans mon navigateur, (IE 7 Vista pack 1) je suis obligé de les selectionner et de les copier coller pour les lire

a+
h
Modifié par papa22 (12 Jun 2008 - 16:08)
Tu ne serais pas en train de détourner une utilisation intelligente des sessions par hasard ? Ca me paraîtrait pourtant tout indiqué ici. De toute façon il n'y a pas 36000 autres solutions pour passer des données d'une page à l'autre sans formulaire ni GET ni POST. IL y a aussi les cookies, mais c'est moins bien pour plus cher !
QuentinC a écrit :
Tu ne serais pas en train de détourner une utilisation intelligente des sessions par hasard ?


peux tu détailler STP

Je ne connais pas trop le principe, mais je sais que je me méfie un peu des sessions car j'en ai déjà dans certaines pages du site et je ne voudrais pas surajouter un élément perturbateur de pages existantes sans le faire exprès, si je peux créer une session entre ces trois seuls pages : annonce-> crea message ->envoi message
en effet ça m'interresse

Pour Florent, ton quick & dirty est plutôt pas mal (voire parfait), sauf 3 points page test
- il ne veut pas s'alligner sur les autres liens et se menage des retraits en hauteur
-la taille des carractères est 2 pt trop haute (dois y avaoir un réglage qqpart)
-plus embêtant, il n'ouvre pas la page cible

(mais là j'ai peut-être un bug dans mon code:
<form action="/SendMail.php" method="post" target="_popup" > 
<input type="hidden" value="<?php print ($ano); ?>" name="ano"> 
<input type="hidden" value="<?php print ($PROPID); ?>" name="PROPID"> 
<input type="hidden" value="<?php print ($IMMOID); ?>" name="ANNOID"> 
<button style="border: none; background: none; cursor: pointer;"><span style="text-decoration: none; color: gray;">[Envoyer un Email au loueur]</span></button></form> 
)


Question bête (c'est pas pour rien que je post dans le forum débutant Smiley cligne ) le POST de php aura le même PB de bouton , non ?
Modifié par papa22 (13 Jun 2008 - 08:57)
papa22 a écrit :
ce qui m'embète sur l'interrogation de base c'est que cela me fait interroger deux tables différentes dans la même page ce qui ,parrait-il, n'est pas super propre

Il parait mal. Ça ne pose aucun problème. Suivant la requête à faire, tu peux faire une jointure ou faire deux requêtes séparés.
Pour information, avec la plupart des CMS afficher une page prend entre 5 et 30 requêtes. Et ça peut se faire très vite.

papa22 a écrit :
En apparté : tes boites à ascenseur pour mettre les codes apparaissent trop petite dans ton messsage pour que le contenu soit visible dans mon navigateur, (IE 7 Vista pack 1)

Je décline toute responsabilité en ce qui concerne l'incapacité notoire d'Internet Explorer. Smiley cligne

papa22 a écrit :
- il ne veut pas s'alligner sur les autres liens et se menage des retraits en hauteur
Un peu de padding: 0; margin: 0;, peut-être?
papa22 a écrit :
-la taille des carractères est 2 pt trop haute (dois y avaoir un réglage qqpart)
À régler en CSS.
papa22 a écrit :
- plus embêtant, il n'ouvre pas la page cible
C'est normal, tu n'as pas indiqué que tu voulais un bouton de type "submit". Donc le formulaire n'est pas envoyé. Il fallait lire la doc dont j'avais fourni le lien. Smiley cligne
a écrit :

peux tu détailler STP

Je ne connais pas trop le principe, mais je sais que je me méfie un peu des sessions car j'en ai déjà dans certaines pages du site et je ne voudrais pas
surajouter un élément perturbateur de pages existantes sans le faire exprès, si je peux créer une session entre ces trois seuls pages : annonce-> crea
message ->envoi message
en effet ça m'interresse

Si tu as déjà des session ailleurs sur ton site, techniquement tu ne peux pas en créer une nouvelle uniquement pour deux ou trois pages, si on veut rester simple. Par contre tu n'as aucun risque de perturber quoi que ce soit : il suffit de choisir intelligemment les noms des variables de session que tu vas utiliser, puis de les supprimer quand tu auras terminé ce que tu avais à faire avec. Tu n'as pas à te méfier des sessions, elles sont relativement sûres lorsqu'elles sont employées correctement, elles sont faciles à utiliser, et surtout elles sont adaptées à ce que tu cherches à faire dans ton cas. Là pour le moment, ça ressemble plus à de la magouille qu'autre chose.
La manière de faire est vraiment trop nulle, tu devrais en effet regarder du côté des sessions ou penser ton code de manière plus intelligente mais bon...
Je te donne quand même la réponse à ta question initiale :


<form name="monform" action="" method="post">
<input type="hidden" name="mon_champ" value="inutile"/>
</form>

<a href="javascript:onclick=document.monform.submit();">Mon lien</a>


Le problème c'est que si l'utilisateur a désactivé le javascript sur son navigateur ça ne marchera pas.
D'où l'utilisation d'un input de type button avec un CSS "déshabillant" ou des sessions, ce qui me semble de loin le plus intelligent à faire.
Bonjour,

QualityScript a écrit :
La manière de faire est vraiment trop nulle

La manière de faire en question a déjà été critiquée, en des termes plus constructifs, et peut-être avec un peu plus de tact. Smiley cligne

QualityScript a écrit :
D'où l'utilisation d'un input de type button avec un CSS "déshabillant"

Cela fonctionnera mieux avec un élément BUTTON de type "submit", comme déjà mentionné.

Et parmi les solutions plus élégantes, il y a effectivement les sessions.
Modifié par Florent V. (18 Jun 2008 - 18:28)
Florent V. a écrit :

La manière de faire en question a déjà été critiquée, en des termes plus constructifs, et peut-être avec un peu plus de tact. Smiley cligne

Désolé, je manque de tact quand je vois de la "bidouille" dans le genre Smiley lol
C'est le gros problème avec PHP, c'est un langage simple et abordable pour n'importe qui mais mal maîtrisé on en fait n'importe quoi...

Florent V. a écrit :

Cela fonctionnera mieux avec un élément BUTTON de type "submit", comme déjà mentionné.

Certes, certes, reste à voir si le bouton aura l'apparence d'un lien sur IE Smiley langue

Florent V. a écrit :
Et parmi les solutions plus élégantes, il y a effectivement les sessions.

Non, ce n'est pas une solution plus élégante, c'est LA solution pour le cas présent. Même pour 3 pages, c'est beaucoup plus simple vu qu'il n'a pas besoin d'utiliser d'éléments "interactifs" ou "client", il veut juste conserver des données d'une page à une autre.
Comme dit plus haut également il suffit de bien nommer ses variables de sessions. Et pour ce faire il y a des bonnes méthodes comme utiliser un array pour chaque type d'usage.
exemple :
$_SESSION['user'] = array('id'=>12,'username'=>'Toto');
$_SESSION['data'] = array('ma_variable_1'=>398,'ma_variable_2'=>'blabla');
etc...
Ou mieux encore, on stocke des objets Smiley cligne
QualityScript a écrit :
Non, ce n'est pas une solution plus élégante, c'est LA solution pour le cas présent.

C'est effectivement la solution de choix pour conserver des données d'une page à l'autre. Mais je ne suis pas sûr que «conserver des données d'une page à l'autre» soit la meilleure chose à faire dans le cas qui a été présenté. J'aurais tendance à juste passer un paramètre (identifiant du gite en GET, ici ça me semble tout à fait pertinent), et à réinterroger la base pour récupérer toutes les données que l'on voudra utiliser.
Modérateur
Bonjour,

Je partage aussi l'avis de Florent. Dans le cas ici présenté, il serait tout aussi bien de passer un paramètre dans l'url et de réinterroger la base de données. Si nous stockons les informations dans une session, je vois les soucis suivants :

- Le visiteur ne pourra pas mettre la page du formulaire de contact dans ses marques-pages pour le remplir plus tard. À son retour, la session risque d'être expirée
- Le visiteur ne pourra pas ouvrir plusieurs pages du formulaire à la fois, car l'ouverture de la seconde page écrasera les données de la session stockées par la première page, à moins de structurer adéquatement les sessions pour pouvoir le supporter.
- Advenant le cas où le visiteur ne supporte pas les cookies, comme un robot, les identifiants de session devront être passé dans l'url, ce qui n'est pas très esthétique. Cela pourrait nuire au référencement également.
- À chaque visiteur, qu'il soit un robot ou un humain, des variables de session seront créé et pour la plupart du temps, inutilisées.

Le point 2 est relativement exceptionnel et négligeable, le point 3 reste à vérifier. Pour le 4e point, cela dépend à quel endroit ces données sont stockées en session (en chargeant la fiche du gîte ou après avoir cliqué sur le lien de contact?)

Même si les points mentionnés plus haut ne sont pas majeurs, compte tenu des performances des serveurs et des systèmes de base de données actuels, je ne vois aucun intérêt à utiliser les sessions dans ce cas-ci.
Modifié par Tony Monast (25 Jun 2008 - 15:27)