Page 1 sur 1

Aide pour concéption d'un sondage

Posté : 24 mai 2012, 19:43
par Fre3z69
Salutation à tous

Actuellement je me suis remis sur le php, afin de finaliser mon forum (qui depuis le temps n'est toujours pas "fini"), et je souhaite créer un système de sondage (crée uniquement par un administrateur (sur le forum) et qui serais affiché au dessus du topic à l'instar de phpbb.

Afin de m'aider à concevoir cela, j'aimerais vous demander votre avis quand à la manière de s'y prendre, puis une fois bien compris, je m'y attèlerais.

Merci de votre aide

Cordialement

Re: Aide pour concéption d'un sondage

Posté : 25 mai 2012, 10:52
par moogli
salut,

il faut commencer par modéliser la chose.

un sondage c'est quoi ?
une question
des réponses possibles

A l'instar d'un forum on va avoir deux tables une pour les "questions"
par exemple
create table users (
	idUser int unsigned not null auto_increment primary key,
	nom		varchar(25) not null
)engine=innodb;
create table sondages (
	idSondage 	int unsigned not null auto_increment primary key,
	idUser		int unsigned not null,
	titreSondage varchar(50) not null,
	description	varchar(250) not null,
	constraint fk_user foreign key(idUser) references users(idUser)
) engine=innodb;

create table reopnseSondage(
	idQuestion	int unsigned not null auto_increment primary key,
	idSondage	int unsigned not null,
	question	varchar(250)	not null,
	nbvote		int not null	default 0,
	constraint fk_sondage foreign key (idSondage) references sondages(idSondage)
)engine=innodb;
la table utilisateur c'est pour t'indiquer qu'un sondage est posté par un utilisateur, mais tu peux très bien imaginer autre chose (par exemple lier le sondage à un sujet du forum, pour cela ajoute un foreign key dans la table sondage).

Avec ça tu a :
- une table sondage avec une titre et une description (la question quoi)
- une table reponseSondage dans laquelle tu va mettre toute les réponse possible à un sondage. La colonne nbvote permet de comptabiliser le nombre de vote cette réponse.

Après à l'affichage c'est toi qui voit. si le sondage est lié à un sujet il faut faire la liaison entre les sujets et les sondages.

tu peux aussi modifier la chose pour avoir une table en plus qui va enregistrer les votes des membres, histoire de pas avoir de memebre qui vote 400 fois
la table est simple
- idUser
- idResponse
voir idSondage pour te simplifier la vie :) (bien sur virer le nbvote dans la table reponse vu qu'il ferais doublon pour le coup).

@+

Re: Aide pour concéption d'un sondage

Posté : 29 mai 2012, 15:31
par Fre3z69
Merci pour ces explications, je vais m'y attelé

En effet, les sondages seront liés aux topics où ils ont étaient crées

Merci en tout cas

Cordialement

Re: Aide pour concéption d'un sondage

Posté : 29 oct. 2012, 14:17
par Fre3z69
Ayant pas eu le temps de m'occuper de cela plus tôt, je remonte ce message afin de demander de l'aide sur mon script.

Avant toute choses, voici mes tables

La table des sondages
CREATE TABLE IF NOT EXISTS `t_polls` (
  `polls_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `topic_id` int(10) unsigned NOT NULL,
  `users_id` int(10) unsigned NOT NULL,
  `polls_title` varchar(255) NOT NULL,
  PRIMARY KEY (`polls_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
La table des questions
CREATE TABLE IF NOT EXISTS `r_polls_isfrom_question` (
  `question_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `polls_id` int(10) unsigned NOT NULL,
  `question_content` varchar(250) NOT NULL,
  `nbvote` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`question_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
Voici mon problème

Lors de l'inscription d'un sondage, je dois récupérer le dernièr "polls_id" afin de l'insérer dans la table "r_polls_isfrom_question"

Je ne sais pas comment m'y prendre, auriez vous une suggestion?

Voici ce que j'ai fait pour l'inscription d'un sondage:
		$polls_title=$_POST['polls_title'];
		$polls_question=$_POST['polls_question'];	
		$topic_id=$_POST['topic_id'];
		
		$polls=$cnx->prepare('INSERT INTO t_polls
		(polls_title, topic_id)
		VALUES(:polls_title, :topic_id)');
		$polls->bindValue(':polls_title', $polls_title, PDO::PARAM_STR);
		$polls->bindValue(':topic_id', $topic_id, PDO::PARAM_INT);
		$polls->execute();	
		$polls_question = $_POST['polls_question'];
		$order=$cnx->prepare('SELECT
		 question_order
		FROM r_polls_isfrom_question	
		ORDER BY question_id DESC
		LIMIT 0 , 1');
		$order->execute();		
		if ($order->rowCount()!=0){
			$data=$order->fetch();{
				$question_order = $data['question_order']+1;
			}
		}
		else{
			$question_order = 1;
		}
		print_r($polls_question);
		foreach($polls_question as $content){
			$polls=$cnx->prepare('INSERT INTO r_polls_isfrom_question
			(question_id, polls_id, question_content)
			VALUES(:polls_id, :question_order, :question_content)');
			$polls->bindValue(':polls_id', $polls_id, PDO::PARAM_INT);
			$polls->bindValue(':question_order', $question_order, PDO::PARAM_INT);
			$polls->bindValue(':question_content', $content, PDO::PARAM_STR);
			$polls->execute();
		}	
		$polls->CloseCursor(); 
		echo'<p><span class="reussi">Le sondage a bien &eacute;t&eacute; ajout&eacute; !</span></p>';