login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Poll stemt raar

Offline Tai - 16/10/2006 13:27 (laatste wijziging 17/10/2006 14:03)
Avatar van TaiNieuw lid Het probleem

Ik heb 4 opties. Ik stem op optie 1, en dan bekijk ik het resultaat. Mijn stem komt tot nu toe overeen met wat ik gestemd heb. Even later stem ik weer, maar dan op optie 2, klopt ook nog. Maar na ongeveer de derde stem loopt alles in de soep. Ik heb de derde keer weer op optie 1 gestemd. Hij heeft de 1e stem van optie 1, verplaats naar optie 3.

Ik hoop dat dit niet te ingewikkeld klinkt..

Ik include de poll op mijn index met deze code:
  1. <?PHP include_once("poll.php"); ?>


Op de index.php heb ik dit helemaal bovenaan staan:
  1. <?php
  2. ?>


Ik gebruik het script van deze site: (Poll systeem zonder sql)
  1. <?php
  2. ob_start(); //is enkel nodig voor de doorverwijzing
  3. /* POLL
  4. SIMPEL STEMSYSTEEM ZONDER MYSQL. RESULTATEN WORDEN OPGELSAGEN IN EEN LOG-BESTANDJE, WELKE GESCHEIDEIN WORDEN DOOR EEN ,.
  5. BIJ GEBRUIK OP WEBSERVER MOET HET BESTANDJE 0777 GESCHMOD WORDEN*/
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. /*ER KUNNEN ZOVEEL OPTIES TOEGEVOEGD WORDEN ALS MEN WIL, DIT WORDT AUTOMATISCH OPGENOMEN IN HET SCRIPT MITS DEZE GESCHEIDEN ZIJN DOOR EEN KOMMA (,) IN POLL.TXT.*/
  14.  
  15. $file = "poll.txt"; //het bestandje
  16. $fp = fopen($file, "r"); //lees poll.txt uit
  17. $inhoud = fread($fp, filesize($file)); //uitlezen
  18. fclose($fp);
  19. $vraag = "Frames, tabbellen of CSS, of toch iets anders?";
  20. $optie = array("Frames", "Tabellen", "CSS", "Anders..");
  21. $resultaat = explode(",", $inhoud); //$inhoud in een array zetten.
  22. $totaal = array_sum($resultaat); //totaal berekenen
  23. $j = count($resultaat); //tellen hoeveel resultaten er zijn (standaard 3)
  24.  
  25. if($_COOKIE['poll2'] == 'gestemd')
  26. {
  27. echo "<table height=\"200\" width=\"190\"><tr><td valign=\"top\"><table><tr><td style='font-size: 12px; font-family: arial; color: #270f4a;'>".$vraag."</td></tr></table><br>";
  28. for($i = 0; $i < $j; $i ++) //lusje om resultaten te laten zien.
  29. {
  30. $uitslag = round(100 / $totaal * $resultaat[$i]); //formule voor procenten
  31. echo "<table width=\"180\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
  32. <tr>
  33. <td width=\"100\">
  34. <font style='font-size: 11px; font-family: arial;'>".$optie[$i]."</font>
  35. </td>
  36. <td width=\"20\">
  37. &nbsp;
  38. </td>
  39. <td width=\"*\"><table border=\"0\" width=\"".$uitslag."%\" height=\"20\"><td bgcolor=\"#3399cc\"> </td></tr></table></td>
  40.  
  41.  
  42. <td width=\"30\"><font style='font-size: 11px;'>".$uitslag."%</font></td></tr></table>
  43. <br>"; //maak de opmaak met de breedte van tabel
  44. }
  45. echo "<b><font style='font-size:11px;'>Je hebt al gestemd.</b><br><br><b>".$totaal."</b> stem(men) totaal</font></table>";
  46. }
  47. else
  48. {
  49. if(isset($_POST['stemmen'])) //als er op de knop geklikt is
  50. {
  51. if($_POST['stem'] == '') //als er geen waarde is
  52. {
  53. echo "<table height=\"220\" width=\"190\"><tr><td valign=\"top\"><font style='font-size: 11px;'>Je hebt niks ingevuld.<br><a href='javascript:history.go(-1)'>Ga terug</a></font></table>";
  54. }
  55. else
  56. { // hieronder moeten de overige resultaten ook weer ingevoegd worden.
  57. for($l = 0; $l < $_POST['stem']; $l ++)
  58. {
  59. $invoegen.= $resultaat[$l].","; //komma er weer bij..
  60. }
  61. $invoegen.= $resultaat[$_POST['stem']]+1; //voeg de stem toe + 1
  62. for($l = $_POST['stem']; $l < $j-1; $l ++)
  63. {
  64. $invoegen.= ",".$resultaat[$l];
  65. }
  66.  
  67. $fp = fopen($file, "r+");
  68. fputs($fp, $invoegen); //$invoegen invoegen
  69. fclose($fp);
  70. setcookie("poll2", "gestemd", time()+10); //hier wordt het cookie geset op 10 seconden
  71. echo "<table height=\"220\" width=\"190\"><tr><td valign=\"top\"><font style='font-size: 11px;'><b>Je stem is verzonden!</b><br><br>Je wordt nu doorgestuurd naar de poll...</font></table>";
  72. header("refresh: 2; url=index.php"); //doorverwijzing
  73. }
  74. }
  75. else
  76. {
  77. echo "<table height=\"220\" width=\"190\"><tr><td valign=\"top\"><table><tr><td style='font-size: 12px; font-family: arial; color: #270f4a;'>".$vraag."</td></tr></table><form method=\"post\">";
  78. for($i = 0; $i < $j; $i ++) //lusje om resultaten te laten zien.
  79. {
  80.  
  81. @($uitslag = round(100 / $totaal * $resultaat[$i])); //formule voor procenten
  82.  
  83. echo "
  84.  
  85. <table width=\"180\" border=\"0\">
  86. <tr>
  87. <td width=\"100\">
  88. <font style='font-size: 11px; font-family: arial;'>".$optie[$i]."</font>
  89. </td>
  90. <td width=\"20\">
  91.  
  92. <input style='background-color: #f3ecec; border: 1px dashed #d3d3d3;' type=\"radio\" name=\"stem\" value=\"".$i."\">
  93. </td>
  94. </tr></table>
  95.  
  96. "; //maak de opmaak met de breedte van tabel
  97. }
  98. echo "<input style='font-size: 11px; font-family: arial; background-color: #eee4e4; margin-top: 5px; margin-left: 112px; border: 1px solid #d3d3d3;' type=\"submit\" name=\"stemmen\" value=\"Stemmen\">
  99. </form><font style='font-size:11px;'><b>".$totaal."</b> stem(men) totaal</font></table>";
  100. }
  101. }
  102. ?>


___________________________________________________

De link naar het script:

http://www.site...amp;id=495

Poll.txt
  1. 0,0,0,0

Bij 0 stemmen.

Poll.txt
  1. 1,0,0,1

Bij 1 stem op optie 1, 1 stem op optie 4.

Poll.txt
  1. 2,1,2,0

Bij 2 stemmen op optie 1, 1 stem op optie 2, 2 stemmen op optie 3, 0 stemmen op optie 4.

Etc.

___________________________________________________

Ik heb hem ook in de originele vorm getest. Ik kreeg toen de volgende error:

Warning: Division by zero in \.\.\.\poll.php on line 62

Dus heb ik bij de deling van dit:
  1. $uitslag = round(100 / $totaal * $resultaat[$i]);


dit gemaakt:
  1. @($uitslag = round(100 / $totaal * $resultaat[$i]));


Maar dat stukje is goed.
Voor de rest staan er wat style veranderingen in.

Hij doet het ook fout bij het originele script. Hij vervangt stemmen bij een bepaalde optie naar een stem bij een andere optie.
En dat is zonder include.

___________________________________________________

Daarnaast include ik de poll op nog 5 andere pagina's. (Totaal 6)
Ik heb boven elke pagina een "ob_start" staan. Maar volgens mij klopt dit ook niet helemaal.

Ik heb vanalles gelezen over sessions en cookies maar ik kom er niet uit. Ik heb ook verschillende websites afgezocht naar een dergelijke fout, maar ik vond niets.
Als iemand een oplossing heeft, graag!  

Groetjes!



  IK HEB HET AL. TOCH NOG BEDANKT VOOR JULLIE HELP!

7 antwoorden

Gesponsorde links
Offline Thomas - 16/10/2006 13:48
Avatar van Thomas Moderator Hoe luidt de link naar het script?
Heb je al geprobeerd contact op te nemen met de auteur?
Heb je al gekeken naar de inhoud van poll.txt?
Offline Tai - 16/10/2006 13:58 (laatste wijziging 16/10/2006 14:45)
Avatar van Tai Nieuw lid De link naar het script:

http://www.site...amp;id=495

Nee, ik heb dat nog niet geprobeerd, maar ik weet niet of dat wel erg veel zin heeft omdat ik een aantal aanpassingen heb gemaakt. Voor de zekerheid zal ik hem doorverwijzen naar dit topic.
(Zijn postvak in is Vol, 50 berichten..)

Poll.txt
  1. 0,0,0,0


Bij 0 stemmen.

Poll.txt
  1. 1,0,0,1


Bij 1 stem op optie 1, 1 stem op optie 4.

Poll.txt
  1. 2,1,2,0


Bij 2 stemmen op optie 1, 1 stem op optie 2, 2 stemmen op optie 3, 0 stemmen op optie 4.

Etc.
Offline Ultimatum - 16/10/2006 14:05 (laatste wijziging 16/10/2006 14:05)
Avatar van Ultimatum PHP expert Heb je heb ook al getest toen je hem niet had aangepast want als het toen wel klopte dan gaat het met jou "add-ons" dus niet goed.
Offline Tai - 16/10/2006 14:15 (laatste wijziging 16/10/2006 14:20)
Avatar van Tai Nieuw lid Ja ik heb hem toen ook getest. Ik kreeg toen de volgende error:

Warning: Division by zero in \.\.\.\poll.php on line 62

Dus heb ik bij de deling van dit:

  1. $uitslag = round(100 / $totaal * $resultaat[$i]);


dit gemaakt:

  1. @($uitslag = round(100 / $totaal * $resultaat[$i]));


Maar dat stukje is goed.
Voor de rest staan er wat style veranderingen in.

Hij doet het ook fout bij het originele script. Hij vervangt stemmen bij een bepaalde optie naar een stem bij een andere optie.
En dat is zonder include.
Offline Ultimatum - 16/10/2006 14:27
Avatar van Ultimatum PHP expert Wat jij doet is ook niet goed...

Je gaat de fout onderdrukken maar dat wil niet zeggen dat het dan wel werkt, 1 van de 2 variablen bestaat niet of 0 dus echo $totaal of $resultaat[i] en dan vervang je i door een nummer om te kijken of de array $resultaat überhaupt wel gevuld is.
Offline Thomas - 16/10/2006 14:28
Avatar van Thomas Moderator Hm, een aantal opmerkingen:
- maak van de style-attributen CSS-classes en verplaats deze naar een stylesheet, de code (html/php/css door elkaar) is zo compleet onleesbaar
- (regel 59) $invoegen begint met toevoeging (.=) aan de nog niet-bestaande string $invoegen. Je moet of dit toevoegteken (het puntje) weghalen of $invoegen initialiseren op de lege string; Nog beter / makkelijker is het werken met arrays, en dan imploden op ",", dan hoef je ook niet zo te hannesen met komma's
- als 2 mensen "tegelijkertijd" stemmen is je poll aan gort, gebruik flock() voor het locken van bestanden (om er naar te schrijven)
- je cookie is maar 10 seconden geldig en is alleen geldig in de folder (en het domein) van aanroep, dit lijkt mij ook niet echt gewenst?
- $resultaat[$i] kan 0 zijn, dus de volgende instructie:
$uitslag = round(100 / $totaal * $resultaat[$i]) (oftewel delen door 0) lijkt mij niet gewenst

Ik zou dit script eens grondig onder de loep nemen of (wellicht sneller) opnieuw schrijven.
Offline Tai - 16/10/2006 14:33 (laatste wijziging 17/10/2006 14:03)
Avatar van Tai Nieuw lid @ Ultimatum

Dit heb ik gedaan en hij werkte prima als beide niet 0 waren. Hij deed het ook als ze 0 waren, maar ik kreeg alleen de error tussendoor.

@ FangorN

Dankjewel voor de feedback, maar ik wil je even laten weten dat ik het script niet zelf heb geschreven maar gewoon gedownloadt.
Ik zal je commentaar eens goed nalezen en kijken wat ik kan doen. (Ik ben geen PHP gevorderde dus het zal wel even duren. )

Antwoorden:

- Ja het is redelijk slordig..
- als ik het puntje weghaal verandert hij de stemmen nog. Ik snap niet precies wat je bedoelt. Doe maar alsof je het aan een kind van 5 uitlegt, dan snap ik het misschien.  
- Ik zal eens zoeken hoe ik flock() gebruik.
-Ik heb de cookie op 10 seconden gezet zodat ik makkelijk de boel kon testen. Normaal zet ik hem op
  1. setcookie("poll2", "gestemd", time()+3600*24*7);

- De nul is nodig voor als er nog geen stemmen zijn. Met welke code kan ik dit dan rechtzetten?
Ik heb al zoiets geprobeerd als:
  1. If $totaal == '0';
  2. $uitslag ='0';
  3. }Else{
  4. ..


Edit:

Ik heb dit:
  1. if (flock($fp, LOCK_EX)) {
  2. fwrite($fp, "...\n");
  3. flock($fp, LOCK_UN);
  4. } else {
  5. echo "Fout!";
  6. }


tussen:
  1. $fp = fopen($file, "r"); //lees poll.txt uit


en:
  1. $inhoud = fread($fp, filesize($file)); //uitlezen


gezet...


Iemand nog ideeën?

- Is de include_once wel goed?

- Hoe zit het met ob_start(); op verschillende pagina's?



IK HEB HET AL. TOCH NOG BEDANKT VOOR JULLIE HELP!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 1.056s