nachdem ich seit einiger Zeit immer mal wieder im Forum stöbere und häufig eine Lösung für mein Problem erhalten habe, poste ich jetzt auch mal was "nützliches".
Vorab: ich bin kein php und mysql-Profi, aber das Umfragemodul funktioniert. Also poste ich es mal hier und freu mich über Verbesserungen und Änderungsvorschläge.
Was ich selbst nicht - trotz Brüterei - nicht gelöst habe ist dieser Punkt:
Wie kann ich die Verbindung zur Datenbank herstellen ohne User und Passwort angeben zu müssen?
Hoffe mal ich blamier mich nicht mit dem Post hier
Beschreibung:
Dieses Umfragemodul bietet die Möglichkeit, einer Frage bis zu sechs Antworten zuzuordnen. Wenn weniger Antworten gewünscht sind, die übrigen einfach frei lassen (Die Radioboxen für frei gelassene Antworten werden automatisch nicht angezeigt).
Die Abstimmungen werden in einer mysql-Tabelle gespeichert, die vor der Nutzung des Moduls erstellt werden muss. Code (Tabellennamen ggf. anpassen):
CREATE TABLE `umfrage` (
`id` INT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`zaehler_01` INT( 10 ) NOT NULL ,
`zaehler_02` INT( 10 ) NOT NULL ,
`zaehler_03` INT( 10 ) NOT NULL ,
`zaehler_04` INT( 10 ) NOT NULL ,
`zaehler_05` INT( 10 ) NOT NULL ,
`zaehler_06` INT( 10 ) NOT NULL ,
`ip` VARCHAR( 20 ) NOT NULL ,
`datum_uhrzeit` DATETIME NOT NULL,
`datum_uhrzeit_verfall` DATETIME NOT NULL
)
Im Input-Bereich wird die Frage und die Antworten vorgegeben (können auch während einer laufenden Umfrage noch geändert werden) sowie die Zugangsdaten zur Datenbank. Darüber hinaus kann festgelegt werden, wann erneut eine Stimmabgabe erfolgen kann (Blocken einer 'Serienabstimmung' per IP und Datum/ Uhrzeit).
Die Balkenanzeige für jede Antwort kann über eine jeweils eigene Grafik frei bestimmt werden. Darüber hinaus kann der Abstimmbutton und die Darstellung des Ergebnisses per CSS definiert werden:
-h3
-input.button
-table.umfrage
-td.umfrage_stimmen
-td.umfrage_gesamt_stimmen
-td.umfrage_balken
-td.umfrage_gesamt_balken
-td.umfrage_prozent
-td.umfrage_gesamt_prozent
-th.umfrage
-th.umfrage_antworten
-th.umfrage_gesamt
Zu guter letzt ist auch die Vorgabe der Nachkommastellen bei der Darstellung der Prozentangabe möglich.
Das Modul sollte auch leicht außerhalb von Contenido genutzt werden können, da alle über den INPUT erfassten Daten zentral am Anfang des OUTPUT an Variablen übergeben werden. Außerhalb von Contenido also einfach die "CMS_VALUE[xyz]" durch die INPUT-Werte ersetzen.
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
* Umfrage mit IP-Sperre
*
* Author : Markus Hübner
* Copyright : Markus Hübner
* Version : 1.0
* Created : 16.05.2008
************************************************/
echo"
<table>
<tr><td colspan=2><strong>Zugangsdaten zur Datenbank</strong></td></tr>
<tr><td>User</td><td><input size=50 type=\"password\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\"></td></tr>
<tr><td>Passwort</td><td><input size=50 type=\"password\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\"></td></tr>
<tr><td>Datenbank</td><td><input size=50 type=\"password\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\"></td></tr>
<tr><td>Tabelle</td><td><input size=50 type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\"></td></tr>
<tr><td colspan=2><strong><hr>Frage und Antworten:</strong></td></tr>
<tr><td>Frage</td><td><input size=50 type=\"text\" name=\"CMS_VAR[10]\" value=\"CMS_VALUE[10]\"></td></tr>
<tr><td>Antwort 1</td><td><input size=50 type=\"text\" name=\"CMS_VAR[21]\" value=\"CMS_VALUE[21]\"></td></tr>
<tr><td>Antwort 2</td><td><input size=50 type=\"text\" name=\"CMS_VAR[22]\" value=\"CMS_VALUE[22]\"></td></tr>
<tr><td>Antwort 3</td><td><input size=50 type=\"text\" name=\"CMS_VAR[23]\" value=\"CMS_VALUE[23]\"></td></tr>
<tr><td>Antwort 4</td><td><input size=50 type=\"text\" name=\"CMS_VAR[24]\" value=\"CMS_VALUE[24]\"></td></tr>
<tr><td>Antwort 5</td><td><input size=50 type=\"text\" name=\"CMS_VAR[25]\" value=\"CMS_VALUE[25]\"></td></tr>
<tr><td>Antwort 6</td><td><input size=50 type=\"text\" name=\"CMS_VAR[26]\" value=\"CMS_VALUE[26]\"></td></tr>
<tr><td colspan=2><em>(Bei weniger als 6 Antworten die übrigen einfach frei lassen.)</em></td></tr>
<tr><td colspan=2><hr><strong>Weiteres:</strong></td></tr>
<tr><td>Erneute Abstimmung möglich nach</td><td><input size=4 type=\"text\" name=\"CMS_VAR[30]\" value=\"CMS_VALUE[30]\"> Sekunden (1 Tag: 86400, 1 Stunde: 3600, 1 Minute: 60)</td></tr>
<tr><td>Balkengrafik 1</td><td><input size=60 type=\"text\" name=\"CMS_VAR[31]\" value=\"CMS_VALUE[31]\"></td></tr>
<tr><td>Balkengrafik 2</td><td><input size=60 type=\"text\" name=\"CMS_VAR[32]\" value=\"CMS_VALUE[32]\"></td></tr>
<tr><td>Balkengrafik 3</td><td><input size=60 type=\"text\" name=\"CMS_VAR[33]\" value=\"CMS_VALUE[33]\"></td></tr>
<tr><td>Balkengrafik 4</td><td><input size=60 type=\"text\" name=\"CMS_VAR[34]\" value=\"CMS_VALUE[34]\"></td></tr>
<tr><td>Balkengrafik 5</td><td><input size=60 type=\"text\" name=\"CMS_VAR[35]\" value=\"CMS_VALUE[35]\"></td></tr>
<tr><td>Balkengrafik 6</td><td><input size=60 type=\"text\" name=\"CMS_VAR[36]\" value=\"CMS_VALUE[36]\"></td></tr>
<tr><td>Balkengrafik 7</td><td><input size=60 type=\"text\" name=\"CMS_VAR[37]\" value=\"CMS_VALUE[37]\"></td></tr>
<tr><td colspan=2><em>(Pfade angeben.)</em></td></tr>
<tr><td>Nachkommastellen der Prozentangabe</td><td><input size=4 type=\"text\" name=\"CMS_VAR[40]\" value=\"CMS_VALUE[40]\"></td></tr>
</table>";
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
* Umfrage mit IP-Sperre
*
* Author : Markus Hübner
* Copyright : Markus Hübner
* Version : 1.0
* Created : 16.05.2008
************************************************/
/***** Definition der Variablen *****/
$user="CMS_VALUE[1]";
$db_pw="CMS_VALUE[2]";
$db="CMS_VALUE[4]";
$umfrage_tabelle="CMS_VALUE[3]";
/***** Ermittlung der ip, zum schnellen Füllen der DB die tatsächliche oder zufällig generierte IP auskommentieren oder $verfall herabsetzen *****/
$ip=$_SERVER['REMOTE_ADDR'];
$datum_uhrzeit=date("Y-m-d H:i:s"); // Format Mysql DATETIME: 2008-05-14 10:33:58;
$verfall=CMS_VALUE[30]; // 1 Tag: 86400, 1 Stunde: 3600, 1 Minute: 60
$datum_uhrzeit_verfall=date("Y-m-d H:i:s",time() +$verfall);
$frage="CMS_VALUE[10]";
$antwort_01="CMS_VALUE[21]";
$antwort_02="CMS_VALUE[22]";
$antwort_03="CMS_VALUE[23]";
$antwort_04="CMS_VALUE[24]";
$antwort_05="CMS_VALUE[25]";
$antwort_06="CMS_VALUE[26]";
$zaehler_01="0";
$zaehler_02="0";
$zaehler_03="0";
$zaehler_04="0";
$zaehler_05="0";
$zaehler_06="0";
$pfad_balkengrafik_01="CMS_VALUE[31]";
$pfad_balkengrafik_02="CMS_VALUE[32]";
$pfad_balkengrafik_03="CMS_VALUE[33]";
$pfad_balkengrafik_04="CMS_VALUE[34]";
$pfad_balkengrafik_05="CMS_VALUE[35]";
$pfad_balkengrafik_06="CMS_VALUE[36]";
$pfad_balkengrafik_07="CMS_VALUE[37]";
$nachkommastellen="CMS_VALUE[40]";
/***** Ende Definition der Variablen *****/
/***** Beginn Darstellung *****/
echo "<form action=\"".$auth->url()."\" method=\"post\" onsubmit=\"check_weiter\">";
echo "<h3>".$frage."</h3>";
if ($antwort_01=="") {echo "";} else {echo "<input type=\"Radio\" name=\"antwort\" value=\"1\">".$antwort_01."<br>"; }
if ($antwort_02=="") {echo "";} else {echo "<input type=\"Radio\" name=\"antwort\" value=\"2\">".$antwort_02."<br>"; }
if ($antwort_03=="") {echo "";} else {echo "<input type=\"Radio\" name=\"antwort\" value=\"3\">".$antwort_03."<br>"; }
if ($antwort_04=="") {echo "";} else {echo "<input type=\"Radio\" name=\"antwort\" value=\"4\">".$antwort_04."<br>"; }
if ($antwort_05=="") {echo "";} else {echo "<input type=\"Radio\" name=\"antwort\" value=\"5\">".$antwort_05."<br>"; }
if ($antwort_06=="") {echo "";} else {echo "<input type=\"Radio\" name=\"antwort\" value=\"6\">".$antwort_06."<br>"; }
echo "<input class=button type=\"submit\" name=\"abstimmen\" value=\"abstimmen\"></form>";
$antwort = $_REQUEST[antwort];
if ($antwort=="1") {$zaehler_01="1"; $abstimmung=$antwort_01;};
if ($antwort=="2") {$zaehler_02="1"; $abstimmung=$antwort_02;};
if ($antwort=="3") {$zaehler_03="1"; $abstimmung=$antwort_03;};
if ($antwort=="4") {$zaehler_04="1"; $abstimmung=$antwort_04;};
if ($antwort=="5") {$zaehler_05="1"; $abstimmung=$antwort_05;};
if ($antwort=="6") {$zaehler_06="1"; $abstimmung=$antwort_06;};
if ($antwort!="") // $antwort!="" verhindert einen Leereintrag und die Darstellung des Ergebnisses vor der Abstimmung
{
echo "Sie haben '".$abstimmung."' angegeben.";
/********** MySQL **********/
/*** Verbindung mit DB herstellen ***/
mysql_connect ("localhost","$user", "$db_pw")
or die ("keine Verbindung möglich, Benutzername oder Passwort sind falsch");
mysql_select_db("$db")
or die ("Die Datenbank existiert nicht.");
if ($antwort!="")
{
/*** Einfügen der Daten in die DB ***/
/*** IP-Check ***/
$check_abfrage = "SELECT ip, datum_uhrzeit, datum_uhrzeit_verfall FROM $umfrage_tabelle";
$check_ergebnis = mysql_query($check_abfrage);
while($row = mysql_fetch_object($check_ergebnis))
{
if ($row->ip==$ip AND $datum_uhrzeit<$row->datum_uhrzeit_verfall) {$blocken="ja";}
}
if ($blocken=="ja") { echo " Da Sie bereits an der Umfrage teilgenommen haben, kann eine erneute Stimmabgabe nicht gewertet werden.";}
else
{
$eintrag = "INSERT INTO $umfrage_tabelle
(zaehler_01, zaehler_02, zaehler_03, zaehler_04, zaehler_05, zaehler_06, ip, datum_uhrzeit, datum_uhrzeit_verfall)
VALUES
('$zaehler_01', '$zaehler_02', '$zaehler_03', '$zaehler_04', '$zaehler_05', '$zaehler_06', '$ip', '$datum_uhrzeit', '$datum_uhrzeit_verfall')";
$eintragen = mysql_query($eintrag);
/*** zur Überprüfung des korrekten Eintrags in die DB ggf. freischalten***/
/* if ($eintragen==true)
{
echo "<br><br>Ihre Abstimmung war erfolgreich.";
}
else echo "<br><br>Ihre Abstimmung war nicht erfolgreich.";
*/
} // Ende if ($blocken!="ja")
/*** Auslesen Datensätze ***/
$abfrage = "SELECT id, zaehler_01, zaehler_02, zaehler_03, zaehler_04, zaehler_05, zaehler_06, ip, datum_uhrzeit FROM $umfrage_tabelle";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$gesamt_zaehler_01 = $gesamt_zaehler_01 + $row->zaehler_01;
$gesamt_zaehler_02 = $gesamt_zaehler_02 + $row->zaehler_02;
$gesamt_zaehler_03 = $gesamt_zaehler_03 + $row->zaehler_03;
$gesamt_zaehler_04 = $gesamt_zaehler_04 + $row->zaehler_04;
$gesamt_zaehler_05 = $gesamt_zaehler_05 + $row->zaehler_05;
$gesamt_zaehler_06 = $gesamt_zaehler_06 + $row->zaehler_06;
$gesamt_zaehler = $gesamt_zaehler + 1;
}
/*** Berechnung der Prozentangaben ***/
$prozent_gesamt=100/$gesamt_zaehler*$gesamt_zaehler;
$prozent_gesamt_zaehler_01=100/$gesamt_zaehler*$gesamt_zaehler_01;
$prozent_gesamt_zaehler_02=100/$gesamt_zaehler*$gesamt_zaehler_02;
$prozent_gesamt_zaehler_03=100/$gesamt_zaehler*$gesamt_zaehler_03;
$prozent_gesamt_zaehler_04=100/$gesamt_zaehler*$gesamt_zaehler_04;
$prozent_gesamt_zaehler_05=100/$gesamt_zaehler*$gesamt_zaehler_05;
$prozent_gesamt_zaehler_06=100/$gesamt_zaehler*$gesamt_zaehler_06;
/*** Darstellung der Zusammenrechnung ***/
echo "<hr><table class=umfrage><tr><th class=umfrage colspan=4>Umfrageergebnis</th></tr>";
if ($antwort_01!="") {echo "<tr><th class=umfrage_antworten>".$antwort_01.": </th><td class=umfrage_stimmen>".$gesamt_zaehler_01."<td class=umfrage_balken>";
$i=0;
while($i<$prozent_gesamt_zaehler_01)
{
echo "<img src=$pfad_balkengrafik_01 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_prozent>".number_format($prozent_gesamt_zaehler_01,$nachkommastellen)." %</td></tr>";}
if ($antwort_02!="") {echo "<tr><th class=umfrage_antworten>".$antwort_02.": </th><td class=umfrage_stimmen>".$gesamt_zaehler_02."<td class=umfrage_balken>";
$i=0;
while($i<$prozent_gesamt_zaehler_02)
{
echo "<img src=$pfad_balkengrafik_02 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_prozent>".number_format($prozent_gesamt_zaehler_02,$nachkommastellen)." %</td></tr>";}
if ($antwort_03!="") {echo "<tr><th class=umfrage_antworten>".$antwort_03.": </th><td class=umfrage_stimmen>".$gesamt_zaehler_03."<td class=umfrage_balken>";
$i=0;
while($i<$prozent_gesamt_zaehler_03)
{
echo "<img src=$pfad_balkengrafik_03 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_prozent>".number_format($prozent_gesamt_zaehler_03,$nachkommastellen)." %</td></tr>";}
if ($antwort_04!="") {echo "<tr><th class=umfrage_antworten>".$antwort_04.": </th><td class=umfrage_stimmen>".$gesamt_zaehler_04."<td class=umfrage_balken>";
$i=0;
while($i<$prozent_gesamt_zaehler_04)
{
echo "<img src=$pfad_balkengrafik_04 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_prozent>".number_format($prozent_gesamt_zaehler_04,$nachkommastellen)." %</td></tr>";}
if ($antwort_05!="") {echo "<tr><th class=umfrage_antworten>".$antwort_05.": </th><td class=umfrage_stimmen>".$gesamt_zaehler_05."<td class=umfrage_balken>";
$i=0;
while($i<$prozent_gesamt_zaehler_05)
{
echo "<img src=$pfad_balkengrafik_05 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_prozent>".number_format($prozent_gesamt_zaehler_05,$nachkommastellen)." %</td></tr>";}
if ($antwort_06!="") {echo "<tr><th class=umfrage_antworten>".$antwort_06.": </th><td class=umfrage_stimmen>".$gesamt_zaehler_06."<td class=umfrage_balken>";
$i=0;
while($i<$prozent_gesamt_zaehler_06)
{
echo "<img src=$pfad_balkengrafik_06 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_prozent>".number_format($prozent_gesamt_zaehler_06,$nachkommastellen)." %</td></tr>";}
echo "<tr><th class=umfrage_gesamt>gesamt: </th><td class=umfrage_gesamt_stimmen>".$gesamt_zaehler."<td class=umfrage_gesamt_balken>";
$i=0;
while($i<$prozent_gesamt)
{
echo "<img src=$pfad_balkengrafik_07 border=0>";
$i=$i+1;
}
echo "</td><td class=umfrage_gesamt_prozent>".number_format($prozent_gesamt,$nachkommastellen)." %</td></tr>";
echo "</table>";
} // if ($antwort!="")
} // if ($antwort!="")
?>
Und hier noch die CSS-Infos:
h3 { /* Headline im Text */
color: #000000;
margin-top: 0px;
font-size: 120%;
font-weight: 900;
font-family: helvetica, arial, geneva, sans-serif;
}
input.button {
color:#000000;
border-top: 1px solid #00037F;
border-left: 1px solid #00037F;
border-bottom: 2px solid #00037F;
border-right: 2px solid #00037F;
background-color:#F4FFF4;
}
table.umfrage {
font-size: 100%;
background: #00037F;
}
td.umfrage_stimmen,
td.umfrage_gesamt_stimmen {
color: #ffffff;
unicode-bidi: inherit;
vertical-align: top;
text-align: right;
}
td.umfrage_gesamt_stimmen {
border-top: 1px solid #97a7d5;
}
td.umfrage_balken,
td.umfrage_gesamt_balken {
border-left: 1px solid #97a7d5;
border-right: 1px solid #97a7d5;
}
td.umfrage_gesamt_balken {
border-left: 1px solid #97a7d5;
border-right: 1px solid #97a7d5;
border-top: 1px solid #97a7d5;
}
td.umfrage_prozent,
td.umfrage_gesamt_prozent {
text-align: right;
color: #ffffff;
font-size: 80%;
}
td.umfrage_gesamt_prozent {
border-top: 1px solid #97a7d5;
}
th.umfrage,
th.umfrage_antworten,
th.umfrage_gesamt {
background: #00037F;
color: #ffffff;
text-align: left;
font-weight: 900;
padding: 3px;
unicode-bidi: inherit;
vertical-align: top;
}
th.umfrage {
border-bottom: 2px solid #97a7d5;
}
th.umfrage_gesamt {
border-top: 1px solid #97a7d5;
}
Viel Spaß!