zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

Machen Sie eine Abstimmung / Umfrage.

Die Aufgabe läßt sich in mehrere Teilaufgaben zerlegen.

  • die Abstimmung,
  • Speicherung der Werte,
  • Visualisierung der Daten

Die Datenbank-Tabelle z_abstimmung erzeugen sie mit folgendem SQL Kommando. Wie und mit welchem Tool das möglich ist wurde bereits auf der Seite die Datenbank spricht SQL angerissen.

CREATE TABLE `z_abstimmung` (
  `id` int(11) NOT NULL auto_increment,
  `eins` int(11) default '0',
  `zwei` int(11) default '0',
  `drei` int(11) default '0',
  `vier` int(11) default '0',
  `fuenf` int(11) default '0',
  `sid` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM ;

Die Modularisierung zahlt sich schon aus.

Die Klassen BaseDbMapper und SessionClass aus der Login Verwaltung sind hier gleich nützlich. Zwei neue Klassen VoteDbMapper und Vote stellen die notwendigen Methoden und Eigenschaften bereit.
Wozu die SessionClass? Siehe unter Übrigens

Die Datei z_votedbclass.php5 mit den Methoden checkVote = wurde bereits abgestimmt?, insertVote = neue Abstimmung eintragen, und get_sum = ermittle Gesamtergebnis:

class VoteDbMapper extends BaseDbMapper {

public function checkVote ($sid) {
  $sql  = "
  SELECT 
    *
  FROM z_abstimmung 
  WHERE sid like '$sid'
  ";
  $result = $this->base_query($sql);
  return $result->num_rows >= 1;
}

public function insertVote ($v) {
  $sql  = "
  INSERT INTO z_abstimmung  
    (eins,zwei,drei,vier,fuenf,sid) 
  VALUES ( $v->eins,
           $v->zwei,
           $v->drei,
           $v->vier,
           $v->fuenf,
          '$v->sid')
  ";
  $this->base_query($sql);
}

public function get_sum () {
  $returnvalue = null;
  $sql  = "
  SELECT 
    sum(eins) as eins, 
    sum(zwei) as zwei,
    sum(drei) as drei, 
    sum(vier) as vier, 
    sum(fuenf) as fuenf,
    sum(eins+zwei+drei+vier+fuenf) as sum 
  FROM z_abstimmung
  ";
  $result = $this->base_query($sql);
  return new Vote($result->fetch_assoc());
  }
}

Die Datei z_voteclass.php5 mit der Klasse Vote.

class Vote {
  private $daten;
	
  public function __construct($vote=null){
    $this->daten = array (  'id' => '',
                            'eins' => 0,
                            'zwei' => 0,
                            'drei' => 0,
                            'vier' => 0,
                            'fuenf' => 0,
                            'sid' => '',
                            'sum' => 0);
    if (is_array($vote)) {
      foreach ($vote as $feld => $wert){
        $this->$feld = $wert;
      }
    }
  }

  public function __set($eigenschaft, $wert){
    $this->daten[$eigenschaft] = $wert;
  }

  public function __get($eigenschaft){
    if (isset($this->daten[$eigenschaft])) {
      return $this->daten[$eigenschaft];
    } else {
      return false;
    }
  }
}

 Eine korrekte Abstimmung im Web durchzuführen ist nicht ganz einfach.

Ich verwende hier die Session-Id als Kennzeichnung um mehrfache Abstimmungen zu verhindern. Für diese einfache Demo sicher ausreichend aber eben nicht "schummelsicher". Denkbar wäre auch eine Registrierung der IP-Adresse, aber wegen der Verwendung dynamischer Adressen würden Sie möglicherweise Berechtigte von der Abstimmung ausschliessen.

Also: Ihre Ideen gegen die eines Schummlers. Einen kleinen Vorteil haben Sie: Die "Sicherungen" sind nur Ihnen bekannt.

Für diese Anwendung, isoliert betrachtet, ist die Klasse Session "oversized" (das geht wesentlich einfacher), aber diese Webanwendung insgesamt besitzt diese Klasse und dann kann man sie auch verwenden.

Logo