formulaire CVT renvoyant sur une AUTRE page

Actuellement avec les cvt je ne sais pas faire appel à Verifier
si le formulaire appelle une autre page.

L'exemple dans la dist de formulaire qui renvoie sur une autre page
c'est #FORMULAIRE_RECHERCHE, pour lequel il n'y a pas de vérification.

Est il possible à la fois de faire les vérifications
ET de renvoyer sur une autre page que celle d'appel du formulaire ?
Y a t il un formulaire CVT à prendre en exemple pour cela,
sur la zone ou dans la dist ?

Merci d'avance,
JLuc

JLuc a écrit :

Est il possible à la fois de faire les vérifications
ET de renvoyer sur une autre page que celle d'appel du formulaire ?

SPIP ?

Eric

Eric L a écrit :

JLuc a écrit :

Est il possible à la fois de faire les vérifications
ET de renvoyer sur une autre page que celle d'appel du formulaire ?

SPIP ?

Merci, ça complète bien la doc déjà existante sur les CVT.

JLuc

Bonjour,

J'ai un formulaire qui me pose problème pour enregistrer de long textes
(descriptions de cours et bibliographie):

La fin du fichier editcours.html est la suivante:

<li class="editer_ue_coursabstract">
              <label for="ue_coursabstract">Descriptif du cours:</label>
               [<span class='erreur'>(#ENV**{erreurs}|table_valeur{ue_coursabstract})</span>]
    
    <textarea name="ue_coursabstract" id="ue_coursabstract"
    value="#ENV*{ue_coursabstract}" rows="30" cols="40" ></textarea></br>

      </li>

<li class="editer_ue_coursbiblio">
              <label for="ue_coursbiblio">Bibliographie pour le cours:</label>
               [<span class='erreur'>(#ENV**{erreurs}|table_valeur{ue_coursbiblio})</span>]
      
    <textarea name="ue_coursbiblio" id="ue_coursbiblio" value="#ENV*{ue_coursbiblio}" rows="10" cols="40"></textarea></br>

          </li>
      
  <p class='boutons'><input type="submit" class="submit" value="<:bouton_enregistrer:>"/></p>
   </div>
</form>

</div>

Ce qui se produit dans la base de données est que les champs
ue_coursabstract et ue_coursbiblio se remplissent ou ne se remplissent
pas, en raison de la taille ou des caractères des textes envoyés par le
formulaire. Ces champs sont pourtant au type longtext et en
utf8_general_ci , à l'instar de text dans la table spip_articles. Je
voudrais parvenir à faire un formulaire qui permettent de renseigner
correctement ces champs à chaque envoi.

Merci de votre aide ou de vos suggestions. Je ne m'en sors pas avec ce
formulaire et je ne suis pas un expert.

Joseph

Joseph Vidal-Rosset <joseph.vidal-rosset@univ-nancy2.fr> wrote:

Bonjour,

Bonjour

J'ai un formulaire qui me pose problème pour enregistrer de long textes
(descriptions de cours et bibliographie):

La fin du fichier editcours.html est la suivante:

<textarea name="ue_coursabstract" id="ue_coursabstract" >
value="#ENV*{ue_coursabstract}" rows="30" cols="40" ></textarea></br>
....
<textarea name="ue_coursbiblio" id="ue_coursbiblio"
value="#ENV*{ue_coursbiblio}" rows="10" cols="40"></textarea></br>
Ce qui se produit dans la base de données est que les champs
ue_coursabstract et ue_coursbiblio se remplissent ou ne se remplissent
pas, en raison de la taille ou des caractères des textes envoyés par le
formulaire. Ces champs sont pourtant au type longtext et en
utf8_general_ci , à l'instar de text dans la table spip_articles. Je
voudrais parvenir à faire un formulaire qui permettent de renseigner
correctement ces champs à chaque envoi.

première suggestion, nouveau problème = nouveau post pour demarrer une
enfillade

deuxième suggestion : la syntaxe de textarea est
<textarea name="..." ...>valeur</textaera>

ce qui donne pour ton second champ
<textarea name="ue_coursbiblio" id="ue_coursbiblio" rows="10"
cols="40">#ENV*{ue_coursbiblio}</textarea>

peut-être que cela perturbe le passage correct des valeurs.

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.

Le Wed, 19 Aug 2009 08:59:57 +0200,
dwojylac@free.fr (Dominique) a écrit :

première suggestion, nouveau problème = nouveau post pour demarrer une
enfillade

Merci beaucoup Dominique,

Je recommence un post pour exposer plus précisément le problème que je
rencontre.

Si je fais un copier-coller à partir par exemple d'un texte anglais
pris dans Wikipedia, et que je le colle dans la zone de textarea de mon
formulaire, je ne rencontre aucun problème, le texte passe
intégralement, si long soit-il, dans le champ de la base de données.

En revanche si je tape mon texte dans la zone textarea de mon
formulaire, au-delà de deux courtes phrases l'enregistrement ne se fait
plus! Mais si je colle à nouveau du texte (toujours à partir de
Wikipédia pour exposer précisément mon essai), alors là je peux taper à
l'intérieur de ce texte un texte nouveau, et l'enregistrement se fait
sans problème.

J'ai vraiment besoin d'aide parce que ça dépasse de très très loin mes
compétences.

Voici le code html de mon formulaire, pardon pour la longueur de
l'email:

#CACHE{0}

<div class="formulaire_spip formulaire_editer
      formulaire_editer_editcours
      formulaire_editer_editcours-id">
<br class='bugajaxie' />

[<div class="texte">(#CONFIG{contact/texte}|propre)</div>]

<a id="editcours" name="editcours"></a>

<form method='post' action='#ENV{action}#formulaire_editcours' enctype='multipart/form-data'>

<table class="spip" width="100%">

  <tr style="text-align: center">
    [(#ENV*{ueid}>{0}|oui)<td style="text-align: center;
    font-weight: bold; font-size: 1.3em">Edition du
    descriptif du cours: #UENOM</td>]
    [(#ENV*{ueid}>{0}|non)<td style="text-align:
    center; font-weight: bold; font-size:
    1.3em">Descriptif du cours</br>[(#ENV{creationenserie}|=={'on'}|oui) - Créations en série]</td>]
  </tr>
</table>
<br />

[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
<div>
  #ACTION_FORMULAIRE{#ENV{action}}
         <ul>
          <li class="editer_uenum obligatoire">
              <label for="uenum">Numéro de l'UE :</label>
               [<span class='erreur'>(#ENV**{erreurs}|table_valeur{uenum})</span>]
        <input type="text" name="uenum" id="uenum" value="#ENV*{uenum}" class="text" maxlength="100" />
          </li>
    
      </ul>
       <ul>
          <li class="editer_uenom obligatoire">
              <label for="uenom">Intitulé :</label>
               [<span class='erreur'>(#ENV**{erreurs}|table_valeur{uenom})</span>]
        <input type="text" name="uenom" id="uenom" value="#ENV*{uenom}" class="text" maxlength="600" />
          </li>
    
      </ul>

<li class="editer_ue_courstitre">
              <label for="ue_courstitre">Titre du cours:</label>
               [<span class='erreur'>(#ENV**{erreurs}|table_valeur{ue_courstitre})</span>]
        <input type="text" name="ue_courstitre" id="ue_courstitre" value="#ENV*{ue_courstitre}" class="text" maxlength="100" />
          </li>
    
<li class='editer_ue_coursabstract obligatoire[ (#ENV*{erreurs}|table_valeur{ue_coursabstract}|oui)erreur]'>
  <label for="ue_coursabstract">Descriptif du cours:</label>
               [<span class="erreur_message">(#ENV*{erreurs}|table_valeur{ue_coursabstract})</span>]
<textarea name="ue_coursabstract" id="ue_coursabstract"
    rows="8" cols="60" >#ENV*{ue_coursabstract}</textarea></br>

      </li>

<li class='editer_ue_coursbiblio [ (#ENV*{erreurs}|table_valeur{ue_coursbiblio}|oui)erreur]'>
              <label for="ue_coursbiblio">Bibliographie pour le cours:</label>
               [<span class='erreur'>(#ENV**{erreurs}|table_valeur{ue_coursbiblio})</span>]
<textarea name="ue_coursbiblio" id="ue_coursbiblio" rows="8" cols="40">#ENV*{ue_coursbiblio}</textarea></br>

          </li>

  <li>
         <input type="hidden" name="ueid" id="ueid" value="#ENV*{ueid}" class="hidden" />
      </li>

  <p class='boutons'><input type="submit" class="submit" value="<:bouton_enregistrer:>"/></p>
   </div>
</form>

</div>

J'ai oublié de donner aussi le fichier php, le voici:

<?php
function formulaires_editcours_charger_dist(){
       $ueid=_request('ueid');
       if (_request('uenouvel_id')) {
             $ueid=_request('uenouvel_id');
    }
    settype($ueid, "integer");
       if ($ueid>0) {
             $resultat=connexionalabase();
             $query = "SELECT * FROM ues WHERE ueid=$ueid;" ;
             $resultat=mysql_query($query);
             mysql_close();
             while ($row = mysql_fetch_array($resultat, MYSQL_BOTH)) {
                    $uenum= $row["uenum"];
                    $uenom= $row["uenom"];
                    $ue_courstitre= $row["ue_courstitre"];
                    $ue_coursabstract= $row["ue_coursabstract"];
                    $ue_coursbiblio= $row["ue_coursbiblio"];
                    $ue_coursurl= $row["ue_coursurl"];
                    
             }

       $valeurs = array('ueid'=>$ueid,
       'uenum'=>$uenum,'uenom'=>$uenom,
       'ue_courstitre'=>$ue_courstitre,
       'ue_coursabstract'=>$ue_coursabstract,
       'ue_coursbiblio'=>$ue_coursbiblio,
       'ue_coursurl'=>$ue_coursurl, 'creationenserie'=>'' );

       }else{
   $valeurs = array('ueid'=>'0', 'uenum'=>'', 'uenom'=>' ',
       'ue_courstitre'=>'', 'ue_coursabstract'=>'',
       'ue_courstitre'=>'', 'ue_coursbiblio'=>'', 'ue_coursurl'=>'',
       'creationenserie'=>'' ) ; } return $valeurs; }
function formulaires_editcours_verifier_dist(){
  foreach(array('uenum','uenom') as $obligatoire){
           if (!_request($obligatoire)) {
              $erreurs[$obligatoire] = 'Ce champ est
       obligatoire'; $erreurs['message_erreur'] = 'Votre saisie
       contient des erreurs !'; return $erreurs;
      }
       }
}

function formulaires_editcours_traiter_dist(){
       $resultat=connexionalabase();
       $message='';
       $ueid=_request('ueid');
       $uenum=_request('uenum');
       $uenom=_request('uenom');
       $ue_courstitre=_request('ue_courstitre');
       $ue_coursabstract=_request('ue_coursabstract');
       $ue_coursbiblio=_request('ue_coursbiblio');
       $ue_coursurl=_request('ue_coursurl');
                $supprimer=_request('supprimer');
    $creationenserie=_request('creationenserie');
    if($supprimer=='on'){
       $query = "DELETE FROM ues WHERE ueid=$ueid" ;
      $result=mysql_query($query);
      mysql_close();
      $numero=0;
      return array('message_ok'=>'Enregistrement
effac&eacute; !', 'numero'=>$numero); }
    if (_request('uenouvel_id')){
             $ueid=_request('uenouvel_id');
    settype($ueid, "integer");
$creationenserie=_request('creationenserie');
    }
    if ($ueid>0){
$query = "UPDATE ues SET uenum='$uenum', uenom='$uenom',
ue_courstitre='$ue_courstitre', ue_coursabstract='$ue_coursabstract',
ue_coursbiblio='$ue_coursbiblio', ue_coursurl='$ue_coursurl' WHERE
ueid= $ueid" ; $resultat=mysql_query($query); $message = 'Modification
de l\'UE effectu&eacute;e.'. $uenum . '' . $uesem . '' . $uenom . '' .
$uevol .''. ' etc., effectu&eacute;e.' ; return
array('message_ok'=>$message); }else{ $query = "INSERT INTO ues SET
uenum='$uenum', uenom='$uenom', ue_courstitre='$ue_courstitre',
ue_coursabstract='$ue_coursabstract',
ue_coursbiblio='$ue_coursbiblio', ue_coursurl='$ue_coursurl' ;";
$result=mysql_query($query) or die("je ne devrais jamais passer ici ! -
nouvel_id = $ueid"); $ueid=mysql_insert_id(); $message = "C'est
enregistr&eacute (- id = $ueid). Bravo! Tu peux poursuivre."; } if
($creationenserie!='on'){ set_request('uenouvel_id',$ueid);
  }
        return array('message_ok'=>$message);
        mysql_close();
  
}

function connexionalabase() {
  $resultat='ok';
    $mysqlserver = 'localhost';
    $mysqlloggin = 'mon_login';
    $mysqlpassword = 'mon_mot_de_passe';
    $mysqlmaindb = 'mysqlmaindb';
    mysql_connect( $mysqlserver , $mysqlloggin , $mysqlpassword ) ;
    mysql_select_db( $mysqlmaindb )
    or $resultat='erreur' ;
  return $resultat;
}
?>

Joseph Vidal-Rosset <joseph.vidal-rosset@univ-nancy2.fr> wrote:

J'ai oublié de donner aussi le fichier php, le voici:

<?php
function formulaires_editcours_charger_dist(){
       $ueid=_request('ueid');
       if (_request('uenouvel_id')) {
             $ueid=_request('uenouvel_id');
              }
              settype($ueid, "integer");
       if ($ueid>0) {
             $resultat=connexionalabase();
             $query = "SELECT * FROM ues WHERE ueid=$ueid;" ;
             $resultat=mysql_query($query);
             mysql_close();
             while ($row = mysql_fetch_array($resultat, MYSQL_BOTH)) {
                    $uenum= $row["uenum"];
                    $uenom= $row["uenom"];
                    $ue_courstitre= $row["ue_courstitre"];
                    $ue_coursabstract= $row["ue_coursabstract"];
                    $ue_coursbiblio= $row["ue_coursbiblio"];
                    $ue_coursurl= $row["ue_coursurl"];
                    
             }

..............

$query = "UPDATE ues SET uenum='$uenum', uenom='$uenom',
ue_courstitre='$ue_courstitre', ue_coursabstract='$ue_coursabstract',
ue_coursbiblio='$ue_coursbiblio', ue_coursurl='$ue_coursurl' WHERE
ueid= $ueid" ; $resultat=mysql_query($query); $message = 'Modification
de l\'UE effectu&eacute;e.'. $uenum . '' . $uesem . '' . $uenom . '' .
$uevol .''. ' etc., effectu&eacute;e.' ; return
array('message_ok'=>$message); }else

.......

function connexionalabase() {
      $resultat='ok';
    $mysqlserver = 'localhost';
    $mysqlloggin = 'mon_login';
    $mysqlpassword = 'mon_mot_de_passe';
    $mysqlmaindb = 'mysqlmaindb';
    mysql_connect( $mysqlserver , $mysqlloggin , $mysqlpassword ) ;
    mysql_select_db( $mysqlmaindb )
    or $resultat='erreur' ;
      return $resultat;
}
?>

Spip intégre une couche d'abstraction de tout ce qui est la relation
avec la base et les tables. Ici tu as choisi de ne pas l'utiliser
(dommage parceque ton dev ne fonctionne qu'avec mysql au final).
D'autre part dans cette couche spip fait pour toi un certain nombre de
choses.

Est-ce que ta table est déclarée comme table non spip ?
est-que ceci est transformable en plugin (probablement oui si c'est
juste ce formulaire avec la gestion des enregistrements). C'est possible
d'invoquer les pipelines dans mes_options.php (mais je ne suis pas
certain que cela rende les choses plus faciles que dans un pipeline)

Donc je te conseille de regarder du côté de :
http://doc.spip.org/@L-interface-de-SPIP-avec-SQL
et http://doc.spip.org/@Declarer-et-ajouter-des-tables
et pour les plugin
http://doc.spip.org/@Plugin-xml (tu trouveras encore d'autres tuto en
cherchant un peu)

Pour ma part j'ai décortiqué le plugin agenda2 pour voir comment les
tables étaient déclarées et quelques exemples de l'utilisation de l'api
sql_*. Si en plus tu n'as pas besoin de faire de jointures pour tes
boucles, ce n'est pas si complexe.

D'autre part déclarer tes tables te permettra de les invoquer
directement dans tes boucles

<BOUCLE_aa (UES) {ueid}>
#UENOM
</BOUCLE_aa>

En plus tu n'aura pas besoin de reparamétrer ta connexion au serveur.

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.