Wíe funktionieren Votes?

FactorX

Mitglied
Ich habe vor, einen Vote zu programmieren, der mittels MySQL Datenbank auch beliebig viele Optionen haben kann. Leider ist mir nicht ganz verständlich wie das funktioniert - denn mir würde nur die Idee kommen, die Tabellen um einige Felder zu erweitern, wenn mehr Optionen folgen sollen. Allerdings ist das viel zu umständlich und langsam.

Wie würde denn eine performante und praktische Lösung aussehen? Ich habe leider keine Ahnung :(
 
du willst beliebig viele antwort möglichkeiten haben ? - hab ich das richtig verstanden ? ... gut !

1. Tabelle:

question

mit ID und question spalten.


2. Tabelle

votes

mit question_ID , antwort und der anzahl der votes ...

dann kannst du auch mehrere polls gleichzeitig benutzen.
 
Ganz einfach: Du erstellst dir eine Tabelle mit beispielsweise 4 Feldern: ID, Frage, Antworten, Ergebnis

Erstellst du nun einen neuen Poll, speicherst du die Antworten in ein Array. Dieses Array bringst du dann mittels serialize() in eine speicherbare Form und schreibst es in die Datenbank.
Bsp.:
PHP:
<?
switch ($_POST['action']) {
	case "getanswers": ?>
		<h2>Neuer Poll</h2>
		<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
			<input type="hidden" name="action" value="addpoll">
			<input type="hidden" name="frage" value="<?=$_POST['frage']?>">
			Frage: <?=$_POST['frage']?><br>
			<? for ($i=1; $i<=$_POST['antworten']; $i++) { ?>
			Antwort <?=$i?>: <input type="text" name="antworten[]"><br>
			<? } ?>
			<input type="submit">
		</form> <?
	break;

	case "addpoll":
		$frage = $_POST['frage'];
		$antworten = serialize($_POST['antworten']);
		mysql_query("INSERT INTO polls (Frage, Antworten) VALUES ('$frage', '$antworten')");
		echo "Poll eingetragen!";
	break;

	default: ?>
		<h2>Neuer Poll</h2>
		<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
			<input type="hidden" name="action" value="getanswers">
			Frage: <input type="text" name="frage"><br>
			Anzahl der Antworten: <input type="text" name="antworten"><br>
			<input type="submit">
		</form> <?
} ?>

Beim Auslesen musst du dann nur unserialize() verwenden, und schon hast du wieder ein Array zur Verfügung. Selbiges machst du natürlich mit dem Feld Ergebnis. Da kommt ein Array hinein, das die Anzahl der Antworten enthält.

Alles klar?


reima


PS: Oder so @rookie... Bei genauerer Betrachtung gefällt mir deine Möglichkeit sogar schon fast besser ;)
 
Zuletzt bearbeitet:
Original geschrieben von rookie
du willst beliebig viele antwort möglichkeiten haben ? - hab ich das richtig verstanden ? ... gut !

1. Tabelle:

question

mit ID und question spalten.


2. Tabelle

votes

mit question_ID , antwort und der anzahl der votes ...

dann kannst du auch mehrere polls gleichzeitig benutzen.

Also, so ganz verstanden hab ich das leider nicht :(
Kannst du mir mal in etwa die Tabellenstrukturen hinschreiben und die Funktion jedes Feldes erklären?

Das wäre echt nett.... ;)
 
PHP:
CREATE TABLE question (
 		id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 		question VARCHAR(30) NOT NULL
 		);

CREATE TABLE answers (
 		question_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 		answer VARCHAR(30) NOT NULL,
 	        votes INT(10) DEFAULT "0"
 		);

so ungefähr würd' ich das machen.

question = Frage,
answer = Antwort,
votes = Anzahl der Votes,
question_id = die ID aus der anderen Tabelle.

so war das einleuchtend ? :P
 
also du machst zwei Tabellen, die eine heisst question, die andere votes.

in question wird eine id für jede frage festgehalten (kann ja ruhig auto-increment sein) und natürlich die jeweilige frage.

in votes dagegen kommen die möglichen antworten, die anzahl der votes, und mit question_id wird festgelegt, auf welche id (bei question) sich diese antwort bezieht.

z.B. :

CREATE TABLE question
(
id int(11) NOT NULL auto_increment,
question text NOT NULL,
PRIMARY KEY (id)
)


CREATE TABLE votes
(
question_id int(11) NOT NULL default '0',
antwort varchar(250) NOT NULL default '',
votes int(11) NOT NULL default '0'
)
 
oh, das hab ich gar nicht gesehen...sorry.
das kommt davon, wenn man erst alle fenster wo man posten will aufmacht, dann erst duschen geht und dann erst antwortet...
ähem, ist das peinlich... :-(
 
Zurück