Einen Poll mit MySQL

Tim C.

Erfahrenes Mitglied
DIREKT ZU BEGINN - Ja ich habe mir schon die tutorials angeguckt, ja ich habe schon die Suchfunktion genutzt und mir diverse andere topics durchgelesen und ja ich habe mir bestimmt schon drei bis vier fertige Scripte durchgesehen.

Aber mein großes Problem ist ich glaube, dass man das oftmals viel viel einfacher machen kann. Da ein Poll doch im Prinzip nur ein "abgewandelter Counter" ist der halt den Count nicht "on Visit" sondern "on Click" macht und halt bei der Option die man auswählt. Allerdings als ich gestern einen gecodet hab, hat meine MySQL Datenbank solange rumgezickt bis ich so gereizt war, das ich den ganzen mist wieder gelöscht habe. Nunja.

Ich wäre nun sehr dankbar, wenn mir irgendwer zumindest einen Ansatz liefern könnte, wie ich das Ansetze. Ich hatte an eine Tabelle mit 13 feldern Gedacht.
1) ID
2) totalvotes
3) question
4) - 13) option1 - option5 und option1hits - option5hits

^^ ich hoffe es ist klar wie ich das meine, wenn nicht poste ich mal den auszug aus der datenbank verwaltung.

Allerdings streiken meine queries usw.
PS: ne reloadsperre brauche ich (zumindest zuertmal) nicht.
 
Hallo leuchte.

Ich würde da so ansetzen, dass ich eine Tabelle mit folgenden Feldern erstelle:
Code:
CREATE TABLE `vote` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`question` TEXT NOT NULL, 
`options` TEXT NOT NULL, 
`votes` TEXT NOT NULL, 
`totalvotes` INT UNSIGNED NOT NULL,
UNIQUE (`id`)
);
Zur Erklärung: id sollte klar sein, question und totalvotes ebenso. Bei den Feldern options und votes wird's allerdings interessant: Diese enthalten jeweils ein mit implode in eine Zeichenkette umgewandeltes Array. Das sieht dann z.B. so aus:
Code:
id		`13`
question		`Wie gefällt euch diese Site?`
options		`sehr gut|gut|mittelmäßig|verbesserungswürdig`
votes		`16|8|6|2`
totalvotes	`32`
Wird nun eine Stimme abgegeben, sieht das z.B. so aus:
PHP:
<?
// $option wird vom Formular übergeben
$vote = mysql_fetch_array(mysql_query("SELECT * FROM vote ORDER BY id DESC LIMIT 0,1");
$vote[votes] = explode("|", $vote[votes]);
$vote[votes][$option]++;
$vote[votes] = implode("|", $vote[votes]);
$vote[totalvotes]++;
mysql_query("UPDATE vote SET votes = `$vote[votes]`, totalvotes = `$vote[totalvotes]` WHERE id = `$vote[id]`");
?>
Alles klar? ;)

Der Vorteil bei dieser Methode ist natürlich, dass man auch mehr als nur 5 Optionen zur Wahl stellen kann.

Ich denke mal, dass dir das jetzt als Anregung reichen sollte und wünsche dir viel Spaß beim Implementieren ;)


reima
 
der reima....

...thx again. irgendwie bist du immer derjenige der mir am schnellsten und besten hilft :) *schleim*
Naja thx für die echt gute anregung ich werde es vielleicht nachher oder morgen mal probieren und dann schreiben wie es geklappt hat.
 
Moin, bin hier eben reingerutscht und musste feststellen, dass ich mit der Zeile:
PHP:
$vote[votes][$option]++;
ein Problem habe.
Kann mir jemand diese Zeile erklären?
Für mich bedeutet es, dass die Zahl der Stimmen bei der entsprechenden Option um 1 erhöht wird.
Habe ich das richtig verstanden?
Wenn ja, verstehe ich nicht, wie das zugeordnet wurde. Vielleicht durch mysql_fetch_array?

Fragen über Fragen... :(
 
$option muss in diesem Fall eine Zahl sein, die durch das das Formular übergeben wird!
Also zB 0 für "sehr gut",1 für "gut" usw.
Du hast das schon richtig verstanden. Durch das explode() wird das feld "votes" zu einem array gemacht, und zwar an den stellen wo ein | steht.

Verstanden? :)

edit: implode() macht einfach das gegenteil, es schreibt die Werte des arrays in einen string, indem die einzelnen Werte von einem | getrennt sind :)
 
Ja, soweit klar.
Mir ging es nur darum, ob mit der genannten Zeile der Vote-Wert incrementiert wird, welcher zu der Option dahinter passt.
Die beiden werden ja quasi zusammengeführt.
 
Zurück