Formulaire simple CVT

Bonjour,

je viens à vous car je suis entrain de créer mon premier formulaire CVT (il était temps). J’ai beau lire la doc, au niveau du traitement je rame un peu.

J’ai un champ extra : code sur un profil auteur. Je souhaite que l’auteur puisse ajouter un code à une liste déjà existante (chaque code est précédé d’une virgule). Le formulaire PHP est basique je pense qu’il est bon :

#ACTION_FORMULAIRE{#ENV{action}} [] Votre code

Par contre le code de traitement est mauvais. Il me créé à chaque fois un nouvel auteur alors qu’il devrait récupérer l’id de l’auteur qui ajoute son code et ajouter une virgule devant le code + le code.

<?php function formulaires_code_charger_dist(){ $valeurs = array('code'=>''); return $valeurs; } function formulaires_code_traiter_dist(){ $res = array(); $code = _request('code'); include_spip('action/editer_auteur'); if ($id_auteur = insert_auteur()) { auteurs_set($id_auteur,array('code'=>"$code")); $res['message_ok'] = "Enregistrement réussi !"; $res['id_auteur'] = $id_auteur; } else { $res['message_erreur'] = "Un probleme a été rencontré, impossible d'enregistrer votre saisie"; } return $res; } ?>

Merci pour votre oeil expérimentée et votre aide. Il faut que je maîtrise cette partie à présent :slight_smile:

Teenoo

Le 05/10/2020 à 10:48, Laetitia boiron a écrit :

je viens à vous car je suis entrain de créer mon premier formulaire CVT (il était temps). J'ai beau lire la doc, au niveau du traitement je rame un peu.
J'ai un champ extra : code sur un profil auteur. Je souhaite que l'auteur puisse ajouter un code à une liste déjà existante (chaque code est précédé d'une virgule). Le formulaire PHP est basique je pense qu'il est bon :

Non.
Et c'est normal que ça crée un nouvel auteur puisque le php fait systématiquement $id_auteur = insert_auteur();

Un gros pb c'est que ton code ne tient pas compte de l'auteur courant.

Il faut le récupérer par exemple dans $GLOBALS['visiteur_session']
et le transmettre.

Je te met quelques pistes d'améliorations en commentaires dans ton code ci après
mais ce n'est probablement qu'un début :

<form action='#ENV{action}' method='post'>
#ACTION_FORMULAIRE{#ENV{action}}

Pour debug voici l'id_auteur récupéré : "#ENV{id_auteur}"

<input type='hidden' name='id_auteur' value='#ENV{id_auteur}' />
[<input type='hidden' name='redirect' value='(#ENV**{redirect})' />]
<label>Votre code</label>
<input type='text' name='code' value='#ENV{code}' />
<br />

<input type='submit' name='ok' value='ok' />
</form>

Par contre le code de traitement est mauvais. Il me créé à chaque fois un nouvel auteur alors qu'il devrait récupérer l'id de l'auteur qui ajoute son code et ajouter une virgule devant le code + le code.

<?php
function formulaires_code_charger_dist($id_auteur){
$valeurs = array('code'=>'',

/* AJOUTÉ : */ 'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur']
);

return $valeurs;
}

function formulaires_code_traiter_dist(){
$res = array();
$code = _request('code');

include_spip('action/editer_auteur');

/* SURTOUT PAS ÇA > if ($id_auteur = insert_auteur()) ...*/
/* À la place : */
$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];

auteurs_set($id_auteur,array('code'=>"$code"));
$res['message_ok'] = "Enregistrement réussi !";
$res['id_auteur'] = $id_auteur;

return $res;
}

/* PAS DE ?> À LA FIN */

Merci pour votre oeil expérimentée et votre aide. Il faut que je maîtrise cette partie à présent :slight_smile:

Teenoo

Merci de ton aide, je vais tester tout cela :slight_smile:

Teenoo

Bonjour,

Le code marche mieux :slight_smile: Maintenant arrive un point un peu difficile à première vue. Je dois ajouter mon « code » aux codes déjà existant en ajoutant une virgule avant (dans la partie inscription je demande de rajouter une virgule entre chaque code s’il y en a plusieurs). Pour l’instant mon code supprime tous les autres pour s’y ajouter tout seul (il est un poil égoïste). Comment l’aider à interpréter la demande ? Merci pour votre retour ! Ça m’ouvre de nouvelles perspective !

function formulaires_code_traiter_dist(){
$res = array();
$code = _request(‹ code ›);

include_spip(‹ action/editer_auteur ›);
$id_auteur = $GLOBALS[‹ visiteur_session ›][‹ id_auteur ›];
auteur_modifier($id_auteur,array(‹ code ›=>"$code"));

$res[‹ message_ok ›] = « Votre code a été enregistré ! »;
$res[‹ id_auteur ›] = $id_auteur;

return $res;
}

Le 06/10/2020 à 10:10, Laetitia boiron a écrit :

Bonjour,

Le code marche mieux :slight_smile: Maintenant arrive un point un peu difficile à première vue. Je dois ajouter mon "code" aux codes déjà existant en ajoutant une virgule avant (dans la partie inscription je demande de rajouter une virgule entre chaque code s'il y en a plusieurs). Pour l'instant mon code supprime tous les autres pour s'y ajouter tout seul (il est un poil égoïste). Comment l'aider à interpréter la demande ? Merci pour votre retour ! Ça m'ouvre de nouvelles perspective !

Quand tu passes array('code'=>"$code") tu remplaces l'ancien code par le nouveau.
Il faut concaténer
Donc récupères le (tu trouveras bien !) ajoute le : array('code'=>$ancien_code . ',' . $code)
JL

function formulaires_code_traiter_dist(){
$res = array();
$code = _request('code');

include_spip('action/editer_auteur');
$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
auteur_modifier($id_auteur,array('code'=>"$code"));
$res['message_ok'] = "Votre code a été enregistré !";
$res['id_auteur'] = $id_auteur;
return $res;
}

Le lun. 5 oct. 2020 à 13:15, JLuc <jluc@no-log.org <mailto:jluc@no-log.org>> a écrit :

    Le 05/10/2020 à 10:48, Laetitia boiron a écrit :
     > je viens à vous car je suis entrain de créer mon premier formulaire CVT (il était temps). J'ai beau lire la doc, au
     > niveau du traitement je rame un peu.
     > J'ai un champ extra : code sur un profil auteur. Je souhaite que l'auteur puisse ajouter un code à une liste déjà
     > existante (chaque code est précédé d'une virgule). Le formulaire PHP est basique je pense qu'il est bon :
    Non.
    Et c'est normal que ça crée un nouvel auteur puisque le php fait systématiquement $id_auteur = insert_auteur();

    Un gros pb c'est que ton code ne tient pas compte de l'auteur courant.

    Il faut le récupérer par exemple dans $GLOBALS['visiteur_session']
    et le transmettre.

    Je te met quelques pistes d'améliorations en commentaires dans ton code ci après
    mais ce n'est probablement qu'un début :

     > <form action='#ENV{action}' method='post'>
     > #ACTION_FORMULAIRE{#ENV{action}}
    Pour debug voici l'id_auteur récupéré : "#ENV{id_auteur}"
     > <input type='hidden' name='id_auteur' value='#ENV{id_auteur}' />
     > [<input type='hidden' name='redirect' value='(#ENV**{redirect})' />]
     > <label>Votre code</label>
     > <input type='text' name='code' value='#ENV{code}' />
     > <br />
     >
     > <input type='submit' name='ok' value='ok' />
     > </form>
     >
     > Par contre le code de traitement est mauvais. Il me créé à chaque fois un nouvel auteur alors qu'il devrait
    récupérer
     > l'id de l'auteur qui ajoute son code et ajouter une virgule devant le code + le code.
     >
     > <?php
     > function formulaires_code_charger_dist($id_auteur){
     > $valeurs = array('code'=>'',
    /* AJOUTÉ : */ 'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur']
    );
     > return $valeurs;
     > }
     >
     > function formulaires_code_traiter_dist(){
     > $res = array();
     > $code = _request('code');
     >
     > include_spip('action/editer_auteur');

    /* SURTOUT PAS ÇA > if ($id_auteur = insert_auteur()) ...*/
    /* À la place : */
    $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
     > auteurs_set($id_auteur,array('code'=>"$code"));
     > $res['message_ok'] = "Enregistrement réussi !";
     > $res['id_auteur'] = $id_auteur;

     > return $res;
     > }

    /* PAS DE ?> À LA FIN */

     >
     > Merci pour votre oeil expérimentée et votre aide. Il faut que je maîtrise cette partie à présent :slight_smile:
     >
     > Teenoo
     >

    _______________________________________________
    liste spip
    spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

    Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

    Infos : https://listes.rezo.net/mailman/listinfo/spip

    Documentation de SPIP : http://www.spip.net/

    Irc : de l'aide à toute heure : http://spip.net/irc

--
mail : boiron.laetitia@gmail.com <mailto:boiron.laetitia@gmail.com>

http://www.yume-design.com

Merci ça marche nickel :slight_smile: