Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 15 von 38

Thema: Umfrage mit PHP selbst für Leute die sich 0 auskennen!

  1. #1
    fiu
    fiu ist offline
    TP-Veteran Avatar von fiu
    Registriert seit
    Nov 2003
    Ort
    Graz
    Beiträge
    1.720

    Umfrage mit PHP selbst für Leute die sich 0 auskennen!

    Fast auf allen dynamischen Websites findet man Umfragen. Meist werden sie in Verbindung mit einer MySQL Datenbank benutzt; deshalb werde ich auch in diesem Artikel eine solche Datenbank benutzen. Geeignet ist dieser Artikel für diejenigen, die (noch) nicht wissen, wie eine Umfrage mit PHP zu realisieren ist.

    MySQL Tabelle erzeugen
    Code:
     CREATE TABLE umfragen (
         id int not null primary key auto_increment,
         frage varchar(255) not null,
         options text not null,
         hits text not null
    );

    Die ID dient zur eindeutigen Identifizierung einer Umfrage.
    Unter Options und Hits werden die einzelnen Optionen und deren Stimmen gespeichert.

    Variablen festlegen

    Zuerst sollten wir die Variablen für die MySQL Verbindung und die Konfiguration des Scripts festlegen.

    Datei config.php:
    PHP-Code:
    <?php 
    // MySQL Verbindungs Variablen 
    $host "localhost"
    $user "root"
    $pass "root"
    $dbname "website"

    // Verbindung aufbauen 
    $serverid mysql_connect($host$user$pass); 
    mysql_select_db($dbname$serverid); 

    // Konfiguration der Umfrage 
    $cookie true// Setzt einen Cookie nach der Abstimmung 
    $adminname "Admin"// Zur Administration der Umfragen 
    $adminpass "admin"// Passwort für Admin Account 
    $maxoptions 10// Maximale Optionsfelder, die im Adminbereich angezeigt werden 
    $blockdays 7// User dürfen erst nach X Tagen wieder an der Umfrage teilnehmen 
    ?>
    Administrationsbereich

    Nun brauchen wir natürlich eine Umfrage. Jedesmal an der Datenbank mit phpMyAdmin rumzuwerkeln ist zu umständlich, also bauen wir ein Webinterface zur Administration der Umfrage-Tabelle.
    Zuerst müssen wir überprüfen, ob der User schon eingeloggt ist. Wenn nicht, bekommt er ein entsprechendes Formular ausgegeben.

    Datei admin.php:
    PHP-Code:
    <?php 
    // Config Datei hinzuladen 
    include("config.php"); 

    // Wenn richtig -> Adminbereich 
    if($_POST["adminname"] == $adminname && $_POST["adminpass"] == $adminpass) { 

        
    // Wenn Erstellen geklickt wurde -> Neue Umfrage 
        
    if($_POST["submit"] == "Erstellen") { 
         
            
    // Definieren, dass $options und $hits ein Array ist 
            
    $options = array(); 
            
    $hits = array(); 
         
            
    // Array mit Werten füllen 
            
    for($i=0$i<$maxoptions$i++) { 
             
                
    // Überprüfen, welche Felder frei gelassen wurden 
                
    if($_POST["option" $i] != "") { 
             
                    
    $options[] = $_POST["option" $i]; 
                    
    $hits[] = 0
                 
                } 
             
            } 
             
            
    // Array in String für Datenbank umwandeln 
            
    $options implode(";"$options); 
            
    $hits implode(";"$hits); 
             
            
    // Eintragung in die Datenbank 
            
    $sql "INSERT INTO umfragen (frage, options, hits) "
            
    $sql .= "VALUES ('" $_POST["frage"] . "', '" $options "', '" $hits "')"
            
    $query mysql_query($sql$serverid); 
             
            
    // Check 
            
    if(mysql_affected_rows($serverid)) { 
             
                echo 
    'Neue Umfrage erfolgreich erstellt.'
             
            } 
            else { 
             
                echo 
    'Umfrage konnte nicht erstellt werden.'
             
            } 
         
        } 
        
    // Wenn nicht -> Admin Formular 
        
    else { 
         
            echo 
    'Neue Umfrage erstellen'
            echo 
    '<br><br>'
            echo 
    'Lasse Options-Felder die du nicht benötigst einfach leer.<br>'
            echo 
    '<form name="admin" action="' $_SERVER['PHP_SELF'] . '" method="post">'
            echo 
    '<input type="hidden" name="adminname" value="' $adminname '">'// Muss wegen Verifizierung nochmals übergeben werden 
            
    echo '<input type="hidden" name="adminpass" value="' $adminpass '">'// s.o. 
            
    echo 'Frage:<br>'
            echo 
    '<input type="text" name="frage" size="50"><br>'
            echo 
    'Optionen:<br>'
             
            
    // Ausgabe der Optionsfelder 
            
    for($i=0$i<$maxoptions$i++) { 
             
                echo 
    '<input type="text" name="option' $i '"><br>'
             
            } 
             
            echo 
    '<input type="submit" name="submit" value="Erstellen"></form>'
             
        } 

    // Wenn nicht -> Login Formular 
    else { 

        echo 
    '<form name="login" action="' $_SERVER['PHP_SELF'] . '" method="post">'
        echo 
    '<input type="text" name="adminname" value="Username"><br>'
        echo 
    '<input type="text" name="adminpass" value="Passwort"><br>'
        echo 
    '<input type="submit" value="Login"></form>'


    ?>
    Durch die Komprimierung der Optionen und deren Stimmen in 2 Strings spart man Platz und behält die Übersicht.

    Voting Formular

    So, nun wollen wir unsere erste Stimme abgeben. Dazu müssen alle Optionen der Umfrage mit entsprechenden Radio-Buttons ausgegeben werden.

    Datei vote.php:
    PHP-Code:
    <?php 
    // Config Datei hinzuladen 
    include("config.php"); 

    // ID der aktuellen Umfrage ermitteln 
    $id mysql_result(mysql_query("SELECT id FROM umfragen ORDER BY id DESC LIMIT 1"$serverid), 0"id"); 

    // Wenn abgestimmt wurde -> Datenbankeintrag 
    if($_POST["submit"] == "Vote") { 

        
    // Bisherige Stimmen aus der Datenbank holen 
        
    $sql "SELECT * FROM umfragen WHERE id=" $id
        
    $query mysql_query($sql$serverid); 
        
    $data mysql_fetch_array($query); 

        
    // String wieder zurück in ein Array einlesen 
        
    $data["hits"] = explode(";"$data["hits"]); 

        
    // Die Variable mit der Stimme des Users erhöhen 
        
    $data["hits"][$_POST["option"]]++; 
         
        
    // Array zurück in String 
        
    $data["hits"] = implode(";"$data["hits"]); 
         
        
    // Datenbank Update 
        
    $sql "UPDATE umfragen SET hits='" $data["hits"] . "' WHERE id=" $id
        
    $query mysql_query($sql$serverid); 
         
        
    // Check 
        
    if(mysql_affected_rows($serverid)) { 
         
            
    setcookie("voted"$idtime()+3600*24*$blockdays); 
            echo 
    'Deine Stimme wurde gezählt.'
            
    // User in 5 Sekunden zum Ergebnis der Umfrage weiterleiten 
            
    echo "<META http-equiv=refresh content='5; URL=result.php'>"
             
        } 
        else { 
             
            echo 
    'Fehler beim Abstimmen.'
             
        } 


    // Wenn nicht -> Ausgabe der Optionen 
    else { 

        
    // Überprüfen, ob User schon abgestimmt hat 
        
    if($_COOKIE["voted"] == $id) { 
         
            echo 
    'Du hast bereits abgestimmt - Beim nächsten Mal wieder.'
            
    // User in 5 Sekunden zum Ergebnis der Umfrage weiterleiten 
            
    echo "<META http-equiv=refresh content='5; URL=result.php'>"
            die(); 
         
        } 
         
        
    // Letzte (aktuelle) Umfrage aus der Datenbank holen 
        
    $sql "SELECT * FROM umfragen WHERE id=" $id
        
    $query mysql_query($sql$serverid); 
        
    $data mysql_fetch_array($query); 

        
    // String wieder zurück in ein Array einlesen 
        
    $data["options"] = explode(";"$data["options"]); 
         
        
    // Ausgabe der Frage und ihrer Optionen 
        
    echo $data["frage"]; 
        echo 
    '<form name="umfrage" action="' $_SERVER['PHP_SELF'] . '" method="post">'
         
        for(
    $i=0$i<count($data["options"]); $i++) { 
         
            echo 
    '<input type="radio" name="option" value="' $i '">' $data["options"][$i] . '<br>'
         
        } 
         
        echo 
    '<br><input type="submit" name="submit" value="Vote"></form>'


    ?>
    Ergebnis ausgeben

    Zum Schluss nun die Datei, in der wir das Ergebnis unserer Umfrage ausrechnen und ausgeben.

    Datei result.php:
    PHP-Code:
    <?php 
    // Config Datei hinzuladen 
    include("config.php"); 

    // Daten abfragen 
    $sql "SELECT * FROM umfragen ORDER BY id DESC LIMIT 1"
    $query mysql_query($sql$serverid); 
    $data mysql_fetch_array($query); 

    // String in Array umwandeln 
    $data["options"] = explode(";"$data["options"]); 
    $data["hits"] = explode(";"$data["hits"]); 

    $gesamt array_sum($data["hits"]); 

    echo 
    $data["frage"] . '<br><br>'

    // Ausgabe der Optionen mit Prozent, Stimmen und Balken 
    for($i=0$i<count($data["options"]); $i++) { 

        
    $percent floor($data["hits"][$i]*100/$gesamt); 
        echo 
    $data["options"][$i] . ' - ' $percent '% (' $data["hits"][$i] . ') '
        echo 
    '<img border="0" src="links.gif" width="15" height="20"><img border="0" src="mitte.gif" width="' . ($percent*2) . '" height="20"><img border="0" src="rechts.gif" width="15" height="20"><br>'


    ?>
    Natürlich muss man die Strings nicht ausgeben lassen (echo) - man könnte sie auch in Variablen packen, was das Script besonders für Template Systeme interessant macht.


    oh mann....hoffe, dass ich keine fehler eingebaut habe

    lg fiu
    Geändert von fiu (01.06.2004 um 18:01 Uhr)

  2. #2
    fiu
    fiu ist offline
    TP-Veteran Avatar von fiu
    Registriert seit
    Nov 2003
    Ort
    Graz
    Beiträge
    1.720
    Keine Kommentare,

    Fehler?
    Schlecht?
    Gut?
    Hilfreich?
    Funktioniert nicht?

    irgendwas

  3. #3
    TP-Specialist Avatar von Paco
    Registriert seit
    Sep 2001
    Ort
    Rhein-Main
    Beiträge
    2.296
    Schicke Flügel auf deinem Rücken

  4. #4
    fiu
    fiu ist offline
    TP-Veteran Avatar von fiu
    Registriert seit
    Nov 2003
    Ort
    Graz
    Beiträge
    1.720
    evtl. Kommentare, die ich verstehe

  5. #5
    TP-Specialist Avatar von Paco
    Registriert seit
    Sep 2001
    Ort
    Rhein-Main
    Beiträge
    2.296
    Jetzt muss ich mein Dummgeschwätz auch noch erklären
    nein, es sieht so aus als würde auf deinem Avater auf dem Rücken der Frau Flügel zu sehen sein. Sind aber wohl keine, oder?
    Und noch ein Statement zu deinem eigentlich Thread (damit ich nicht ganz umsonst hier dummgebabbelt habe).
    ich habe es leider nicht ausprobiert, da ich von diesen Umfragen nicht viel halte. Aber ist bestimmt klasse

  6. #6
    fiu
    fiu ist offline
    TP-Veteran Avatar von fiu
    Registriert seit
    Nov 2003
    Ort
    Graz
    Beiträge
    1.720
    hm...

    Edit: Anhang entfernt
    Geändert von fiu (03.03.2011 um 12:42 Uhr)

  7. #7
    fiu
    fiu ist offline
    TP-Veteran Avatar von fiu
    Registriert seit
    Nov 2003
    Ort
    Graz
    Beiträge
    1.720
    Hat vielleicht irgendwer einen Kommentar, der es auch ausprobiert hat

  8. #8
    TP-Specialist Avatar von Schneeschaufel
    Registriert seit
    Mar 2002
    Ort
    Vienna, Austria, Austria
    Beiträge
    2.047
    es funktioniert
    auch die cookiesperre.
    onlinedemo

  9. #9
    fiu
    fiu ist offline
    TP-Veteran Avatar von fiu
    Registriert seit
    Nov 2003
    Ort
    Graz
    Beiträge
    1.720
    Leider kenne ich keine Möglichkeit für folgendes Problem:

    Wenn sich jemand die Mühe macht, das Cookie zu löschen, kann er 1000000000x abstimmen...

  10. #10
    jow
    jow ist offline
    TP-Insider Avatar von jow
    Registriert seit
    Aug 2002
    Ort
    Sinsheim
    Beiträge
    572
    Nicht schlecht, funktioniert einwandfrei
    "Dieses Business ist binär. Du bist eine Eins oder eine Null, lebendig oder tot. Es gibt keinen zweiten Sieger." - Gary Winston (StartUp)

  11. #11
    TP-Newbie
    Registriert seit
    May 2004
    Beiträge
    1

    super script!

    Funktioniert super dein Script
    Ausser das mit den Cookies....hast du vieleicht eine Lösung gefunden?

  12. #12
    Guest
    Registriert seit
    Aug 2002
    Beiträge
    2.233
    Tja, das ist halt so mit den Cookies, du kannst keinen zwingen sie zu akzeptieren. Aber über Templates(+ Cookies) wäre das schon besser.

  13. #13
    TP-Senior Avatar von Monchi
    Registriert seit
    Apr 2004
    Ort
    Leipzig
    Beiträge
    170
    HalloFiu
    Oooooooh
    Ich staune!!!!!
    Also ich muss das unbedingt mal ausprobieren!
    Aber das könnte ich nie- das ist echt toll!!!!!
    Ich weis ma grad was echo ist-schäm-
    aber jeder fängt mal an...
    Ich werds bei meinem Server ausprobieren,da ich irgendwie Probleme hab
    auf meinem Rechner den Apache auf PHP gefügig zu machen.
    Also bye
    Monchi

    Wollt nur erst mal mein unbegreifliches Staunen ausdrücken

  14. #14
    TP-Specialist Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Was macht das Script, wenn ich einem Optionfeld das Zeichen ; benutzen will?

    Gruss
    Jan

  15. #15
    TP-Member
    Registriert seit
    Feb 2004
    Ort
    Lüneburg
    Beiträge
    49
    Ich habe mal soeine Art Voting programmiert. Ist im Prinzip das selbe.

    Das Problem mit dem mehrfach Voten: Ich habe zusätzlich zum Cookie noch die IP mitgeloggt und überprüfe ob die IP schon gevotet hat. Ist auch nich das Gelbe vom EI, aber wenigstens müsste man den Cookie löschen und sich neu ins Netz einwählen.

Seite 1 von 3 123 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51