Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu] Form Builder pour enregistrer en base ou dans un fichier
#1

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS : 1.6.6
#~ Version du MLE si existante : Non
#~ Informations Système :
#~ CMSMailer 1.73.14, FormBuilder 0.6
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour,

J'aime beaucoup CMSMS que je trouve vraiment agréable à utiliser mais là je suis en train de m'énerver sur Form Builder. Ça va pour faire des formulaires assez basiques mais la doc est quasi inexistante et ce module, tout sauf intuitif, à mon humble avis.

> L'envoi de mon formulaire fonctionne, mais pour enregistrer en base de données il n'y a que cette solution, que je trouve assez pourrie, avec tout dans un seul champ de la table cms_module_fb_frombrowser au format XML ????
> Est-ce qu'il y aurait moyen de sauvegarder dans la table de son choix et chaque info dans des champs séparés ???

Comme c'est le point central du projet sur lequel je suis en train de travailler, je suis à 2 doigts de laisser tomber CMSMS pour gérer ça à la mano.

J'ai essayé aussi d'enregistrer dans un fichier csv, ça marche à peu près sauf pour un champ multiligne qui se retrouve sur plusieurs colonnes.

> Quelqu'un pourrait-il m'indiquer comment faire pour que mon champ message ne soit pas scindé en plusieurs colonnes selon les sauts de ligne ?

> Et également je n'arrive pas à avoir d'en-tête en haut de mes colonnes dans mon fichier csv. J'ai pourtant créé un "modèle d'en-tête". Il y a dedans :
{if $fld_17 != "" && $fld_17 != "[non rempli]" }Prenom;{/if}
{if $fld_2 != "" && $fld_2 != "[non rempli]" }Nom;{/if}
{if $fld_3 != "" && $fld_3 != "[non rempli]" }Email;{/if}
{if $message != "" && $message != "[non rempli]" }Message;{/if}

Que je vire ou non les conditions ne change rien.

Je suis preneur de retour d'expérience sur ce sujet !
Merci d'avance.
#2

Si c'est juste pour 4 champs comme tu le présentes, il serait bien plus judicieux de créer ton formulaire avec une UDT. Tu auras ainsi toute maîtrise dessus.
Citation :> Quelqu'un pourrait-il m'indiquer comment faire pour que mon champ message ne soit pas scindé en plusieurs colonnes selon les sauts de ligne ?
Dans le champs *Écrire les résultats dans un fichier, il y a ceci : "Nouvelle ligne/Retour à la ligne en remplacement de caractères :".
Tu n'as qu'à y mettre " - ".
Citation :> Et également je n'arrive pas à avoir d'en-tête en haut de mes colonnes dans mon fichier csv. J'ai pourtant créé un "modèle d'en-tête". Il y a dedans :
Normalement ceci devrait fonctionner : Prenom;Nom;Email;Message
Le dernier point virgule après message faisait sans doute capoter le module.
#3

Merci pour ta réponse.
Pour l'en-tête il me semblait avoir viré le dernier ";", je vais tester ce soir ainsi que pour le retour à la ligne.

Jean le Chauve a écrit :Si c'est juste pour 4 champs comme tu le présentes, il serait bien plus judicieux de créer ton formulaire avec une UDT. Tu auras ainsi toute maîtrise dessus.
Non pour l'instant je suis en phase de test, j'aurai beaucoup plus d'élément à enregistrer, notamment des réponses à des questions via des bouton radio avec besoin de traitement derrière. D'où ma question concernant la possibilité d'enregistrer les infos en base de données d'une manière plus clean que ce que propose Form Builder et j'ai l'impression que ça n'est pas le cas. Faut-il passer par un traitement php qui nettoierait le champ où sont stockées les données du formulaire pour les injecter dans une table au propre avec des champs séparés ?

> créer ton formulaire avec une UDT
J'aimerai bien avoir davantage de contrôle sur le traitement du formulaire mais je ne vois pas trop comment lier le formulaire et un éventuel UDT :-\
#4

Pour accéder à une base de données : tuto ici : http://www.cmsmadesimple.fr/forum/viewtopic.php?id=1375

Tu crées ton formulaire dans un bloc de contenu global. Tu places ce bloc dans la page qui doit afficher le formulaire.
ex :
Code :
<form name="radioTiers" id="radioTiers" action="reception" method="post" enctype="multipart/form-data">
            <div id="boutonsTiers">
                <fieldset>
                    <legend>êtes-vous un intermédiaire ?</legend>
                    <input class="radioInput" type="radio" id="pasTiersFlag" name="inscrivant_tiers" value="0" {literal}onclick="affichage(event)"{/literal}/>Non<br />
                    <input class="radioInput" type="radio" id="tiersFlag" name="inscrivant_tiers" value="1" {literal}onclick="affichage(event)"{/literal} />Oui                    
                </fieldset><br />
                <span id="retour1" style="display:none;">Veuillez sélectionner à nouveau.</span>
            </div>
        <!--Fin Boutons d'affichage du formulaire TIERS-->
        <!--FORMULAIRE TIERS--><!--affiche seulement si c'est un TIERS-->
        
            <div id="informationsTiers" style="display:none;">
                <fieldset>
                    <legend>Informations sur l'intermédiaire</legend>
                    <p class="required short-label p-court">
                        <label for="nomInsTiers" class="labels">Nom</label>
                        <input class="court"  type="text" name="nomInsTiers" id="nomInsTiers" value="" size="" maxlength="80" />
                    </p>
                    <p class="required short-label p-court">
                        <label for="prenomInsTiers" class="labels">Prénom</label>
                        <input class="court"  type="text" name="prenomInsTiers" id="prenomInsTiers" value="" size="" maxlength="80" />
                    </p>
                    <p id="alerteRadio" class="required radio p-court">
                        <input class="radioInput" type="radio" name="sexeTiers" value="1" id="sexeTiers_1"/><label class="radioLabel">Madame</label><br />
                        <input class="radioInput" type="radio" name="sexeTiers" value="0" id="sexeTiers_3"/><label class="radioLabel">Monsieur</label><br /></p>
                    <p class="required short-label p-court">
                        <label for="profInsTiers" class="labels">Profession</label>
                        <input class="court"  type="text" name="profInsTiers" id="profInsTiers" value="" size="" maxlength="50"  />
                    </p>
                    <p class="required short-label p-court">
                        <label for="adrInsTiers" class="labels">Adresse</label>
                        <input class="court"  type="text" name="adrInsTiers" id="adrInsTiers" value="" size="" maxlength="80" />
                    </p>
                    <p class="required short-label p-court">
                        <label class="labels">n° :</label>
                        <input class="mini"  name="numeroRue_inscrivant" value="" type="text" />
                    </p>
                    <p class="required short-label p-court">
                        <label class="labels">Code postal</label>
                        <input class="mini"  type="text" name="codePostalNumeroTiers" id="cpInsTiers" size="" maxlength="4" {literal}onkeyup="setCpInfoTiers(this)"{/literal} />
                    </p>
                    <p class="required short-label p-court">
                        <label for="localiteTiers" class="labels">Localité</label>
                        <select class="court" name="localiteTiers" id="localiteTiers" ><option>Entrez d'abord votre cp </option></select>
                    </p>
                    <p class="required short-label p-court">
                        <label for="emailInsTiers" class="labels">E-mail</label>
                        <input class="court"  type="text" name="emailInsTiers" id="emailInsTiers" value="" size="" maxlength="80" {literal}onchange="validateur.estAdrEmail(this)"{/literal} />
                    </p>
                    <p class="required short-label p-court">
                        <label for="telInsTiers" class="labels">Téléphone/Gsm</label>
                        <input class="court"  type="text" name="telInsTiers" id="telInsTiers" value="" size="" maxlength="15" />
                    </p>
                    <p class="short-label p-court">
                        <label for="faxInsTiers" class="labels">Fax.</label>
                        <input class="court"  type="text" name="faxInsTiers" id="faxInsTiers" value="" size="" maxlength="15"/>
                    </p>
                    <p class="p-court">
                        <!-- A verifier -->
                        <input class="checkboxInput" type="checkbox" name="tiersInformeJeune" id="tiersInformeJeune" value="1" />
                        <!-- fin de A verifier -->
                        <label for="tiersInformeJeune" class="checkboxLabel">Cochez si le jeune/groupe est informé de votre initiative</label>
                    </p>
                    <p class="required p-court">
                        <label for="liensInsTiers" class="labels-long">Lien avec le jeune/groupe ?</label>
                        <select class="court1"  name="liensInsTiers" id="liensInsTiers" {literal}onchange="affichage(event)"{/literal} >
                            <option value="0" selected="selected" >Choisissez</option>
                            <option value="11" >son père</option>
                            <option value="1" >sa mère</option>
                            <option value="2" >son frère</option>
                            <option value="3" >sa sœur</option>
                            <option value="4" >un membre de la famille</option>
                            <option value="5" >un(e) éducateur/trice</option>
                            <option value="6" >un(e) enseignant(e)</option>
                            <option value="10" >un(e) collègue</option>
                            <option value="7" >un(e) ami(e)</option>
                            <option value="8" >son/sa partenaire</option>
                            <option value="9">autre</option>
                        </select>
                        <br/>
                        <span id="divAutreLiensInsTiers" class="short-label p-court" style="display:none;">
                            <br/>
                            <label class="labels-long">Veuillez préciser :</label>
                            <input class="court1" type="text" name="texteAutreLiensTiers" id="texteAutreLiensTiers" value="" size="" maxlength="80" />
                        </span>
                    </p>
                </fieldset><div><span>
                <input class="submit" type="button" value="Continuer" id="valideTiers" {literal}onclick="valideInscriptionTiers(radioTiers)"{/literal} />
                <input class="submitRetour" type="button" value="Retour" id="resetValideTiers" {literal}onclick="affichage(event)"{/literal} /></span></div>
            </div>
        <!--FIN FORMULAIRE TIERS-->
<p>
                    <input type="checkbox" id="visualiserMesDonnees" {literal}onclick="affichage(event)"{/literal} /><label>Vérifier mes données avant de valider</label>
                </p>
                <div><span><input class="submit"  type="button" value="Valider" id="valideFormUpload" {literal}onclick="valideFormulaire(radioTiers)"{/literal} />
                <input class="submitRetour"  type="button" value="Retour" id="resetValideFormUpload" {literal}onclick="affichage(event)"{/literal} /></span></div>
                
            </div>
        </div>
        </form>
C'est un copier-coller d'un gros formulaire, c'est juste pour te donner une idée.
Le javascript doit être dans un {literal} (il n'est pas obligatoire, bien sûr).
Tu mets comme "action" du formulaire la page dans laquelle se trouve l'udt de contrôle du formulaire.
Cette page contenant l'udt sera non affichée et non "searchable".
Ex d'udt :
Code :
global $gCms;
//declaration des variables
if (isset($_POST['inscrivant_tiers'])) {
    if ($_POST['inscrivant_tiers'] == "1") {
        $inscrivant_candidature = "1";
        //verifier le form tiers
        $nom_inscrivant = htmlspecial_utf8($_POST['nomInsTiers']);
        $prenom_inscrivant = htmlspecial_utf8($_POST['prenomInsTiers']);
        $sexe_inscrivant = strip_tags($_POST['sexeTiers']);
        $profession_inscrivant = htmlspecial_utf8($_POST['profInsTiers']);
        $adresse_inscrivant = htmlspecial_utf8($_POST['adrInsTiers']);
        if (isset ($_POST["numeroRue_inscrivant"])) {
              $numeroRue_inscrivant = $_POST["numeroRue_inscrivant"];
        }
        else {
            $numeroRue_inscrivant = "";
        }
        $cp_inscrivant = strip_tags($_POST['codePostalNumeroTiers']);
        $localite_inscrivant = htmlspecial_utf8($_POST['localiteTiers']);
        $email_inscrivant = strip_tags($_POST['emailInsTiers']);
        $telephone_inscrivant = strip_tags($_POST['telInsTiers']);
        $fax_inscrivant = strip_tags($_POST['faxInsTiers']);
        $lien_inscrivant = htmlspecial_utf8($_POST['liensInsTiers']);
        $lienAutre_inscrivant = htmlspecial_utf8($_POST['texteAutreLiensTiers']);
        $informe_candidat = $_POST['tiersInformeJeune'];    
    } else {
        $inscrivant_candidature = "0";
    }
}
...
$db = &$gCms->GetDb();
$query = "INSERT INTO zoom_candidat09 (pass, media_candidature, mediaAutre_candidature, inscrivant_candidature, nom_candidat, prenom_candidat, age_candidat, dateNaissance_candidat, sexe_candidat, adresse_candidat, numeroRue_candidat, cp_candidat, localite_candidat, province_candidat, telephone_candidat, fax_candidat, email_candidat, site_candidat, nom_inscrivant, prenom_inscrivant, sexe_inscrivant, profession_inscrivant, adresse_inscrivant, numeroRue_inscrivant, cp_inscrivant, localite_inscrivant, province_inscrivant, email_inscrivant, telephone_inscrivant, fax_inscrivant, lien_inscrivant, lienAutre_inscrivant, informe_candidat, type_candidat, type_groupe, typeAutre_groupe, nom_groupe, contact_groupe, prenomContact_groupe, age_groupe, sexe_groupe, adresse_groupe, numeroRue_groupe, cp_groupe, localite_groupe, province_groupe, telephone_groupe, fax_groupe, email_groupe, site_groupe, sujet_candidature, qualite_candidature, descriptiontalent_candidature, retombee_candidature, titre_candidature, theme_candidature, themeAutre_candidature, theme_categorie, theme_sousCategorie, theme_autreCategorie, theme_autreSousCategorie, demarre_candidature, description_candidature, objectif_candidature, lieu_candidature, portee_candidature, public_candidature, motivation_candidature, etape_candidature, partenaire_candidature, typePartenaire_candidature, typePartenaireAutre_candidature, structure_candidature, nom_structure, contact_structure, prenomContact_structure, sexeContact_structure, adresse_structure, numeroRue_structure, cp_structure, localite_structure, province_structure, telephone_structure, fax_structure, email_structure, site_structure, commentaire_candidature, display, datein) VALUES ('$pass', '$media_candidature', '$mediaAutre_candidature', '$inscrivant_candidature', '$nom_candidat', '$prenom_candidat', '$age_candidat', '$dateNaissance_candidat', '$sexe_candidat', '$adresse_candidat', '$numeroRue_candidat', '$cp_candidat', '$localite_candidat', '$province_candidat', '$telephone_candidat', '$fax_candidat', '$email_candidat', '$site_candidat', '$nom_inscrivant', '$prenom_inscrivant', '$sexe_inscrivant', '$profession_inscrivant', '$adresse_inscrivant', '$numeroRue_inscrivant', '$cp_inscrivant', '$localite_inscrivant', '$province_inscrivant', '$email_inscrivant', '$telephone_inscrivant', '$fax_inscrivant', '$lien_inscrivant', '$lienAutre_inscrivant', '$informe_candidat', '$type_candidat', '$type_groupe', '$typeAutre_groupe','$nom_groupe','$contact_groupe', '$prenomContact_groupe', '$age_groupe', '$sexe_groupe', '$adresse_groupe', '$numeroRue_groupe', '$cp_groupe', '$localite_groupe', '$province_groupe', '$telephone_groupe', '$fax_groupe', '$email_groupe', '$site_groupe', '$sujet_candidature', '$qualite_candidature', '$descriptiontalent_candidature', '$retombee_candidature', '$titre_candidature', '$theme_candidature', '$themeAutre_candidature', '$theme_categorie', '$theme_sousCategorie', '$theme_autreCategorie', '$theme_autreSousCategorie', '$demarre_candidature', '$description_candidature', '$objectif_candidature', '$lieu_candidature','$portee_candidature', '$public_candidature', '$motivation_candidature', '$etape_candidature', '$partenaire_candidature', '$typePartenaire_candidature', '$typePartenaireAutre_candidature', '$structure_candidature', '$nom_structure', '$contact_structure', '$prenomContact_structure', '$sexeContact_structure', '$adresse_structure', '$numeroRue_structure', '$cp_structure', '$localite_structure', '$province_structure', '$telephone_structure', '$fax_structure', '$email_structure', '$site_structure', '$commentaire_candidature', '0', CURRENT_TIMESTAMP)";
$db->Execute($query);
Attention, j'ai d'abord créé une table "zoom_candidat09" DANS la bd de cmsms.
#5

Wouaouh merci beaucoup !
Ça c'est de la réponse claire exhaustive !

Je vais étudier tout ça de très près, je préfèrerais vraiment contrôler le traitement de mon formulaire.

Une dernière question :

J'ai l'habitude de rajouter du php dans mes formulaires qui double les test js, pour ré-afficher le contenu saisi en cas d'erreur et appliquer une classe, ex :
Code :
<label for="nom">Prénom :</label>
<input name="prenom" type="text" id="prenom" size="40" maxlength="100" value="<?php if ( (isset($prenom)) && ($envoi==1) && (sizeof($error_list)!=0) ) echo stripslashes($prenom); ?>" class="required<?php if (isset($error_list["NoPrenom"])) echo " validation-failed"; ?>" />
Si je dois mettre mon formulaire dans une page de contenu CMSMS, je ne pourrai pas insérer du code PHP et je me vois mal créer un udt pour chaque champ, donc je ne vois pas comment faire :-\
#6

Tu recrées le formulaire (avec les données POST) dans l'udt, comme tu le ferais normalement en php (rien ne t'empêche d'ailleurs d'utiliser de l'ajax pour les champs fautifs, il faut seulement faire attention à rediriger par .htaccess le domaine sans www vers le domaine avec www, sinon tu auras des difficultés).
#7

Tu veux dire tout écrire avec des "echo" et échapper tous les " ?
Genre ça :
Code :
echo "<p><label for=\"prenom\">Prénom :</label>";
echo "<input name=\"prenom\" type=\"text\" id=\"prenom\" size=\"40\" maxlength=\"100\" value=\"";
if ( (isset($prenom)) && ($envoi==1) && (sizeof($error_list)!=0) ) echo stripslashes($prenom);
echo "\" class=\"input required";
if (isset($error_list["NoPrenom"])) echo " validation-failed";
echo "\" /></p>";
C'est du boulot :-\
#8

heredoc est là pour t'aider (voir lien dans le tuto http://www.cmsmadesimple.fr/forum/viewto...p?id=1375)
#9

re ,

je vois que ça galère pour les formulaires [avec l'usine Formbuilder], il existe des forms toutes faites que j'utilise depuis ... révisées 2010
elles sont à disposition sur ma page Plugins (dans le répertoire /plugins de CMSMS)
-une simple (le vieux formulaire de la version 1.
- une qui enregistre les données dans une table à créer
http://jc.etiemble.free.fr/abc/index.php...ssourcesfr

J-C Etiemble v 2.2.xx
#10

Ah ba ça a l'air de ressembler à ce dont j'ai besoin ça !

Merci beaucoup, je vais jeter un œil pour voir si je peux l'adapter à mon besoin.
#11

re,

ces formulaire fonctionnent avec la fonction mail, si besoin j'ai les mêmes en SMTP , mais il pas eu le temps de les mettre pour distribution Wink

J-C Etiemble v 2.2.xx
#12

Bon hé bien j'ai installé et testé le script rapidement hier soir ça tourne nickel, donc merci encore. Il ne me reste plus qu'à personnaliser tout ça pour les champs dont j'ai besoin.

Étrangement je n'étais pas du tout tombé sur ton lien en faisant mes recherches, enfin c'est vrai que je cherchais avant tout des éclaircissements sur le fonctionnement de FormBuilder !

Bref, ça m'intéresse aussi du coup la version SMTP, on peut la trouver où ?
#13

re,

>ça m'intéresse aussi du coup la version SMTP, on peut la trouver où ?
voila, à dispo de tous ... dans Développement et Astuces / Formulaires de contact
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=2308

J-C Etiemble v 2.2.xx
#14

Super merci, et une dernière question, si on active l'url rewriting de CMSMS pour avoir des url propres ça se passe comment ? Je n'ai pas encore testé.
#15

re,

> si on active l'url rewriting de CMSMS pour avoir des url propres
Ouvre une autre discussion "url rewriting" dans le bon forum
et ferme celui la si Résolu pour toi

J-C Etiemble v 2.2.xx
#16

ajoute [Résolu] dans le titre de ton premier message de cette discussion.
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)