mysqldumper
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Bewertung: Bewertung: 10 Stimmen, 5,00 durchschnittlich.
Alt 31.03.2004, 23:13   #1
fiu
TP-Veteran
 
Benutzerbild von fiu
 
Registriert seit: Nov 2003
Ort: Graz > all
fiu macht sich hier sehr viel Mühe

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 19:01 Uhr).
fiu ist offline   Mit Zitat antworten


Alt 08.04.2004, 20:18   #2
fiu
TP-Veteran
 
Benutzerbild von fiu
 
Registriert seit: Nov 2003
Ort: Graz > all
fiu macht sich hier sehr viel Mühe
Keine Kommentare,

Fehler?
Schlecht?
Gut?
Hilfreich?
Funktioniert nicht?

irgendwas
fiu ist offline   Mit Zitat antworten
Alt 21.04.2004, 16:10   #3
TP-Specialist
 
Benutzerbild von Paco
 
Registriert seit: Sep 2001
Ort: Rhein-Main
Paco macht sich hier sehr viel Mühe
Schicke Flügel auf deinem Rücken
Paco ist offline   Mit Zitat antworten
Alt 21.04.2004, 22:52   #4
fiu
TP-Veteran
 
Benutzerbild von fiu
 
Registriert seit: Nov 2003
Ort: Graz > all
fiu macht sich hier sehr viel Mühe
evtl. Kommentare, die ich verstehe
fiu ist offline   Mit Zitat antworten
Alt 22.04.2004, 16:27   #5
TP-Specialist
 
Benutzerbild von Paco
 
Registriert seit: Sep 2001
Ort: Rhein-Main
Paco macht sich hier sehr viel Mühe
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
Paco ist offline   Mit Zitat antworten
Alt 22.04.2004, 19:42   #6
fiu
TP-Veteran
 
Benutzerbild von fiu
 
Registriert seit: Nov 2003
Ort: Graz > all
fiu macht sich hier sehr viel Mühe
hm...
Angehängte Grafiken
Dateityp: jpg flügel_seh_ich_da_keine.jpg (60,2 KB, 4028x aufgerufen)
fiu ist offline   Mit Zitat antworten
Alt 23.04.2004, 08:12   #7
fiu
TP-Veteran
 
Benutzerbild von fiu
 
Registriert seit: Nov 2003
Ort: Graz > all
fiu macht sich hier sehr viel Mühe
Hat vielleicht irgendwer einen Kommentar, der es auch ausprobiert hat
fiu ist offline   Mit Zitat antworten
Alt 24.04.2004, 15:19   #8
TP-Specialist
 
Benutzerbild von Schneeschaufel
 
Registriert seit: Mar 2002
Ort: Ö
Schneeschaufel hilft, wo's gehtSchneeschaufel hilft, wo's gehtSchneeschaufel hilft, wo's geht
es funktioniert
auch die cookiesperre.
onlinedemo
Schneeschaufel ist offline   Mit Zitat antworten
Alt 25.04.2004, 23:00   #9
fiu
TP-Veteran
 
Benutzerbild von fiu
 
Registriert seit: Nov 2003
Ort: Graz > all
fiu macht sich hier sehr viel Mühe
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...
fiu ist offline   Mit Zitat antworten
Alt 26.04.2004, 16:10   #10
jow
TP-Insider
 
Benutzerbild von jow
 
Registriert seit: Aug 2002
Ort: Sinsheim
jow macht sich hier sehr viel Mühe
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)
jow ist offline   Mit Zitat antworten
Alt 22.05.2004, 18:21   #11
TP-Newbie
 
Registriert seit: May 2004
mischu81 macht alles soweit korrekt

super script!


Funktioniert super dein Script
Ausser das mit den Cookies....hast du vieleicht eine Lösung gefunden?
mischu81 ist offline   Mit Zitat antworten
Alt 22.05.2004, 19:40   #12
Guest
 
Registriert seit: Aug 2002
Strogij hilft, wo's gehtStrogij hilft, wo's geht
Tja, das ist halt so mit den Cookies, du kannst keinen zwingen sie zu akzeptieren. Aber über Templates(+ Cookies) wäre das schon besser.
Strogij ist offline   Mit Zitat antworten
Alt 08.06.2004, 00:07   #13
TP-Senior
 
Benutzerbild von Monchi
 
Registriert seit: Apr 2004
Ort: Leipzig
Monchi ist auf einem guten Weg
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
Monchi ist offline   Mit Zitat antworten
Alt 08.06.2004, 10:54   #14
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Was macht das Script, wenn ich einem Optionfeld das Zeichen ; benutzen will?

Gruss
Jan
Stuck Mojo ist offline   Mit Zitat antworten
Alt 10.06.2004, 15:20   #15
TP-Member
 
Registriert seit: Feb 2004
Ort: Lüneburg
ossah macht alles soweit korrekt
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.
ossah ist offline   Mit Zitat antworten
Antwort