Forum CMS Made Simple FR

Version complète : [résolu] formulaire et base de données
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :----------------------------------------------

Cms Version: 1.9.3

Installed Modules:

CMSMailer: 2.0.1
FileManager: 1.1.0
MenuManager: 1.7.5
ModuleManager: 1.4
News: 2.11.1
nuSOAP: 1.0.2
Printing: 1.1.2
Search: 1.6.10
ThemeManager: 1.1.4
TinyMCE: 2.8.3
CGExtensions: 1.23
FrontEndUsers: 1.12.11
CustomContent: 1.7.3
FormBuilder: 0.7
FormBrowser: 0.4

Config Information:

php_memory_limit:
process_whole_template: false
output_compression: false
max_upload_size: 100000000
default_upload_permission: 664
url_rewriting: none
page_extension:
query_var: page
image_manipulation_prog: GD
auto_alias_content: true
locale:
default_encoding: utf-8
admin_encoding: utf-8
set_names: true

Php Information:

phpversion: 5.2.14
md5_function: On (Vrai)
gd_version: 2
tempnam_function: On (Vrai)
magic_quotes_runtime: Off (Faux)
E_STRICT: 0
memory_limit: 128M
max_execution_time: 3000
output_buffering: 4096
safe_mode: Off (Faux)
file_uploads: On (Vrai)
post_max_size: 100M
upload_max_filesize: 100M
session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
session_use_cookies: On (Vrai)
xml_function: On (Vrai)

Server Information:

Server Api: cgi-fcgi
Server Db Type: MySQL (mysql)
Server Db Version: 4.1.22

----------------------------------------------



salut à tous,
je viens vous voir pour une demande de confirmation de raisonnement ou pour correction si je me goure.

Situation:

- J'ai 2 espaces sécurisés différents "partenaire" et "administration" accessibles pour 2 groupes d'utilisateurs différents.
- Une table personnalisée "demande" dans la base de donnée.

Dans l'espace partenaire:

- Une page avec un formulaire contenant des champs à remplir et des champs cachés qui devront être enregistrés dans la table "demande"

- Une page affichant un tableau qui contient les données de la table "demande".

Dans la partie administration:

- Une page affichant un tableau qui contient les données de la table "demande" avec possibilité d'éditer chaque ligne et de trier les réultats.
- une page d'édition des lignes donc, même formulaire que pour l'espace partenaire sauf que les champs seront pré-remplis par la base de données et les champs cachés ne le sont plus.


Conclusion:

Avec formbuilder, je ne vois pas trop comment gérer ces contraintes d'où l'idée de le faire par moi-même.
Mon idée est de faire les formulaires dans des blocs de contenu globaux et les traitements dans des balises utilisateurs, ce qui me donnerait:

- formulaire partenaire (BCG)
- enregistrement dans base de données (BU)
- récupération des données dans la base (BU)
- affichage des résultats (BCG)

- récupération des données avec tri (BU)
- affichage des résultats avec icone d'édition sur chaque ligne (BCG)
- formulaire d'édition (BCG)
- enregistrement des modifications (BU)

Est-ce que mon raisonnement est correcte et est-ce viable comme systeme ou avez-vous des suggestions pour la réalisation de cette partie?

merci beaucoup
Bonjour,

FormBuilder n'est effectivement pas suffisant pour cela. Mais tu peux l'associer à FormBrowser qui permet justement de récupérer les données saisies via formBuilder et de les afficher (avec possibilité d'afficher un bouton "éditer", ce qui répondrait à ton besoin).

Je pense en tout cas que tu n'as pas besoin de passer une table et un formulaire maison.

A ta dispo si tu cherche des infos,
Bonjour,

merci de ta réponse.

J'ai retourné le problème dans tous les sens et je ne voyais toujours pas comment faire pour que des champs cachés dans le formulaire partenaire deviennent des champs de texte ou listes dans dans la partie admin donc, je me suis lancé dans la fabrication main.
La partie partenaire est terminée et la partie admin est bien avancée.

Les tutos et messages précédants sur le forum ont répondus à la majorité de mes questions mais une subsiste au niveau de la sécurité des données à enregistrer dans la BDD.

Sur internet les avis diverges donc, je suis un peu paumé sur la façon d'échapper les caractères et éviter les éventuelles injections.
Donc, si on pouvait m'éclairer dans un premier temps sur ce point, ce serait super.

Merci
Le mieux est de vérifier toutes les infos envoyées : type, taille, espaces, échappement,... pour être sûr que les données reçues sont conformes à ce que tu attends Wink
sauf que c'est des champs de texte libre comme des noms de villes, des commentaires ou autre donc, j'attends rien de précis!
du coup, pour le moment, je suis passé par un simple "mysql_real_escape_string()" et on protégera plus avant de mettre le site en production
Bon, mes formulaires sont faits et presque tout fonctionne correctement!

je dis presque parceque je rencontre un drôle de problème:

J'ai une UDT qui me permet de récupérer les données de ma table pour une entrée précise afin de pré-remplir un formulaire qui lorsque je le valide update les champs de la table.

Les soucis sont:
- si j'essaye de fermer la connection à la BDD dans cette UDT, je perds mon template en front office.
- dans la page qui traite le formulaire, tout ce qui est dans {content} est absent en front office par contre mon second bloc de contenu fonctionne parfaitement.

UDT du formulaire:
Code :
global $gCms;

$convoid = $_POST['convoid'];

$db = &$gCms->GetDb(); //connection à la bd cms
$query = "SELECT * FROM perso_demande WHERE id=".$convoid."";
$dbresult = mysql_query($query);//exécution de la requête

while($fields = mysql_fetch_array($dbresult))  
    {
  
$resultChamps1 = $fields['id'];
$resultChamps2 = $fields['date'];
$resultChamps3 = $fields['userid'];
$resultChamps4 = $fields['datelimite'];
$resultChamps5 = $fields['agence'];
$resultChamps6 = $fields['nom'];
$resultChamps7 = $fields['mail'];
$resultChamps8 = $fields['parc'];
$resultChamps9 = $fields['immatriculation'];
$resultChamps10 = $fields['depart'];
$resultChamps11 = $fields['arrivee'];
$resultChamps12 = $fields['ptac'];
$resultChamps13 = $fields['modele'];
$resultChamps14 = $fields['commentaires'];
$resultChamps15 = $fields['etat'];

}

echo '<form id="demande_part" method="post" action="index.php?page=postedit" class="demande_part_form" enctype="multipart/form-data">

<div class="formulaire">

<input type="hidden" name="id" value="'.$resultChamps1.'" id="id" />

<input type="hidden" name="date" value="'.$resultChamps2.'" id="date" />

<input type="hidden" name="userid" value="'.$resultChamps3.'" id="userid" />

<div class="titre"><h2>Date</h2></div>

<div class="daterequise">
<label>Date limite de livraison*</label><input type="text"  name="datelimite" value="'.$resultChamps4.'"  id="datepicker" size="8"/>
</div>

<div class="titre"><h2>Contact</h2></div>

<div class="contact">
<label>Agence*</label><br/>
<input type="text" name="agence" value="'.$resultChamps5.'" size="20" maxlength="80"  id="agence" />
</div>
<div class="contact">
<label>Nom du contact*</label><br/>
<input type="text" name="nom" value="'.$resultChamps6.'" size="20" maxlength="80"  id="nom" />
</div>
    
<div class="contact">
<label>Email du contact*</label><br/>
<input type="text" name="mail" value="'.$resultChamps7.'" size="20" maxlength="80"  id="mail" />
</div>

                            
<div class="contact">
<label>Numéro de parc</label><br/>
<input type="text" name="parc" value="'.$resultChamps8.'" size="15" maxlength="80"  id="parc" />
</div>

<div class="titre"><h2>Véhicule</h2></div>
                                
<div class="vehicule">
<label>N° d\'immatriculation*</label><br/>
<input type="text" name="immatriculation" value="'.$resultChamps9.'" size="25" maxlength="80"   id="immatriculation" />
</div>

<div class="vehicule">
<label>PTAC du véhicule*</label><br/>
<select class="demande_dropdown" name="ptac"  id="ptac">
<option value="" ';
if($resultChamps12 = ""){echo 'selected="selected"';}
echo '> sélectionner un PTAC</option>
<option value="1" ';
if($resultChamps12 = "1"){echo 'selected="selected"';}
echo' >VL</option>
<option value="2" ';
if($resultChamps12 = "2"){echo 'selected="selected"';}
echo '>Moins de 3.5T</option>
<option value="3" ';
if($resultChamps12 = "3"){echo 'selected="selected"';}
echo '>Entre 3.5T et 19T</option>
<option value="4" ';
if($resultChamps12 = "4"){echo 'selected="selected"';}
echo '>Entre 19T et 44T</option>
</select>
</div>

<div  class="vehicule">
<label>Modèle du véhicule</label><br/>
<input type="text" name="modele" value="'.$resultChamps13.'" size="28" maxlength="80"  id="modele" />
</div>

<div class="titre"><h2>Trajet</h2></div>
                                    
<div class="itineraire">
<label>Ville de départ*</label><br/>
<input type="text" name="depart" value="'.$resultChamps10.'" size="42" maxlength="80"  id="depart" />
</div>
                                
<div class="itineraire">
<label>Ville d\'arrivée*</label><br/>
<input type="text" name="arrivee" value="'.$resultChamps11.'" size="42" maxlength="80"  id="arrivee" />
</div>

<div class="titre"><h2>Commentaires</h2></div>
                                                                                        
<div class="commentaires">
<label>Commentaires</label><br/>
<textarea name="commentaires" cols="72" rows="5" class="cms_textarea" id="commentaires">'.$resultChamps14.'</textarea>
</div>

<div class="titre"><h2>Etat</h2></div>

<div class="vehicule">
<label>Statut du convoyage*</label><br/>
<select class="demande_dropdown" name="etat"  id="etat">
<option value="en attente" ';
if($resultChamps15 == "en attente"){echo 'selected="selected"';}
echo '> en attente</option>
<option value="confirmé" ';
if($resultChamps15 == "confirmé"){echo 'selected="selected"';}
echo' >confirmé</option>
</select>
</div>                                
                    
<div class="submit">
<input class="demande_submit" name="demande_submit" id="demande_submit" value="Modifier la demande de convoyage" type="submit" />
</div>
    
</div>
</form>
';

UDT de traitement:
Code :
global $gCms;

//declaration des variables

$id = mysql_real_escape_string($_POST['id']);
$date = mysql_real_escape_string($_POST['date']);
$userid = mysql_real_escape_string($_POST['userid']);
$datelimite = mysql_real_escape_string($_POST['datelimite']);
$agence = mysql_real_escape_string($_POST['agence']);
$nom = mysql_real_escape_string($_POST['nom']);
$mail = mysql_real_escape_string($_POST['mail']);
$parc = mysql_real_escape_string($_POST['parc']);
$immatriculation = mysql_real_escape_string($_POST['immatriculation']);
$depart = mysql_real_escape_string($_POST['depart']);
$arrivee = mysql_real_escape_string($_POST['arrivee']);
$ptac = mysql_real_escape_string($_POST['ptac']);
$modele = mysql_real_escape_string($_POST['modele']);
$commentaires = mysql_real_escape_string($_POST['commentaires']);
$etat = mysql_real_escape_string($_POST['etat']);


$db = &$gCms->GetDb();
$query = "UPDATE perso_demande SET datelimite='".$datelimite."', agence='".$agence."', nom='".$nom."', mail='".$mail."', parc='".$parc."', immatriculation='".$immatriculation."', depart='".$depart."', arrivee='".$arrivee."', ptac='".$ptac."', modele='".$modele."', commentaires='".$commentaires."', etat='".$etat."'  WHERE id = ".$id." ";
$dbresult = &$db->Execute($query);
if ($dbresult) $dbresult->Close();

echo "demande enregistrée";

donc si quelqu'un pige quelquechose à mon problème je suis preneur pour un peu d'aide!
merci
Bonjour

Est-ce que le traitement du formulaire est tout de même réalisé ?
Avec l'UDT dans mon second bloc de contenu: oui
Avec l'UDT dans mon content: non

c'est à n'y rien comprendre!
Essaie de changer le nom de ton champ "id". Met par exemple "idDemande". Dès que fois que la valeur "$_POST['id'] soit déjà utilisée, vu que c'est un nom assez "générique"...
Trop fort!!!! Big Grin Big Grin

c'était bien ça le soucis! pour lme {contrent} qui disparaissait.
reste plus que la fermeture de la connection à la base de données...
Super !
Mieux vaut ne pas fermer la connexion, je pense que me CMS s'en charge.. sinon il ne peut plus continuer à faire des requêtes pour afficher la suite Wink Enfin je suppose..
bennn, j'ai vu sur les différent post du forum qu'après chaque requète traitée, on trouvait une fermeture de connection sous la forme:
Code :
if ($dbresult) $dbresult->Close();
donc, je me dis que ça doit avoir son utilité au niveau de la sécurité mais là du coup ça me bloque tout Sad

déjà, ça fonctionne comme ça, c'est bien! et si je peux résoudre de ce dernier cas de conscience, c'est mieux! Wink
Ben là par contre je préfère pas trop m'avancer sur ce point... parce que la fermeture de la connexion, ca serait peut-être plutôt quelque chose comme :
Code :
$db->Close()
Mais ca doit tout foutre en l'air Smile
En tout cas sur tous les tags utilisateurs partagés, je ne l'ai pas vu :
http://wiki.cmsmadesimple.org/index.php/..._tags_here

Quelqu'un d'autre peut donner son avis ?
Tu ne rentres jamais dans tes boucles : if($resultChamps12 = "1")
Tu ne veux pas plutôt écrire == ?

Pour les close(), ils sont optionnels : http://phplens.com/phpeverywhere/adodb_french
Ah si je veux bien utiliser == Smile
Ca fonctionne comme ça donc, je ne suis pas allé cherché plus loin mais je vais corriger cette syntaxe.
Si vous voyez d'autres choses corrigibles, je suis preneur.

merci airelibre et jean le chauve
Merci Jean le chauve pour l'info Smile

snatch1974, si le sujet est résolu, merci d'ajouter [Résolu] au début du titre de ton premier post Smile