Traiter formulaire en modele

Bonjour,

Je désire placer sur ma page un formulaire de type <select> pour placer un cookie d'option sur le poste client (largeur de body).

http://bressuire.jce-poitoucharentes.org/
"Largeur de page" en bas à gauche

J'ai créé un modele form-select-largeur-ecran.html avec le formulaire, appelé depuis le squelette par
[(#MODELE{form-select-largeur-ecran})]

Maintenant, où puis-je placer le plus clairement mon script php de traitement du formulaire ?
Autrement dit que vais-je mettre dans action='xxx' de mon formulaire ?

Puis-je appeler directement le modele ??
spip.php?page=form-select-largeur-ecran ?

Merci

--
Stéphane

Jeune Chambre Economique, Mouvement Jeunes Citoyens Entreprenants
  http://www.jce-rochefort.org - http://www.jce-poitoucharentes.org

Loisirs, arts, nature, technologie en Pays Santon
    Accueil en Charente Maritime *** http://www.team-santonum.com
    BTS Electrotechnique *** http://enselec.team-santonum.com

Stéphane Santon a écrit :

Bonjour,

Je désire placer sur ma page un formulaire de type <select> pour placer un cookie d'option sur le poste client (largeur de body).

http://bressuire.jce-poitoucharentes.org/
"Largeur de page" en bas à gauche

J'ai créé un modele form-select-largeur-ecran.html avec le formulaire, appelé depuis le squelette par
[(#MODELE{form-select-largeur-ecran})]

Maintenant, où puis-je placer le plus clairement mon script php de traitement du formulaire ?
Autrement dit que vais-je mettre dans action='xxx' de mon formulaire ?

Puis-je appeler directement le modele ??
spip.php?page=form-select-largeur-ecran ?

il faut faire un #FORMULAIRE_XXX
ton "modele" de formulaire va dans squelettes/formulaires/xxx.html (ou /plugins/xxx/formulaires/xxx.html...)
ton code va dans /balise/formulaire_xxx.php (idem, dans squelette ou dans un plugin)

regarde #FORMULAIRE_ECRIRE_AUTEUR (/ecrire/balise/formulaire_ecrire_auteur.php) , c'est un bon exemple.
il doit y avoir de la doc sur le wiki de spip-contrib aussi je pense.

pour toi, pas besoin de "collecte" (array()), pas de controle dans balise_FORMULAIRE_XXX_stat (eventuellement sur un argument si tu veux passer une valeur par defaut).

ton code va dans balise_FORMULAIRE_XXX_dyn puis tu appelles ton squelette de formulaire en lui passant des parametres que tu veux.

voila, c'est vraiment pas compliqué, il faut juste s'y mettre.

bon courage.
@++

Bonjour,

Punaise il en faut du courage !!

Merci bien pour la piste.

Avant de comprendre que le fichier formulaires/xxx.html n'était pas appelé directement, mais ouvert par formulaire_xxx.php dans lequel il fallait remplacer toutes les occurences "ecrire_auteur" de l'original ...
j'ai ramé à modifier xxx.html sans voir aucun changement...

Je continue avec mon courage...

Stephane a écrit :

Maintenant, où puis-je placer le plus clairement mon script php de traitement du formulaire ?

il faut faire un #FORMULAIRE_XXX
ton "modele" de formulaire va dans squelettes/formulaires/xxx.html (ou /plugins/xxx/formulaires/xxx.html...)
ton code va dans /balise/formulaire_xxx.php (idem, dans squelette ou dans un plugin)

regarde #FORMULAIRE_ECRIRE_AUTEUR (/ecrire/balise/formulaire_ecrire_auteur.php) , c'est un bon exemple.
il doit y avoir de la doc sur le wiki de spip-contrib aussi je pense.

pour toi, pas besoin de "collecte" (array()), pas de controle dans balise_FORMULAIRE_XXX_stat (eventuellement sur un argument si tu veux passer une valeur par defaut).

ton code va dans balise_FORMULAIRE_XXX_dyn puis tu appelles ton squelette de formulaire en lui passant des parametres que tu veux.

voila, c'est vraiment pas compliqué, il faut juste s'y mettre.

bon courage.

--
Stéphane

Jeune Chambre Economique, Mouvement Jeunes Citoyens Entreprenants
  http://www.jce-rochefort.org - http://www.jce-poitoucharentes.org

Loisirs, arts, nature, technologie en Pays Santon
    Accueil en Charente Maritime *** http://www.team-santonum.com
    BTS Electrotechnique *** http://enselec.team-santonum.com

Stéphane Santon a écrit :

Bonjour,

Punaise il en faut du courage !!

Merci bien pour la piste.

Avant de comprendre que le fichier formulaires/xxx.html n'était pas appelé directement, mais ouvert par formulaire_xxx.php dans lequel il fallait remplacer toutes les occurences "ecrire_auteur" de l'original ...
j'ai ramé à modifier xxx.html sans voir aucun changement...

Je continue avec mon courage...

c'est sur que c'est pas tres documenté et je ne trouve plus la main sur la page wiki qui en parlait...

mais sur spip-contrib, il y a Les balises dynamiques - SPIP-Contrib
j'ai aussi trouvé http://www.plugandspip.com/?Creons-des-balises

mais c'est vraiment comme ca qu'il faut faire, c'est d'ailleurs l'API la plus stable de spip...

il faut juste faire un petit effort intellectuel pour s'y mettre, après ca devient vraiment evident et on programme proprement.

@++

Hello bon ça a l’air un peu con mais il y a des univers paranos.
donc un utilisateur me prévient (assez sèchement) que son mail de réponse lui indique le chemin du fichier qu’il a téléchargé et que comme ce malin a mis un nom bateau à son fichier à télécharger (CV.doc pour son CV - original !) et que le dit comique n’est pas le seul dans le cas, son URL est « IMG/protege/form1/CV-2.doc ». Du coup en changeant le 2 par un 1, il a aussi téléchargé le CV d’un autre. CQFD se dit-il et « grosse brêche dans la sécurité » et autre « atteinte à la vie privée ». bref on ne rigole pas chez ces gens là. bon je peux aller virer l’url de la réponse mais je trouve ça con. serait-il possible de prévoir un code aléatoire (genre à 4digit par exemple) qui irait se coller au nom de fichier avant le téléchargement ? je ne suis pas du tout spécialiste de la question…

Sinon le plugin fonctionne à merveille :wink:

NB j’ai posté la question sur spip-contrib itou
Eric

========================================================

Eric Luyckx

METADESIGN

http://www.metadesign.be

201 rue de Hamme-Mille, 1390 Nethen, Belgique

0032 (0)10 861020, 0032 (0)475702942

skype : eric.luyckx

========================================================

Eric Luyckx a écrit :

Hello bon ça a l’air un peu con mais il y a des univers paranos. donc un utilisateur me prévient (assez sèchement) que son mail de réponse lui indique le chemin du fichier qu’il a téléchargé et que comme ce malin a mis un nom bateau à son fichier à télécharger (CV.doc pour son CV - original !) et que le dit comique n’est pas le seul dans le cas, son URL est « IMG/protege/form1/CV-2.doc ». Du coup en changeant le 2 par un 1, il a aussi téléchargé le CV d’un autre. CQFD se dit-il et « grosse brêche dans la sécurité » et autre « atteinte à la vie privée ». bref on ne rigole pas chez ces gens là. bon je peux aller virer l’url de la réponse mais je trouve ça con. serait-il possible de prévoir un code aléatoire (genre à 4digit par exemple) qui irait se coller au nom de fichier avant le téléchargement ? je ne suis pas du tout spécialiste de la question…

ca ne sécuriserait pas beaucoup plus... il suffit de scanner le repertoire.

mais ces docs sont consultables ou ils ne le sont pas ?

si ils ne le sont pas, ou en tous cas qu'avec autorisation, il faut mettre un place un "wrapper", cad une rewrite qui protege ce repertoire en reroutant sur un script qui verifie les droits avant de renvoyer, ou non, le document.

spip contient deja pas mal de choses pour le faire, mais en general, il faut adapter selon les droits d'accès.
il sait aussi generer le fichier .htpassword de admins et des redacteurs, ca peut etre une solution pour limiter les accès (si seuls les redacteurs ont un acces en consultation)

mais pour ce genre de chose, tu peux aussi interdire completement l'acces et envoyer les documents par mail à la demande (et selon autorisation bien sur)

mes 2 sous
@++

je crois que l’esprit du plugin c’est que chacun aie accès à son propre fichier
et pas à ceuce des autres
il n’y a pas de login ni de mdp
on pourrait éventuellement faire une correspondance entre l’email et le doc

Le 24 oct. 07 à 22:01, Stephane a écrit :

mais ces docs sont consultables ou ils ne le sont pas ?

========================================================

Eric Luyckx

METADESIGN

http://www.metadesign.be

201 rue de Hamme-Mille, 1390 Nethen, Belgique

0032 (0)10 861020, 0032 (0)475702942

skype : eric.luyckx

========================================================

Bonjour,

Stephane a écrit :

Les balises dynamiques - SPIP-Contrib
mais c'est vraiment comme ca qu'il faut faire, c'est d'ailleurs l'API la plus stable de spip...

Bon, j'ai créé la balise avec le Select et un bouton Submit.
J'arrive à placer le cookie de largeur dans le code php de la balise :

function balise_FORMULAIRE_SELECT_LARGEUR_BODY ($p) {
   $cookieBodyWidth = $_COOKIE['prefBodyWidth'];
   return calculer_balise_dynamique(
     $p,'FORMULAIRE_SELECT_LARGEUR_BODY', array( $cookieBodyWidth));
}

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_stat($args, $filtres) {
   return $args;
}

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_dyn($cookieBodyWidth ) {

   if (_request( 'submitBodyWidth') == 'Change') {
     $lsBodyWidth = _request( 'selectBodyWidth');
     setcookie( 'prefBodyWidth', $lsBodyWidth, time()+3600*24*365, "/");
     }

   return array('formulaires/select_largeur_body', 0, array( ));
}

Le problème est que le cookie semble posé (exécution de la balise dynamique) après que le début de page est rafraichi.
Donc il faut que je recharge la page pour voir l'effet du cookie posé.

Pour info, la mise en page est assurée par ceci dans le HEAD du squelette :

<?php $lsPrefBodyWidth = $_COOKIE[ 'prefBodyWidth'];
   switch ($lsPrefBodyWidth) {
  case '780px' : $lsStyle = '780px'; break;
  case '80pc' : $lsStyle = '80%'; break;
  case '90pc' : $lsStyle = '90%'; break;
  case '100pc' : $lsStyle = '100%'; break;
  default : $lsStyle = '';
   }
   if ($lsStyle != '') echo <<<BSTY
     <style type='text/css'><!-- body { width: $lsStyle; } --></style>\n
BSTY
;
?>

Bonjour,

Stephane a écrit :

Les balises dynamiques - SPIP-Contrib
mais c'est vraiment comme ca qu'il faut faire, c'est d'ailleurs l'API la plus stable de spip...

Bon, j'ai créé la balise avec le Select et un bouton Submit.
J'arrive à placer le cookie de largeur dans le code php de la balise :

function balise_FORMULAIRE_SELECT_LARGEUR_BODY ($p) {
   $cookieBodyWidth = $_COOKIE['prefBodyWidth'];
   return calculer_balise_dynamique(
     $p,'FORMULAIRE_SELECT_LARGEUR_BODY', array( $cookieBodyWidth));
}

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_stat($args, $filtres) {
   return $args;
}

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_dyn($cookieBodyWidth ) {

   if (_request( 'submitBodyWidth') == 'Change') {
     $lsBodyWidth = _request( 'selectBodyWidth');
     setcookie( 'prefBodyWidth', $lsBodyWidth, time()+3600*24*365, "/");
     }

   return array('formulaires/select_largeur_body', 0, array( ));
}

Le problème est que le cookie semble posé (exécution de la balise
dynamique) après que le début de page est rafraichi.
Donc il faut que je recharge la page pour voir l'effet du cookie posé.

Pour info, la mise en page est assurée par ceci dans le HEAD du squelette :

<?php $lsPrefBodyWidth = $_COOKIE[ 'prefBodyWidth'];
   switch ($lsPrefBodyWidth) {
  case '780px' : $lsStyle = '780px'; break;
  case '80pc' : $lsStyle = '80%'; break;
  case '90pc' : $lsStyle = '90%'; break;
  case '100pc' : $lsStyle = '100%'; break;
  default : $lsStyle = '';
   }
   if ($lsStyle != '') echo <<<BSTY
     <style type='text/css'><!-- body { width: $lsStyle; } --></style>\n
BSTY
;
?>

--
Stéphane

Jeune Chambre Economique, Mouvement Jeunes Citoyens Entreprenants
  http://www.jce-rochefort.org - http://www.jce-poitoucharentes.org

Loisirs, arts, nature, technologie en Pays Santon
    Accueil en Charente Maritime *** http://www.team-santonum.com
    BTS Electrotechnique *** http://enselec.team-santonum.com

Bonjour,

Stéphane Santon a écrit :

function balise_FORMULAIRE_SELECT_LARGEUR_BODY ($p) {
   $cookieBodyWidth = $_COOKIE['prefBodyWidth'];
   return calculer_balise_dynamique(
     $p,'FORMULAIRE_SELECT_LARGEUR_BODY', array( $cookieBodyWidth));
}

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_stat($args, $filtres) {
   return $args;
}

Le problème est que le cookie semble posé (exécution de la balise
dynamique) après que le début de page est rafraichi.
Donc il faut que je recharge la page pour voir l'effet du cookie posé.

Voilà où j'en suis :

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_dyn($cookieBodyWidth ) {
  
   if ( (_request( 'submitBodyWidth') == 'OK') &&
        ( $cookieBodyWidth != _request('selectBodyWidth'))) {

     setcookie( 'prefBodyWidth', _request( 'selectBodyWidth'),
       time()+ 3600 * 24 * 365, "/");

     $lsReferer = $_SERVER[ 'HTTP_REFERER'];
     Header("Location:$lsReferer");
   }

   return array('formulaires/select_largeur_body', 0, array());
}

Referer semble ne marcher qu'avec Firefox...

--
Stéphane

Jeune Chambre Economique, Mouvement Jeunes Citoyens Entreprenants
  http://www.jce-rochefort.org - http://www.jce-poitoucharentes.org

Loisirs, arts, nature, technologie en Pays Santon
    Accueil en Charente Maritime *** http://www.team-santonum.com
    BTS Electrotechnique *** http://enselec.team-santonum.com

Ah oui voilà l'adresse :

http://bressuire.jce-poitoucharentes.org

Stéphane Santon a écrit :

Le problème est que le cookie semble posé (exécution de la balise
dynamique) après que le début de page est rafraichi.
Donc il faut que je recharge la page pour voir l'effet du cookie posé.

Bonjour,

Stéphane Santon a écrit :

   if ( (_request( 'submitBodyWidth') == 'OK') &&
        ( $cookieBodyWidth != _request('selectBodyWidth'))) {

     setcookie( 'prefBodyWidth', _request( 'selectBodyWidth'),
       time()+ 3600 * 24 * 365, "/");

     $lsReferer = $_SERVER[ 'HTTP_REFERER'];
     Header("Location:$lsReferer");
   }

Referer semble ne marcher qu'avec Firefox...

Ca y est ! Ca marche :

function balise_FORMULAIRE_SELECT_LARGEUR_BODY_dyn($cookieBodyWidth ) {
  
   if ( (_request( 'submitBodyWidth') == 'OK') &&
        ( $cookieBodyWidth != _request('selectBodyWidth'))) {
     setcookie( 'prefBodyWidth', _request( 'selectBodyWidth'),
                time()+ 3600 * 24 * 365, "/");
     $lsReferer = self();
     $lsReferer = parametre_url( $lsReferer, 'selectBodyWidth', '');
     $lsReferer = parametre_url( $lsReferer, 'submitBodyWidth', '');
     Header("Location:$lsReferer");
   }

Merci pour votre aide

--
Stéphane

Jeune Chambre Economique, Mouvement Jeunes Citoyens Entreprenants
  http://www.jce-rochefort.org - http://www.jce-poitoucharentes.org

Loisirs, arts, nature, technologie en Pays Santon
    Accueil en Charente Maritime *** http://www.team-santonum.com
    BTS Electrotechnique *** http://enselec.team-santonum.com

Eric Luyckx <eric.luyckx <at> metadesign.be> writes:

Hello bon ça a l’air un peu con mais il y a des univers paranos.
donc un utilisateur me prévient (assez sèchement) que son mail de réponse lui

indique le chemin du fichier qu’il a téléchargé et que comme ce malin a mis un
nom bateau à son fichier à télécharger (CV.doc pour son CV - original !) et que
le dit comique n’est pas le seul dans le cas, son URL est «

IMG/protege/form1/CV-2.doc

Tu as remarqué le nom du sous repertoire ? 'protege' ...
Il faut juste lui mettre un htaccess qui interdise l'acces au repertoire protege.
Tous les documents sont accessibles dans l'interface privée par un wrapper qui
gerer le droit d'acces, justement.

». Du coup en changeant le 2 par un 1, il a aussi téléchargé le CV d’un autre.
CQFD se dit-il et « grosse brêche dans la sécurité » et autre « atteinte à la
vie privée ». bref on ne rigole pas chez ces gens là.

normal ...

Cedric