Umfrage - Probleme mit Ausgabe der Ergebnisse

diggity

Erfahrenes Mitglied
Hi Jungs!

Ich schreib ja grad an meiner Umfrage, funktioniert eigentlich alles schon recht gut, bis auf die Ausgabe. Die Ausgabe für die aktuelle Umfrage funktioniert bestens, doch ich hab noch die Funktion eingebaut dass man sich die Ergebnisse alter bzw. vergangener Umfragen auch ansehen kann. Ist im Prinzip genau das Selbe wie die Ausgabe der aktuellen Umfrage, aber ich hab da ein paar Probleme ...

Das Script zur Ausgabe der aktuellen Umfrage sieht folgendermaßen aus:
PHP:
<?php
	require("inc/db.php");	
	mysql_connect($dbhost,$dbuser,$dbpass) or die ("Keine Verbindung zur db moeglich");
	mysql_select_db($dbbase) or die ("db gibts net"); 
	$res = mysql_fetch_row(mysql_query("SELECT frage,id FROM umfrage_fragen WHERE status = '1'")); //status = 1 bedeutet dass die umfrage aktiv ist
	$res_antworten =  mysql_query("SELECT * FROM umfrage_antworten WHERE frage_id = '$res[1]'"); //antworten für entsprechende frage holen

	while($row = mysql_fetch_array($res_antworten)) {
		$votes[] = $row['votes'];
	}
	$votes_ges = array_sum($votes); //anzahl der votes gesamt für diese frage
?>	
	Die derzeitige Umfrage: <strong><?php echo $res[0]; ?></strong><br /><br />
	Zwischenstand (<?php echo $votes_ges; ?>&nbsp;Stimmen):<br /><br />
	<table style="border: 0; width: 99%;" cellpadding="1" cellspacing="1">
<?php
	$res_antworten =  mysql_query("SELECT * FROM umfrage_antworten WHERE frage_id = '$res[1]' ORDER BY id ASC");
	while($row = mysql_fetch_array($res_antworten)) {
	$prozent = substr($row['votes'] / $votes_ges * 100, 0, 4) . "%"; //prozentangabe
?>
	<tr>
		<td style="width: 40%; text-align:left"><?php echo $row['antwort']; ?></td>
		<td style="width: 10%; text-align:right"><?php echo $prozent; ?>&nbsp;(<?php echo $row['votes']; ?>)</td>
		<td style="width: 50%; padding: 3px 3px 3px 3px;"><div style="width: <?php echo floor($prozent*3); ?>px; height: 15px; padding: 3px 3px 3px 3px; border: solid 1px #333366; background-color:#33CC66;">&nbsp;</div></td>
	</tr>
<?php } ?>
</table>

Wie gesagt, das funktioniert wunderbar.

Jetzt zu meinen Problemchen mit den alten Ergebnissen. Die Ausgabe ist eigentlich genau die Selbe, nur muss ich noch eine while-Schleife drüber legen um eben wirklich alle Fragen auszulesen. Gesagt getan, das Ergebnis sieht eher bescheiden aus: http://dick.at/xanthos/tmp/poll.jpg
Gemeint ist das umrahmte, das sind die vergangenen Umfragen. Wie man sieht stimmen weder Stimmenzahl (gesamt, bei den einzelnen Antworten stimmt die Zahl) und dadurch sind halt die Prozentangaben auch falsch ....
Beim Code komme ich einfach nicht weiter, das Schleifenkonstrukt ist auf jeden Fall falsch. Wisst ihr wie ich das hinbekomme?

So sieht's aus:
PHP:
<?php
	require("inc/db.php");	
	mysql_connect($dbhost,$dbuser,$dbpass) or die ("Keine Verbindung zur db moeglich");
	mysql_select_db($dbbase) or die ("db gibts net"); 
	$res = mysql_query("SELECT frage,id FROM umfrage_fragen WHERE status = '0' ORDER BY id DESC"); //status = 0 bedeutet dass die umfrage inaktiv bzw. alt ist
	while($row = mysql_fetch_array($res)) {
		$frage_id = $row['id'];
		$res_antworten =  mysql_query("SELECT * FROM umfrage_antworten WHERE frage_id = '$frage_id'"); //antworten für entsprechende frage holen

		while($row_votes = mysql_fetch_array($res_antworten)) {
			$votes_alt[] = $row_votes['votes'];
		}
		$votes_ges = array_sum($votes_alt); //anzahl der votes gesamt für diese frage
?>	
		Frage: <strong><?php echo $row['frage']; ?></strong>&nbsp;
		(<?php echo $votes_ges; ?>&nbsp;Stimmen):<br /><br />
		<table style="border: 0; width: 99%;" cellpadding="1" cellspacing="1">
<?php
		$res_antworten =  mysql_query("SELECT * FROM umfrage_antworten WHERE frage_id = '$frage_id' ORDER BY id ASC");
		while($row_aw = mysql_fetch_array($res_antworten)) {
			$prozent = substr($row_aw['votes'] / $votes_ges * 100, 0, 4) . "%"; //prozentangabe
?>
		<tr>
			<td style="width: 40%; text-align:left"><?php echo $row_aw['antwort']; ?></td>
			<td style="width: 10%; text-align:right"><?php echo $prozent; ?>&nbsp;(<?php echo $row_aw['votes']; ?>)</td>
			<td style="width: 50%; padding: 3px 3px 3px 3px;"><div style="width: <?php echo floor($prozent*3); ?>px; height: 15px; padding: 3px 3px 3px 3px; border: solid 1px #333366; background-color:#33CC66;">&nbsp;</div></td>
		</tr>
<?php 
		}
?>
		</table><br /><br />
<?php
	}
?>

Ich hoffe ihr könnt mir helfen bzw. findet den Fehler.

Danke schonmal!
 
Zuletzt bearbeitet:
Hallo

Wenn man mal nicht weiter kommt ist es eventuell gar nicht so schlecht sein Script von Grundauf noch mal nachzulesen. Wichtig aber ist eine logisch gute Datenbank der Umfarge:

Code:
Tabelle: umfrage
id – group – frage –antwortmgl - views

Dabei könnten die Datensätze wie folgt aussehen:
Code:
Tabelle: umfrage
1 – 1 – Wie Groß bin ich? – 176 cm – 0
2 – 1 – Wie Groß bin ich? – 174 cm – 14
3 – 1 – Wie Groß bin ich? – 180 cm – 28
4 – 2 – Wie Alt bin ich? – 20 j – 17
4 – 2 – Wie Alt bin ich? – 22 j – 11
4 – 2 – Wie Alt bin ich? – 24 j – 5
…

Kommen wir zur Tabelle. Du sihehst sowohl die Frage, die Antwortmöglichkeiten als auch die Views(klicks) sind alle in einer einzigen Tabelle versehen. Das Spart Performenc für den Zugriff auf eine 2te Tabelle. Anhand der Spalte Group läst sich ermitteln, welche Antworten zur gleiche Frage gehören.

Als erstes versuche doch zu ermitteln wieveil Antworten überhaupt zu einer Umfrage gehören!

PHP:
<?
$umfragegroup = 1; // Gruppierungsnummer der DB
$result = mysql_query("SELECT COUNT(*) AS zahl FROM umfrage WHERE group = ' $umfragegroup' "),
while($row=mysql_fetch_assoc($result)){
$anz_antw = $row['zahl']; // Anzahl der Antworten;
 } 
?>

Als nächstes vergewissere dich, ob überhaupt eine Umfrage mit der group existieret und ob überhaupt Antwortmöglichkeiten gegeben sind: - und ob es sich bei der Übergabe des Wertes tatsächlich um eine nummer handelt!

PHP:
if(!isset($anz_antw)) or $anz_antw == 0 or !is_numeric($anz_antw)) { die('Eine Umfrage mit dieser ID ist nicht vorhanden oder ungültig!'); }

So jetzt sollen wir wissen wieveil Gesammt Stimmen vergeben wuurden:
PHP:
$result = mysql_query("SELECT * FROM umfrage WHERE group = ' $umfragegroup' "),
$anz_stimmen = 0;
while($row = mysql_fetch_assoc($result)){
$anz_stimmen += $row['views']
}

Danach haben wir ja dir anzahl und der Script kann nun alle Fragen und antworten auslesen. Wichtig ich mach die Ausgabe schlicht. Du kannst später selbst eine schöne Tabelle daraus machen!

PHP:
$result = mysql_query("SELECT * FROM umfrage WHERE group = ' $umfragegroup' "),
while($row = mysql_fetch_assoc($result)){
if(!isset($frage)) { $frage = $row['frage']; }
// DIVISION BEI ZERO Vermeiden
$prozent = ($anz_stimmen / 100) * $row['views']; 
$string .=  $row['antwortmgl']." - ".$row['views']."Stimmen - ".$prozent."%<br>";
unset($row,$prozent);
}

echo $frage."<br>".$string;


Alles klar?

PS Sorry hab den letzten Abschnichnitt nochmal nachgebessert jetzt sollte es stimmen!

PPS noch mal eine Nachbesserung:
PHP:
$prozent = ($anz_stimmen / 100) * $row['views'];
Im letzten Abschnitt, so jetzt sollte es aber :)
 
Zuletzt bearbeitet von einem Moderator:
Danke für deinen Lösungsvorschlag, ist wesentlich schöner programmiert als meines. Hab ich jetzt aber nicht umgesetzt, da es mir zu viel Aufwand ist alles noch mal neu zu machen.
Eine einzige Zeile am Ende meiner while-Schleife brachte den erwünschten Erfolg:
PHP:
	unset($votes_alt);

Irgendwie eh logisch jetzt im Nachhinein ...

Danke!
 
Zurück