Ajax Daumen-Hoch script realisieren.
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abstimmung
beispiel
code
datei
datenbank
daumen
ergebnis
fehler
forum
hintergrund
http
laden
post
problem
server
speichern
stimmen
test
url
witz
-
Guten Morgen,
Folgendes,
gere würde folgendes realisieren:
man hat auf einer Website einen Post, z.B. einen Kommentar, und möchte diessen dann mit Daumen hoch oder runter bewerten.. ähnlich wie bei YT.
Jetzt könnte ich das ohne Probleme mit PHP und ner mysql datenbank realisieren.. Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
Ich hätte es aber gerne So, dass das nötige script im Hintergrund -->AJAX ausgeführt wird, und der Daumen in eine Datenbank eingetragen wird, ohne die Seite neu zu laden...
Wie Gesagt mit PHP und der Datenbank is das kein Problem für mich, aber mit AJAX kenn ich mich nicht so aus, und hoffe, dass mir jemand von euch weiterhelfen kann, oder eine Website empfielt, wo soetwas erklärt wird..
Vielen Dank, und gute Nacht wünscht euch euere Hermine
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
paddy-herrmy schrieb:
Das könntest du so machen:
Wie Gesagt mit PHP und der Datenbank is das kein Problem für mich, aber mit AJAX kenn ich mich nicht so aus, und hoffe, dass mir jemand von euch weiterhelfen kann, oder eine Website empfielt, wo soetwas erklärt wird..function createXMLHttpRequest() { if(window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } else { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } } function bewerten(hochrunter) { var request = createXMLHttpRequest(); request.open("GET", "bewertungsseite.php?daumen=" + hochrunter, true); request.send(); }
-
paddy-herrmy schrieb:
warum?
... Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss ...
1. daumen-hoch-seite schickt die daten via post mit curl an den server;
2. je nach ergebnis weiter zur nächten seite oder daumen-hoch-seite wiederholen (wegen fehler?!)
(ich poste oft so, dass man sich glauben könnte, ich hätte etwas gegen js/ajax. nein. ich will das zeug nur dort haben, wo es angebracht ist.) -
hemiolos schrieb:
paddy-herrmy schrieb:
warum?
... Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss ...
1. daumen-hoch-seite schickt die daten via post mit curl an den server;
2. je nach ergebnis weiter zur nächten seite oder daumen-hoch-seite wiederholen (wegen fehler?!)
(ich poste oft so, dass man sich glauben könnte, ich hätte etwas gegen js/ajax. nein. ich will das zeug nur dort haben, wo es angebracht ist.)
Nehmen wir an, du hast eine Seite, mit 15 Witzen untereinander.. wenn du jetzt dem unterstem einen Daumen hoch gibst, must du nach dem laden wieder genau da hin zurück scrollen, wo du geliked hast... und ja ich weiss, man kann das dann auch mit #hierher machen, aber mit ajax wärs wesentlich eleganter... -
hemiolos schrieb:
Naja, und du möchtest curl beim Client verwenden? Zeig bitte mal ein Beispiel wie das funktioniert...
1. daumen-hoch-seite schickt die daten via post mit curl an den server;
paddy-herrmy schrieb:
Dann schau dir meinen Javascript-Code an, der macht dir genau das...
Nehmen wir an, du hast eine Seite, mit 15 Witzen untereinander.. wenn du jetzt dem unterstem einen Daumen hoch gibst, must du nach dem laden wieder genau da hin zurück scrollen, wo du geliked hast... und ja ich weiss, man kann das dann auch mit #hierher machen, aber mit ajax wärs wesentlich eleganter... -
Das sollte dir auch schon weiterhelfen:
http://stackoverflow.com/questions/8187588/making-a-like-dislike-ajax-script-not-working
Generell würde ich aber auch mit jQuery arbeiten:
http://api.jquery.com/jQuery.ajax/ -
paddy-herrmy schrieb:
und ich verstehe es noch immer nicht, warum jedas mal nach daumen hoch die seite neu geladen werden muss¡¿ die 15 witze sind gleichzeitig sichtbar, du liest sie und nach jedem lesen triffst die entscheidung, ob daumen o. nicht. wenn daumen, dann vergibst eben daumen und liest weiter. bist du mit der seite fertig, schickst deine daumen auf einmal an den server und basta. diese art daumen zu vergeben hat nur vorteile:
Nehmen wir an, du hast eine Seite, mit 15 Witzen untereinander.. wenn du jetzt dem unterstem einen Daumen hoch gibst, must du nach dem laden wieder genau da hin zurück scrollen, wo du geliked hast... und ja ich weiss, man kann das dann auch mit #hierher machen, aber mit ajax wärs wesentlich eleganter...
1. js fällt weg (was bleibt ist webstandard);
2. ensteht kein zusätzlicher traffic im netz;
3. du quälst den sql-server nicht zig-mal;
4. ohne extra programmieren zu müssen, kannst - vor dem abschicken - jeden vergebenen daumen auch rückgängig machen (die zeit zum überlegen hast du ja, die seite liegt auf, niemand 'verdeckt' sie dir, dass du schnell agieren müsstest).
ja und ohne ajax geht das dann so und hier der kode:<?php error_reporting(E_ALL | E_STRICT); // witze zum testbetrieb $jokes = array( 'joke_1', 'joke_2', 'joke_3', 'joke_4', 'joke_5', 'joke_6', 'joke_7', 'joke_8', 'joke_9', 'joke_10', 'joke_11', 'joke_12', 'joke_13', 'joke_14', 'joke_15' ); // witz mit checkbox versehen $joke_n = null; for($i = 1; $i <= count($jokes); $i++) { $joke_n .= <<< EOT <p>{$jokes[$i-1]}<br /> daumen: <input type="checkbox" name="joke_$i" /></p>\n EOT; } // form erzeugen $form = <<< EOT <form action="./daumenauswerten.php" method="post"> $joke_n <input type="submit" name="action" value="daumen" /> </form> EOT; // ausgeben echo <<< EOT <!DOCTYPE html> <html> <head> <title>daumen</title> </head> <body> $form </body> </html> EOT;
hackyourlife schrieb:
lieber nicht ;)
... Naja, und du möchtest curl beim Client verwenden? Zeig bitte mal ein Beispiel wie das funktioniert...
also die art kompliziertheit der vorgegebenen sache hat mich derart gestört, dass ich mit meinen gedanken einfach davongaloppiert bin. kann jedem mal passieren (aber post stimmt wenigstens :o)
Beitrag zuletzt geändert: 27.4.2012 2:49:15 von hemiolos -
hemiolos schrieb:
Dann mal im Eröffnungspost nachlesen...
und ich verstehe es noch immer nicht, warum jedas mal nach daumen hoch die seite neu geladen werden muss¡¿paddy-herrmy schrieb:
Er möchte es also so, dass du auf Daumen hoch/runter drückst und er im Hintergrund das an den Server schickt, ohne die Seite dabei neu zu laden... und dafür braucht er AJAX.
Jetzt könnte ich das ohne Probleme mit PHP und ner mysql datenbank realisieren.. Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
Ich hätte es aber gerne So, dass das nötige script im Hintergrund -->AJAX ausgeführt wird, und der Daumen in eine Datenbank eingetragen wird, ohne die Seite neu zu laden... -
hackyourlife schrieb:
klar. jeder kann tun und lassen im netz was er will (bis auf ...). auf spatzen mit kanonen schießen oder was auch immer. man fragt nur, was mag dahinter der sinn sein¿
hemiolos schrieb:
Dann mal im Eröffnungspost nachlesen...
und ich verstehe es noch immer nicht, warum jedas mal nach daumen hoch die seite neu geladen werden muss¡¿paddy-herrmy schrieb:
Er möchte es also so, dass du auf Daumen hoch/runter drückst und er im Hintergrund das an den Server schickt, ohne die Seite dabei neu zu laden... und dafür braucht er AJAX.
Jetzt könnte ich das ohne Probleme mit PHP und ner mysql datenbank realisieren.. Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
Ich hätte es aber gerne So, dass das nötige script im Hintergrund -->AJAX ausgeführt wird, und der Daumen in eine Datenbank eingetragen wird, ohne die Seite neu zu laden...
zum schluss von mir: ich hätte ihn so zitiert:Jedoch nur so, dass die Seite beim klick auf den Daumen neu geladen werden muss.
(und das fett gedruckt! weil es ja nicht stimmt. keine seite muss beim klick neu geladen werden. das bilden sich nur einige ein ;) -
kleines Beispiel Script mit 3 Dateien
Datei1: vote_page.php = Seite, auf dem das Voting angeboten wird
Datei2: vote_result.php = Include-Datei, auf dem das Voting ausgewertet wird
Datei3: vote_data.txt = Datei, in der das Voting-Ergebnis gespeichert wird
kann sicherlich noch optimiert werden, aber mal als Beispiel für die Funktionsweise
... anstatt in .txt könnte man die Ergebnisse auch in MySQL speichern
... das CSS-Style (und Javascript) könnte man auch noch in eigene Dateien "auslagern"
... etc.
zudem sollte man noch eine IP-Sperre machen, um mehrfache Votes zu verhindern
--------------------------------------------------------------------
Datei1: vote_page.php
<html> <head> <title>Abstimmung</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script type="text/javascript"> function getVote(usrvote) { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("res_poll").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","vote_result.php?vote="+usrvote,true); xmlhttp.send(); } </script> <style type="text/css"> <!-- .vclick { font-family: Arial, Helvetica, sans-serif; font-size:14px; float:left; margin:2px 6px 2px 6px; padding:4px; cursor:pointer; border: 1px solid #AAAAAA; } .bg_green { background:#AAFFCC; } .bg_red { background:#FFCCCC; } --> </style> </head> <body> <p>--- <a href="vote_page.php">Abstimmung</a> --- </p> <p> </p> <div id="get_poll"> <h3>Sagst Du Ja oder Nein ... ?</h3> <p class="vclick bg_green" onclick="getVote('a')" />JA - Daumen hoch</p> <p class="vclick bg_red" onclick="getVote('b')" />NEIN - Daumen runter</p> </div> <p style="clear:both;"> </p> <div id="res_poll"> <?php include_once('vote_result.php'); ?> </div> <p> </p> </body> </html>
anstatt dem Link "JA - Daumen hoch" könnte man eine "Daumen hoch Grafik" als Link machen
und für den Link "NEIN - Daumen runter" entsprechend andere Grafik
die Styles in den <p> TAGs kann man anpassen
--------------------------------------------------------------------
Datei2: vote_result.php
<?php // -------------------------------------------- if (!empty($_REQUEST['vote'])) { $vote = $_REQUEST['vote']; } else { $vote = ''; } // -------------------------------------------- $filename = "vote_data.txt"; // -------------------------------------------- // ---- Altes Ergebnis laden---- $content = file_get_contents($filename); //put content in array $res_array = explode("|", $content); $res_a = $res_array[0]; $res_b = $res_array[1]; // ---- Neues Ergebnis berechnen ---- if (!empty($vote)) { if ($vote == 'a') { $res_a = $res_a + 1; } if ($vote == 'b') { $res_b = $res_b + 1; } // ---- Neues Ergebnis speichern ---- $insertvote = $res_a."|".$res_b; $fp = fopen($filename,"w",0666); fputs($fp,$insertvote); fclose($fp); } // -------------------------------------------- $gesamt_ab = ($res_b + $res_a); $gesdif_ab = ($res_a - $res_b); if (0 < $res_a) { $percent_a = (100*round($res_a/$gesamt_ab,2)); } else { $percent_a = 0; } if (0 < $res_b) { $percent_b = (100*round($res_b/$gesamt_ab,2)); } else { $percent_b = 0; } if (0 < $gesamt_ab) { $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2)); } else { $rank_a_b = $res_a; } $width_a = ($percent_a * 2); $width_b = ($percent_b * 2); // -------------------------------------------- ?> <h2>Ergebnis:</h2> <table width="400" cellpadding="2" cellspacing="2" border="0" bgcolor="#DEDEDE"> <tr align="left" valign="top"> <td width="45">Yes:</td> <td width="224"><img src="vote1.gif" width="<?php echo $width_a; ?>" height="20" /></td> <td width="58"><?php echo $percent_a.'%'; ?></td> <td width="71"><?php echo $res_a; ?></td> </tr> <tr align="left" valign="top"> <td width="45">No:</td> <td width="224"><img src="vote2.gif" width="<?php echo $width_b; ?>" height="20" /></td> <td width="58"><?php echo $percent_b.'%'; ?></td> <td width="71"><?php echo $res_b; ?></td> </tr> </table> <p> </p> <p><?php echo 'Stimmen Gesamt: ' . $gesamt_ab; ?></p> <p><?php echo 'Verhältnis: ' . $res_a .' zu '. $res_b; ?></p> <p><?php echo 'Rank-Wert: ' . $rank_a_b; ?></p> <p> </p>
Rank-Wert Berechnung, Ergebnis-Ausgabe und Art der Speicherung (z.B. MySQL)
kann man ja nach Bedarf / Vorlieben ändern und anpassen ...
--------------------------------------------------------------------
Datei3: vote_data.txt
0|0
hier werden die Ergenisse der Abstimmung gespeichert,
Alternative wäre Speichern in MySQL, dazu muss Datei2: vote_result.php angepasst werden
Insgesamt ist das hier nur ein "kleines" Beispiel
und wie gesagt, Optimierung geht noch einiges
für Abstimmungen für jeden Kommentar müsste man in AJAX-Übergabe
noch weitere Werte übergeben (ID vom Post/ Kommentar) und entprechend speichern
entweder über $filename oder weitere Spalte(n) in MySQL
damit man auch unterschiedliche Ergebnisse bekommt, je Kommentar / was auch immer
auch sollte man Mehrfach-Abstimmungen durch IP-Sperre blocken
aber das ist wieder ein anderes Thema, wäre zuviel für diesen Beitrag
ich hoffe das hilft schonmal ein bischen weiter
-
also ok, von mir aus halt ajax (aber noch immer mit unverständnis).
oindex schrieb:
leider funktioniert nicht (link zum ansehen [kode unverändert])
... Insgesamt ist das hier nur ein "kleines" Beispiel und wie gesagt, Optimierung geht noch einiges ...
die nötige änderungen:
1. vote_client.php (link zum testen)<?php error_reporting(E_ALL | E_STRICT); $self = basename(__FILE__); require_once './html.php'; echo $html;
2. html.php (html-site des clients)<?php require_once './ajax.php'; require_once './css.php'; $html = <<< EOT <!DOCTYPE html> <html> <head> <meta charset=utf-8"> <title>Abstimmung</title> <meta http-equiv="cache-control" content="no-cache" /> $ajax $css </head> <body> <p>--- <a href="$self">Abstimmung</a> --- </p> <p> </p> <div id="get_poll"> <h3>Sagst Du Ja oder Nein ... ?</h3> <p class="vclick bg_green" onclick="getVote('a')" />JA - Daumen hoch</p> <p class="vclick bg_red" onclick="getVote('b')" />NEIN - Daumen runter</p> </div> <p style="clear:both;"> </p> <div id="res_poll"> </div> <p> </p> </body> </html> EOT;
3. ajax.php (hier ist einer der wesentlichen änderungen)<?php $ajax = <<< EOT <script type="text/javascript"> function getVote(usrvote) { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { switch (xmlhttp.readyState) { case 4: if (xmlhttp.status != 200) { alert("Fehler:" + xmlhttp.status); } else { //alert(xmlhttp.responseText); //schreibe die antwort in den div container mit der id 'res_poll' var result = '<strong>' + xmlhttp.responseText + '</strong>'; document.getElementById('res_poll').innerHTML = result; } break; default: return false; break; } }; xmlhttp.open("GET","http://hemiolos.lima-city.de/forum/paddy-herrmy/oindex_mod/vote_server.php?vote="+usrvote,true); xmlhttp.send(); document.getElementById("res_poll").innerHTML=xmlhttp.responseText; } </script> EOT;
4. css.php<?php $css = <<< EOT <style type="text/css"> <!-- .vclick { font-family: Arial, Helvetica, sans-serif; font-size:14px; float:left; margin:2px 6px 2px 6px; padding:4px; cursor:pointer; border: 1px solid #aaa; } .bg_green { background:#afc; } .bg_red { background:#fcc; } --> </style> EOT;
5. vote_server.php<?php error_reporting(E_ALL | E_STRICT); $result = null; header('Expires: Thu, 19 Nov 1981 08:52:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); header('Pragma: no-cache'); if(!empty($_REQUEST['vote'])) { $vote = $_REQUEST['vote']; $filename = 'vote_data.txt'; if(!is_file($filename)) { file_put_contents($filename, '0|0'); } $content = file_get_contents($filename); $res_array = explode('|', $content); $res_a = trim($res_array[0]); $res_b = trim($res_array[1]); if ($vote === 'a') { $res_a = $res_a + 1; } if ($vote === 'b') { $res_b = $res_b + 1; } file_put_contents($filename, "$res_a|$res_b"); } else { $result = '<strong>no user input</strong>'; } // ---- stat ------------------------------------------------------------------- $gesamt_ab = ($res_b + $res_a); $gesdif_ab = ($res_a - $res_b); if (0 < $res_a) { $percent_a = (100*round($res_a/$gesamt_ab,2)); } else { $percent_a = 0; } if (0 < $res_b) { $percent_b = (100*round($res_b/$gesamt_ab,2)); } else { $percent_b = 0; } if (0 < $gesamt_ab) { $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2)); } else { $rank_a_b = $res_a; } // ---- END stat --------------------------------------------------------------- $width_a = ($percent_a * 2); $width_b = ($percent_b * 2); $result .= <<< EOT <h2>Ergebnis:</h2> <!-- table width="400" cellpadding="2" cellspacing="2" border="0" bgcolor="#eee" --> <table width="175" cellpadding="2" cellspacing="2" border="0" bgcolor="#eee"> <tr align="left" valign="top"> <td width="45">Yes:</td> <!-- td width="224"><img src="vote1.gif" width="$width_a" height="20" alias="yes" /></td --> <td width="58">$percent_a %</td> <td width="71">$res_a</td> </tr> <tr align="left" valign="top"> <td width="45">No:</td> <!-- td width="224"><img src="vote2.gif" width="$width_b" height="20" alias="no" /></td --> <td width="58">$percent_b %</td> <td width="71">$res_b</td> </tr> </table> <p> </p> <p>Stimmen Gesamt: $gesamt_ab</p> <p>Verhältnis: $res_a zu $res_b</p> <p>Rank-Wert: $rank_a_b</p> <p> </p> EOT; exit(''.$result);
vorsicht! in vote_server.php wird caching durch header(...)-s verhindert. daher wird das ergebnis am progende nicht mit echo/printf sondern mit exit(...) ausgegeben, sonst kommt der bekannte fehler!
Beitrag zuletzt geändert: 2.5.2012 3:11:37 von hemiolos -
hemiolos schrieb:
also ok, von mir aus halt ajax (aber noch immer mit unverständnis).oindex schrieb:
leider funktioniert nicht (link zum ansehen [kode unverändert])
... Insgesamt ist das hier nur ein "kleines" Beispiel und wie gesagt, Optimierung geht noch einiges ...
Hallo
ich habe den Code von oindex auch mal ausprobiert,
bei mir funktioniert der 1A ... Vote1 Test von oindex code unverändert
ok, wenn man vergisst die Datei "vote_data.txt" anzulegen,
dann kommt vor der ersten Abstimmung bei mir auch der Fehler wie bei Dir ... No such file or directory
aber nach dem ersten Vote ist die Datei dann angelegt und es geht wunderbar
... hast Du in den Ordner bei Deinem Test evtl. keine Schreibrechte ?
gut ist die Idee, die .txt Datei direkt per Script zu erstellen
im Script von oindex dann bei "vote_result.php" einfügen
den Teil:
// -------------------------------------------- $filename = "vote_data.txt"; // --------------------------------------------
ersetzen durch:
// -------------------------------------------- $filename = "vote_data.txt"; // -------------------------------------------- if(!file_exists($filename)) { file_put_contents($filename, '0|0'); } // --------------------------------------------
keine Ahnung was besser ist, file_exists() oder is_file() ... wird keinen Unterschied machen
und bei dem Script von oindex sollte man dazu sagen,
dass man zwei kleine Bilder braucht, um die Ergebnis-Balken anzuzeigen,
Bild grün 10x10 Pixel - http://plugboard.lima-city.de/test/vote1/vote1.gif
Bild rot 10x10 Pixel - http://plugboard.lima-city.de/test/vote1/vote2.gif
wäre vielleicht geschickter, das mit DIVs und css: background-color zu machen
bei dem Beispiel von hemiolos bekam ich zuerst einen JS Alert ... Fehler: 0 ...
dann habe ich gesehen,
dass Du in der "ajax.php" Deine http:// URL für GET eingetragen hast
xmlhttp.open("GET","http://hemiolos.lima-city.de/forum/paddy-herrmy/oindex_mod/vote_server.php?vote="+usrvote,true);
.... geht wohl bei anderen nicht mit http:// Adresse wegen Cross-Site-Scripting
wenn ich den Pfad ändere, ohne die http:// URL (nur zur Datei), dann geht es
xmlhttp.open("GET","vote_server.php?vote="+usrvote,true);
... siehe Vote 2 Test von hemiolos
Frage:
wenn man caching durch header(...) verhindert,
was für ein (mir nicht bekanntes) Problem macht dann echo/printf ??
habs ausprobiert in "vote_server.php" unten
## exit(''.$result); echo $result;
und keinen Fehler gefunden ?!
-
Also erstmal:
Vielen dank für eure zahlreiche Hilfe
Ihr habt mir wirklich sehr geholfen..
Das Beispiel von oindex scheint mir am ausgereiftesten, darum werde ich darauf aufbauen..
@hemiolos
Ich weiss nicht, wie ich dir noch erklären soll, warum ich das so besser finde...
Deine checkbox-variante is ja ganz nett, aber ich finde das ganze nunmal nicht so elegant..
nehmen wir als Beispiel doch einfach mal YT wäre doch absolut unpraktisch, wenn die seite neu gelden wird, nachdem du einem Video ein daumen hoch vergibst...
Oder der Google+Button, oder der Like-Button von FB...
Es ist meiner Meinung nach einfach eleganter und schöner, wenn das ganze im Hintergrund bearbeitet wird..
Und um den MySQL-Server mach dir mal keine sorgen^^ bei den 50 Besuchern pro tag, wird der nicht zu sehr belastet^^
-
Hallo
hier nochmal eine verbesserte Version der Datei vote_result.php
anstatt der Bilder für die Balken werden jetzt (mit Farbe gefüllte) DIVs verwendet.
<?php // -------------------------------------------- if (!empty($_REQUEST['vote'])) { $vote = $_REQUEST['vote']; } else { $vote = ''; } // -------------------------------------------- $filename = "vote_data.txt"; // -------------------------------------------- if(!file_exists($filename)) { touch($filename,0666); file_put_contents($filename, '0|0'); } // -------------------------------------------- // ---- Altes Ergebnis laden---- $content = file_get_contents($filename); //put content in array $res_array = explode("|", $content); $res_a = $res_array[0]; $res_b = $res_array[1]; // ---- Neues Ergebnis berechnen ---- if (!empty($vote)) { if ($vote == 'a') { $res_a = $res_a + 1; } if ($vote == 'b') { $res_b = $res_b + 1; } // ---- Neues Ergebnis speichern ---- $insertvote = $res_a."|".$res_b; $fp = fopen($filename,"w",0666); fputs($fp,$insertvote); fclose($fp); } // -------------------------------------------- $gesamt_ab = ($res_b + $res_a); $gesdif_ab = ($res_a - $res_b); // ---- Prozente berechnen ---- if (0 < $res_a) { $percent_a = (100*round($res_a/$gesamt_ab,2)); } else { $percent_a = 0; } if (0 < $res_b) { $percent_b = (100*round($res_b/$gesamt_ab,2)); } else { $percent_b = 0; } // ---- Rank-Wert berechnen ---- if (0 < $gesamt_ab) { $rank_a_b = (100*round(($gesdif_ab/$gesamt_ab),2)); } else { $rank_a_b = $res_a; } // ---- Balken Breite (Prozent mal 2) ---- $width_a = ($percent_a * 2); $width_b = ($percent_b * 2); // ---- Balken DIVs HTML ---- $votediv_a = '<div style="margin:2px 0px; padding:0px; width:'.$width_a.'px; height:16px; background:#00CC33;"></div>'; $votediv_b = '<div style="margin:2px 0px; padding:0px; width:'.$width_b.'px; height:16px; background:#CC0033;"></div>'; // -------------------------------------------- $ergebnis = ' <h2>Ergebnis:</h2> <table width="410" cellpadding="2" cellspacing="0" border="0"> <tr align="left" valign="top"> <td width="45"> </td> <td> </td> <td width="65"><small>Prozent</small></td> <td width="65"><small>Stimmen</small></td> </tr> <tr align="left" valign="top" bgcolor="#CCCCCC"> <td width="45">Yes:</td> <td>'.$votediv_a.'</td> <td width="65">'.$percent_a.'%</td> <td width="65">'.$res_a.'</td> </tr> <tr align="left" valign="top" bgcolor="#CCCCCC"> <td width="45">No:</td> <td>'.$votediv_b.'</td> <td width="65">'.$percent_b.'%</td> <td width="65">'.$res_b.'</td> </tr> </table> <p> </p> <p>Stimmen Gesamt: '.$gesamt_ab.'</p> <p>Verhältnis: '.$res_a.' zu '.$res_b.'</p> <p>Rank-Wert: '.$rank_a_b.'</p> <p> </p> '; // -------------------------------------------- echo $ergebnis; // -------------------------------------------- ?>
aber nochmal der Hinweis,
dass man die Erebnisse (Zahlen / Daten) besser in MySQL speichern sollte
denn das Speichern in .txt kann (bei gleichzeizigem Zugriff) zum Crash führen,
... und das kann auch schon bei 50 Besuchern pro Tag passieren ....
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage