Problem bei Umfragenauswertung

Donni

Mitglied
Hi, ich habe ein kleines Problem. Ich habe mir eine Umfrage gebastelt, welche mit den IDs der registrierten User gefüttert wird. Es handelt sich um eine Schülerzeitung als Onlineversion und daher bleibt die anzahl der User auch konstant.
Die User sind von ID 1 - 27 Registriert. Der User mit der ID ist eine LehrerID und soll komplett aus der Umfrage ausgeschlossen sein.
Die Tablle der Umfrage sieht wie folgt aus:

ID | name | antworten | teilnehmer

ID und name sind für die Auswertung uninteressant.
Antworten enthalt die verschiedenen IDs sie gewählt wurden sind mit Komma getrennt, sowie auch ein abschließendes Komma.
Bei teilnehmer sieht es ähnlich aus, dort sind alle IDs die gewählt haben mit Komma getrennt aufgeführt. Die Teilnehmer machen auch keine Probleme

Also nun das Problem bei der Auswertung der Antworten:
Wenn ich mit meinen Script die Auswertung vornehme kommt es immer zu einer verschiebung der Antworten um -1. Ich habe schon einige Varianten versucht dieses Fehler zu unterbinden, jedoch keinen Wirksammen. Das merkwürdige ist auch das der Fehler nicht mehr auftritt sobald jeder eine Stimme bekommen hat. Jedem zuerst jedoch eine Stimmt zu geben und bei der Auswertung der Prozente abzuziehen funktioniert wiederrum nicht. Die Ergebnisse in der Datenbank sind auf jeden fall korrekt.

Hier nun mal der Ausschnitt vom Script:

PHP:
$erg = mysql_query("SELECT * FROM umfrage WHERE ID='".$_REQUEST['ID']."'");
    while($row = mysql_fetch_object($erg)){
        echo "<center><h3>$row->frage<br>Ergebnisse</h3>";
        $stimmen=explode(",",$row->antworten);
        $anzahl = count($stimmen);
        $werte;
        for($i =1;$i<=28;$i++){
            $werte[$i] = 0;
        }
        foreach($stimmen as $key){
            $werte[$key]++;
        }
        for($z = 28;$z<=$anzahl;$z++){
        unset($werte[$z]);
        }
        unset($werte[0]);
        $anzahl --;
        $zaehler=0;
        $c =0;
        foreach($werte as $w){
         echo $c." = ".$w."<br>";
         $c++;
        }
        echo "</center>";
        foreach($werte as $key){
            $zaehler++;
            $erg2 = mysql_query("SELECT * FROM schueler WHERE ID='".$zaehler."'");
            $row2 = mysql_fetch_object($erg2);
                if($zaehler==28){
                    break;
                }
                $prozent = sprintf('%1.1f', 100*($key)/$anzahl);
?>
                <table><tr>
                <td width='150'><?=$row2->name?></td>
                <td> </td><td width='<?=$prozent?>' bgcolor="#ff0000"></td><td><?=$prozent?><nobr>%</td><td> </td>
                </tr></table>
    <?php
        }
    ?>

</td></tr></table>
<?php
    }

Ich hoffe das ihr mit helfen könnt. Wäre super.
Auch schonmal danke für alle hilfreichen Antworten.

LG
 
Moin Donni,

das Problem dürfte sein, dass du beim exploden eines leeren Strings ein Array mit 1 Element zurückgegegen wird. Am Einfachsten kannst du das verhindern, indem du statt explode() [phpf]preg_split[/phpf] nutzt, denn dieser Funktion kannst du über eine Flag mitteilen, dass keine leeren Arrayelemente erzeugt werden sollen:

PHP:
$stimmen=preg_split('@,@',$row->antworten,-1,PREG_SPLIT_NO_EMPTY);

Den Lehrer kannst du dabei auch gleich aus dem Array werfen:
PHP:
$idDesLehrers=1;
$stimmen=preg_grep('@[^'.$idDesLehrers.']@',preg_split('|,|',$row->antworten,-1,PREG_SPLIT_NO_EMPTY));

Es soll natürlich nicht unerwähnt bleiben, dass du dort die DB ein wenig "missbrauchst" :-(
Diese kommaseparierten Daten sind nichts, was man so in einer DB speichert, weil sie nicht mit DB-Mitteln verarbeitbar sind...besser wäre es, wenn du eine neue Tabelle für die Antworten erstellst, und dort für jeden Antworter einen neuen Datensatz erzeugst.
 
Danke für die Antwort, habe es jetzt mit der neuen Tabelle für die Antworten verscht. Es funktioniert jetzt so wie es soll. :) Aber wieso einfach wenns auch kompliziert geht.:rolleyes:


LG
 
Zurück