Loading...   Upload Image

Umfrage - Poll mit MySQLTutorials » PHP/MySQL Tutorials » Umfrage - Poll mit MySQL

Verfasst von Alice am 13.09.2009 - wurde schon 13329 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
13x bewertet
Schwierigkeit: mittel
Kommentare: [ 5 ]

Tag - Schlagwort PHP Tag - Schlagwort Poll Tag - Schlagwort Umfrage Tag - Schlagwort MySQL Tag - Schlagwort Datenbank Tag - Schlagwort Script

Umfrage - Poll mit MySQL - Tutorial

Es wurde der Wunsch nach einem Umfrage Script auf MySQL-Basis geaeussert,
nun denn wollen wir uns heute also ein Umfrage Script erstellen ...

Was wird benoetigt?


- PHP / MySql Grundkenntnisse
- 1 MySql Datenbank
- Webspace der PHP unterstuetzt

Wie schauts aus?

- Abstimmen
- Auswertung

Administrations-Ansicht
- Uebersicht
- Umfrage erstellen
- Umfrage bearbeiten

Step 1 - Datenbank


Als erstes wollen wir die Tabelle grafixx_poll anlegen, welche die Frage der Umfrage enthaelt wird(mit PHPMyAdmin)
CREATE TABLE IF NOT EXISTS `grafixx_poll` (
  `id` int(22) NOT NULL AUTO_INCREMENT,
  `frage` text NOT NULL,
  `date` datetime NOT NULL,
  `status` enum('aktiv','inaktiv') NOT NULL,
  PRIMARY KEY (`id`)
);


Anschliessend erstellen wir die Tabelle grafixx_antworten, welche die moeglichen Antworten der Umfrage enthalten wird
CREATE TABLE IF NOT EXISTS `grafixx_antworten` (
  `id` int(22) NOT NULL AUTO_INCREMENT,
  `antwort` text NOT NULL,
  `stimmen` int(22) DEFAULT '0',
  `poll_id` int(22) NOT NULL,
  PRIMARY KEY (`id`)
);


Und nun noch eine dritte Tabelle grafixx_poll_ip, hier werden die IP Adressen der Abstimmer festgehalten, damit nicht mehrfach abgestimmt werden kann...
CREATE TABLE IF NOT EXISTS `grafixx_poll_ip` (
  `poll_id` int(22) NOT NULL,
  `antwort_id` int(22) NOT NULL,
  `ip` varchar(55) NOT NULL,
  KEY `poll_id` (`poll_id`)
);


Step 2 - DatenbankVerbindung | config.inc.php


Config.inc.php heisst unsere Datei mit der wir eine Verbindung zur Datenbank herstellen, ohne die geht gar nichts!
Die config.inc.php wird spaeter ueberall eingebunden, wo eine Verbindung zur DB benoetigt wird.

Hier bitte nicht vergessen den MySQL Benutzernamen, das dazugehoerige Passwort und den Namen eurer Datenbank einzutragen!

Step 3 - admin.php


Die Datei admin.php ist fuer das Erstellen, Bearbeiten und Loeschen der Umfrage zustaendig. Hier muss bei $grafixx_name und $grafixx_pass der gewuenschte Username und das dazugehoerige Passwort angegeben werden!
 SQL Injektions
function clean_it($dirty){ 
    
     // Auswirkungen von magic_quotes_gpc zuruecksetzen, wenn ON
    if (get_magic_quotes_gpc()) {
        $clean = mysql_real_escape_string(stripslashes(htmlspecialchars($dirty)));
    }else{
        $clean = mysql_real_escape_string(htmlspecialchars($dirty));
    }

    return $clean;
}

ob_start();	// startet den Ausgabepuffer

?>




Grafixx Umfragen










'; $error = "1"; } if($login_name != $grafixx_name OR $login_pass != $grafixx_pass){ // Angaben auf Korrektheit pruefen $message .= 'Zugriff verweigert ...
'; $error = "1"; } if($error != "1"){ // Wenn kein Fehler war // session handle----------------------------- $_SESSION['login'] = $_SERVER['REMOTE_ADDR']; // Session setzen header("Location: $pfad"); // Weiterleiten } if($error == "1"){ // Fehlermeldung ausgeben wenn vorhanden echo "

Error ...

\n

$message

\n"; } } ?>
Grafixx Login


Login } // ---------------------------------------------------------------------- // Umfrage erstellen/bearbeiten // ---------------------------------------------------------------------- if($action == 'new'){ $id = clean_it($_GET['id']); // Variable definieren if (isset($_POST['submit'])) { $frage = clean_it($_POST['frage']); $status = clean_it($_POST['status']); if(empty($frage) || empty($status) || empty($_POST['antwort'])){ // Pruefen ob alles angegeben echo "

Error...

Bitte danke alle Felder ausfuellen!

\n"; }else{ // Sofern alles angegeben wurde // Frage in DB eintragen $umfrage = mysql_query("INSERT INTO grafixx_poll (frage, status, date) VALUES ('$frage','$status', now() )"); $poll_id = mysql_insert_id(); // POLL ID bestimmen if($umfrage){ // sofern frage in DB eingetragen => Antworten in DB schreiben foreach($_POST['antwort'] as $antwort){ // antworten eintragen $eintragen = mysql_query("INSERT INTO grafixx_antworten (poll_id, antwort) VALUES ('$poll_id','$antwort')"); } } if($umfrage AND $eintragen){ // Sofern Eintrag geklappt hat header("Location: $pfad"); // Weiterleitung }else{ // Wenn Eintrag nicht geklappt hat => Fehlermeldung echo "

Error ...

\n"; echo "

Der Eintrag war leider nicht erfolgreich! ".mysql_error()."

\n
\n"; } } // close alles angegeben }// close submit // Formular ausgeben ?>
Umfrage erstellen


aktiv inaktiv

Error...

Bitte danke alle Felder ausfuellen!

\n"; }else{ // Sofern alles angegeben wurde // Frage in DB eintragen $umfrage = mysql_query("UPDATE grafixx_poll SET frage = '$frage', status = '$status' WHERE id = '$id' "); if($umfrage){ // sofern frage in DB eingetragen => Antworten in DB schreiben/updaten if(!empty($_POST['antworten'])){ // Sofern eine neue Antwort dazu gekommen ist // Antworten bearbeiten foreach($_POST['antworten'] as $antworten){ // $a_id = id der zu bearbeitenden antwort // $antwort = value => neue antwort foreach ($antworten as $a_id => $antwort){ // DB updaten $update = mysql_query("UPDATE grafixx_antworten SET antwort = '$antwort' WHERE id = '$a_id' "); } } } if(!empty($_POST['antwort'])){ // Sofern eine neue Antwort dazu gekommen ist foreach($_POST['antwort'] as $new_antwort){ // antworten eintragen $eintragen = mysql_query("INSERT INTO grafixx_antworten (poll_id, antwort) VALUES ('$id','$new_antwort')"); } }// close !empty } if($umfrage AND $update OR $eintragen){ // Sofern Eintrag geklappt hat header("Location: $pfad"); // Weiterleitung }else{ // Wenn Eintrag nicht geklappt hat => Fehlermeldung echo "

Error ...

\n"; echo "

Der Eintrag war leider nicht erfolgreich! ".mysql_error()."

\n
\n"; } } // close alles angegeben }// close submit // Antwort loeschen if(isset($_POST['delete'])){ foreach($_POST['delete'] as $loeschen){ foreach ($loeschen as $del_id => $v){// zu loeschende ID ermitteln // DB => Antwort loeschen $delete = mysql_query("DELETE FROM grafixx_antworten WHERE id = '$del_id' "); // DB => IP zu der Antwort loeschen $del_ip = mysql_query("DELETE FROM grafixx_poll_ip WHERE antwort_id = '$del_id' "); } } header("Location: ".$pfad."?action=edit&id=".$id .""); // Weiterleitung } // Formular ausgeben ?>
Umfrage bearbeiten
    id."]\" type=\"text\" value=\"".$rows->antwort."\" />\n"; echo "id."]\" />\n"; } ?>


status == 'aktiv'){ echo "checked=\"checked\""; } ?>/> aktiv status == 'inaktiv'){ echo "checked=\"checked\""; } ?>/> inaktiv

Wirklich ...

\n"; echo "

Bist du sicher dass du die Umfrage loeschen moechtest?

\n"; echo "

  Ja  "; echo "    Nein  

\n
"; }else{ // Umfrage loeschen $delete = mysql_query("DELETE FROM grafixx_poll WHERE id='$id'"); // Umfrage Optionen loeschen $del_a = mysql_query("DELETE FROM grafixx_antworten WHERE poll_id='$id'"); // IP's der Umfrage loeschen $del_ip = mysql_query("DELETE FROM grafixx_poll_ip WHERE poll_id='$id'"); if($delete AND $del_a AND $del_ip){ // Wenn Loeschung nicht erfolgt header("Location: $pfad"); // Weiterleitung }else{ // Wenn Eintrag nicht geloescht wurde => Fehlermeldung echo "

Error ...

\n"; echo "

Der Eintrag konnte leider nicht geloescht werden! ".mysql_error()."

\n
\n"; } } // close mode } // close action = loeschen // ---------------------------------------------------------------------- // Umfragen auflisten // ---------------------------------------------------------------------- if(!isset($_GET['action'])){ // Sofern keine Aktion => umfragen Anzeigen echo "

Umfragen

\n"; // DB-Abfrage => Umfragen $abfrage = mysql_query("SELECT id, frage, DATE_FORMAT(date, '%d.%m.%Y') AS datum, status FROM grafixx_poll ORDER BY id DESC"); $total = mysql_num_rows($abfrage); // Anzahl umfragen // Umfragen ausgeben echo "
    \n"; if($total > 0){ // Pruefen ob umfragen vorhanden sind while($row = mysql_fetch_object($abfrage)){ echo "
  • \n"; echo "".$row->id.". ".$row->frage."
    \n "; echo "".$row->datum." » id."\">".$row->status."
  • \n"; } }else{ // Keine Umfragen vorhanden echo "
  • Derzeit sind keine Umfragen vorhanden ...
  • "; }// close umfragen vorhanden echo "
\n"; } // close umfragen anzeigen ?>


Step 4 - poll.php


Die Datei poll.php ist fuer die Darstellung der Umfragen zustaendig, sie enthaelt 3 Funktionen show_ergebnis() gibt die Auswertung der Umfrage wieder, abstimmen() ist fuer das Abstimmen zustaendig und show_poll() gibt das Formular zum Abstimmen aus, bzw. ruft je nach Bedarf die ersten 2 Funktionen auf ...
 nur aktiver Umfragen | INNER JOIN => Anzahl aller abgegebenen Stimmen zaehlen
		$umfrage = mysql_query("SELECT a.frage, SUM(b.stimmen) AS total FROM grafixx_poll a INNER JOIN grafixx_antworten b ON a.id = b.poll_id WHERE a.id = '$id'");
		$poll = mysql_fetch_object($umfrage);
				
		echo "
    \n"; echo "
  • ".$poll->frage."

  • \n"; // Frage ausgeben // Antworten auslesen $abfrage = mysql_query("SELECT antwort, stimmen FROM grafixx_antworten WHERE poll_id = '$id'"); $total = $poll->total; // Anzahl aller bisher abgegebener Stimmen while($row = mysql_fetch_object($abfrage)){ // Antworten ausgeben if($row->stimmen > 0){ // Prozent berechnen $prozent = round($row->stimmen * 100 / $total); }else{ $prozent = 0; } echo "
  •  
    ".$prozent."%
    \n"; echo $row->antwort."
  • \n"; } echo "
\n Anzahl abgegebener Stimmen: ".$total."\n"; } // close id } // close function show_ergebnis function abstimmen($poll_id){ // Abstimmen $id = intval($_POST['vote']); // Variable definieren if(is_int($id)){ // Sofern ID uebergeben wurde und ID = Zahl $user_ip = $_SERVER['REMOTE_ADDR']; // IP // Stimme zaehlen $update = mysql_query("UPDATE grafixx_antworten SET stimmen = stimmen+1 WHERE id = '$id'"); // Stimme zaehlen => gesamtstimmen $update2 = mysql_query("UPDATE grafixx_poll SET stimmen = stimmen+1 WHERE id = '$poll_id'"); // Abstimmung => IP eintragen $eintragen = mysql_query("INSERT INTO grafixx_poll_ip (poll_id, antwort_id, ip) VALUES ('$poll_id', '$id', '$user_ip')"); if($update AND $eintragen){ show_ergebnis($poll_id); // Auswertung anzeigen } } // close sofern zahl } // close function abstimmen function show_poll($id){ // Umfrage ausgeben if(is_int($id)){ // Pruefen ob $id = Zahl // Frage auslesen => nur aktiver Umfragen $umfrage = mysql_query("SELECT frage FROM grafixx_poll WHERE id = '$id' AND status = 'aktiv'"); $row = mysql_fetch_object($umfrage); $user_ip = $_SERVER['REMOTE_ADDR']; // IP // pruefen ob schon abgestimmt wurde => DB Abfragen $select = mysql_query("SELECT ip FROM grafixx_poll_ip WHERE poll_id = '$id' AND ip = '$user_ip'"); $check_ip = mysql_num_rows($select); if($check_ip > 0){ // Wenn schon abgestimmt wurde show_ergebnis($id); // Auswertung anzeigen }else{ // Wenn noch nicht abgestimmt wurde => Optionen anzeigen if(isset($_POST['abstimmen'])){ // Wenn Abstimmen gedrueckt abstimmen($id); // Abstimmen }else{ // Wenn nicht abstimmen gedrueckt // Formular ausgeben echo "
\n"; echo "
    \n"; echo "
  • ".$row->frage."

  • \n"; // Frage ausgeben // Antworten auslesen $abfrage = mysql_query("SELECT id, antwort FROM grafixx_antworten WHERE poll_id = '$id'"); while($row = mysql_fetch_object($abfrage)){ // Antworten ausgeben echo "
  • id."\" class=\"radio\" /> ".$row->antwort."
  • \n"; } echo "
  • "; echo "
\n"; echo "
"; } // close submit } // close Check_ip } // close id } // close function show_poll ?>


Step 5 - CSS-Angaben fuer die Darstellung der Umfrage


	ul.poll{
		border: 1px solid #737373;
		border-width: 2px 0px;
		list-style: none;	
		width: 250px;
		margin: 0 0 8px;
		padding: 10px;
	}
	
	ul.poll li{
		margin: 0 0 7px;
		padding: 0;
	}
			.rate{
				background: #E6E6E6;
				height: 20px; 
				margin-bottom: 0px;
				text-align: right;
				font-size: 0.8em;
			}
			
			.vote{
				background: #8BABD1;
				height: 20px; 
				float: left;
			}
			
	.radio{ 
		width: 20px; 
		margin-left: 5px;
	}


Wir haben also nun folgende Dateien


- config.inc.php Stellt die Verbindung zur Datenbank her
- admin.php ist fuer Eintraegen, Loeschen und Bearbeiten der Umfragen zustaendig
- poll.php enthaelt mehrere Fuktionen die fuer die Darstellung einer Umfrage zustaendig sind

Die Umfrage in die eigene Seite einbinden


Um die Umfrage nun auf der eigenen Seite ausgeben zu koennen, einfach folgender Code an die Stelle in der Datei platzieren in der die Umfrage ausgegeben werden soll.

Anstelle von ID_der_Umfrage muss die ID der anzuzeigenden Umfrage angegeben werden!
Die ID ist die Zahl, die vor jeder Umfrage im Adminbereich steht...


Wichtig!


Es muss es sich bei der Datei, in der die Umfrage ausgegeben werden soll, um eine PHP-Datei handeln! Sollten sie die Dateien poll.php und confic.inc.php nicht im selben Ordner, wie die Datei in der die Umfrage ausgegeben werden soll, befinden, muessen die Pfadangaben angepasst werden!


Beispiel:




	Grafixx Umfragen
	
	 
	
	
	

	
	





Tutorial Dateien herunterladen

Kommentar schreibenHinterlasse einen Kommentar

Du musst angemeldet sein, um einen Kommentar zu hinterlassen...

Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...


Neuste Tutorials

Neuste Forenthemen

Neuste Kommentare

Affiliates:   Gallery Yuri  •   Blue-Graphics  •   Chibi Graphics  •   Design Grafixx  •   The Seduction  •   Colorful Gfx  •   Pat DG  • Show all ...
designenlassen.de - Der Design-Marktplatz für Webdesign, Logo-Design, Flyerdesign u.v.m.        ALL-INKL.COM - Webhosting Server Hosting Domain Provider