Ok, j'y retourne ici, ça a pas l'air de fonctionner en messagerie privée (désolé Teclis01)
Donc je vais te montrer comment il faut travailler avec les objets, afin de créer des interfaces de programmation sympatoches...
Voici comment j'aurais fait le truce :
Tu pose dans ta base un table questionnaire. Cette table contiendra temporairement les réponses aux différents questionnaire. Une ligne par questionnaire et par utilisateur.Id => INT(10) unsigned notnull autoincrement primarykey
PHPSESSID => CHAR(32) pour reconnaitre l'utilisateur
questionnaire => VARCHAR(255) pour reconnaitre le questionnaire
responses => TEXT pour rentrer les réponse de l'utilisateur au dit questionnaire
Puis tu fais une classe qui gère cette table. L'interface ! Ainsi, si tu change le nom d'un champ dans ta table, pas besoin de faire le tour de tout tes scripts pour répercuter la modification.class questionnaire {
// le nom du questionnaire pour enregistrer dans la base
var $nom;
// ici : le constructeur de la classe... C'est lui qui donne le nom à la création
function questionnaire( $nom );
// une fonction à usage interne pour la connexion MySQL
function connexionMySQL() ;
// Ici, tu envoi un de tes questionnaires (selon le nom) à l'affichage...
// par exemple un grand switch( $this->nom ) { case 'A' : include 'questionnaireA.php'; break; ...
function afficherQuestionnaire();
// Une fonction qui valide le questionnaire
// Elle regarde dans $_POST pour savoir si les réponses intéressantes ont été soumise
function validerReponse();
// Enregistre les réponse dans la base de données, retourn l'identifiant créé (mysql_insert_id();)
function enregistrerReponse();
// Retourne les réponse à partir de l'id (action inverse en gros)
function sortirReponse( $id );
// on videra la table des réponse de l'utilisateur après envoi...
function viderTable();
}
Ensuite, tu va faire un script choix_questionnaire.php. Celui où ton utilisateur choisi les questionnaires auquel il veut répondre...
<?php
// Donc après soumission on stock le choix dans une variable de session
// un questionnaire non renseigné aura une valeur de 0
// sinon, il s'agira de l'id de la réponse
if( $_POST['action'] == valider ) {
foreach( $_POST['questionnaire'] as $nom ) {
$_SESSION['questionnaire'][$nom_questionnaire] = 0;
}
// On passe à la suite
header("Location: questionnaire.php");
exit;
}
?>
<form>
<select mutliple name="questionnaire">
<option value="A">questionnaireA</option>...
</select>
<input type="submit" name="action" value="Valider" />
</form>
Puis dans questionnaire.php, c'est là ou ta classe prend toute sa valeur
<?php
// d'abord, on choisi le prochain questionnaire non renseigné
$nom_questionnaire = false;
// fouillle dans la session
foreach( $_SESSION['questionnaire'] as $nom=>$id ) {
if( $id == 0 ) { // j'en ai trouvé un non renseigné
$nom_questionnaire = $nom;
break; // on sort du foreach !
}
}
// Condition "si j'en ai pas trouvé"
if( $nom_questionnaire === false ) {
// on passe à la suite
header("Location: envoi.php");
exit;
}
// Donc là, on créer le dit questionnaire...
$questionnaire = new questionnaire( $nom_questionnaire );
// Si l'utilisateur vient de répondre au questionnaire
if( $questionnaire->validerReponse() ) {
// on enregistre sa réponse
$id = $questionnaire->EnregistrerReponse( $_POST['reponse'] );
// on se souvient que le questionnaire a été rempli
$_SESSION['questionnaire'][$questionnaire->nom] = $id;
// Et on retourne au début du script (nouvel appel) pour choisir un autre questionnaire
header("Location: questionnaire.php");
exit;
}
else {
// sinon, on affiche brutal le questionnaire
$questionnaire->afficherQuestionnaire();
}
?>
Et enfin !!! envoi.php
<?php
$reponse = '';
// création d'u questionnaire blanc... (pas très propre comme façon de faire)
$questionnaire = new questionnaire('');
// pour chacun des quesqtionnaire répondu, je retrouve la reponse et forme le message avec
foreach( $_SESSION['questionnaire'] as $nom=>$id ) {
$reponse.= $questionnaire->sortirReponse( $id );
}
?>
voili voilou dans le principe...
Le problème ici est posé par les fonctions afficherQuestionnaire, validerReponse et sortirReponse ; car je suppose que tes questionnaires sont différent ! (sinon pourquoi en faire plusieurs ?)
pour cela, il faudrait faire de l'héritage... Exemple :
Tu parts de la classe questionnaire décrite ci-dessus et tu vas "surcharger" ces fonctions dans des classes "filles"
class questionnaireA extends questionnaire {
function questionnaireA() {
parent::questionnaire( 'A' );
}
function afficherQuestionnaire() {
// Affichage personnalisé du questionnaire A
}
function validerReponse() {
// validation personalisée
}
function sortirReponse( $id ) {
// on attrape dans la base de données
$reponse = parent::sortirReponse( $id );
// puis tu formates la réponse à ton grès
}
}
et ainsi de suite : questionnaireB, C, D...
A ce moment là, dans questionnaire.php
if( class_exists("questionnaire$nom ) ) {
eval( "\$questionnaire = new questionaire$nom();");
} else trigger_error("questionnaire$nom non trouvé !?!");
Avec tout ça, je pense que tu as du grain à moudre ;)
bonne chance...