ugrás a tartalomhoz

Php kód értetlen módon nem jó

klinnsy · 2011. Ápr. 11. (H), 14.01
Sziasztok a problémám a következő lapon (is) megtalálható (régebben jó volt most hirtelen nem műxik):
http://nicelife.hu/tanuljunk/szemtipus/05.php
Az a gondom, hogy régebben működött ez a script, ahol szavazni lehet, most pedig a szavaz gomb után ugyanúgy csinálja mintha jó lenne, de a szavazás értékét nem adja hozzá a txt file-hoz.
Az az érdekes (és most jön a poén), hogy másnál pedig működik, mert kipróbálta ismerősöm, illetve látom, hogy töb szavazat is érkezik egy nap.

Itt a szavaz.php forráskódja, a többi adatot (kérdés, válaszok, ip, szavazatok 1-1 txt-ben tárolja melyek igen 777 attr-al vannak ellátva).

Már néztem több gépről, nekem nem működött, mi lehet a baj?

EZ TELJESEN LOGIKÁTLAN HIBA! AKI MEGOLDJA AZ ULTRAÁSZ! Köszönöm!
  1. <?php  
  2. $ip = getenv(REMOTE_ADDR);  
  3. $RESULT_FILE_NAME = "../../scripts/szavaz/hirek/halottidezes/szavazatok.txt";  
  4. $que = "../../scripts/szavaz/hirek/halottidezes/kerdes.txt";  
  5. $ans = "../../scripts/szavaz/hirek/halottidezes/valaszok.txt";  
  6. $fn = fopen ($que"r");  
  7. $puff = fread ($fnfilesize($que));  
  8. fclose ($fn);  
  9. $QUESTION = "$puff";  
  10. $lis= 0;  
  11. $plsr = file("../../scripts/szavaz/hirek/halottidezes/valaszok.txt");  
  12. for($x=0;$x<sizeof($plsr);$x++) {  
  13. $temp = explode("|",$plsr[$x]);  
  14. $list[$lis] = $temp[0];  
  15. $lis++;  
  16. }  
  17. $ANSWER = $list;  
  18. extract($HTTP_GET_VARS);  
  19. extract($HTTP_POST_VARS);  
  20. $fname="ip_log.dat";  
  21. if (strlen($answer)<=0&&!$vresult){  
  22. echo "<FORM METHOD=\"POST\">\n";  
  23.   
  24. echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";  
  25. echo "<TR><TH><font color=ffffff size=2>$QUESTION</TH></TR>\n";  
  26. while (list($key$val) = each($ANSWER)) {  
  27. echo "<TR><TD align=\"left\"><INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"$key\"><font color=8d9aa6 size=2> $val</TD></TR>\n";}  
  28. echo "<TR><TD align=\"center\"><INPUT TYPE=\"image\" src='http://www.nicelife.hu/scripts/szavaz/szavaz.png' NAME=\"vote\" VALUE=\" Szavazok \"></TD></TR>\n";  
  29. echo "<TR><TD align=\"center\"></form><form method=post><input type=hidden name=vresult value=1><INPUT TYPE=\"image\" src='http://www.nicelife.hu/scripts/szavaz/eredmenyek.png' NAME=\"result\" VALUE=\"Eredmények\">\n";  
  30. echo "</TABLE></form>";  
  31. }  
  32.   
  33. if (strlen($answer)>0) {  
  34. $plsr = file("../../scripts/szavaz/hirek/halottidezes/ip.txt");  
  35. for($x=0;$x<sizeof($plsr);$x++) {  
  36. $temp = explode("|",$plsr[$x]);  
  37. }  
  38. if($ip==$temp[0] && strlen($answer)>0 ){  
  39. echo "<font color=red size=2><div align=center>Erre a kérdésre egyszer már válaszoltál!</div></font>";  
  40. $file_array = file($RESULT_FILE_NAME);  
  41. if ($answer < count($ANSWER) && $vote) {  
  42. while (list($key$val) = each($file_array)) {  
  43. $total += $val;  
  44. }  
  45.   
  46. echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";  
  47. echo "<tr><th><font color=ffffff size=2><div align=center>Válaszok</th><th><font color=ffffff size=2><div align=center>Szavazatok aránya</th><th><font color=ffffff size=2><div align=center>Szavazatok száma</th></tr>";  
  48.   
  49. while (list($key$val) = each($ANSWER)){  
  50. $percent = $file_array[$key] * 100 / $total;  
  51. $percent_int = floor($percent);  
  52. $percent_float = number_format($percent, 1);  
  53. $tp += $percent_float;  
  54. if($percent_int>=75){  
  55. $color="#45abe5";  
  56. }  
  57. elseif($percent_int>=50){  
  58. $color="#388dbe";  
  59. }  
  60. elseif($percent_int>=25){  
  61. $color="#2d729a";  
  62. }  
  63. elseif($percent_int<25){  
  64. $color="#215370";  
  65. }  
  66.   
  67. echo "<tr><td><font color=8d9aa6 size=2> $ANSWER[$key] </td><td><table cellpadding=1 cellspacing=0 width=100% border=0 bgcolor=black><tr><td><table cellpadding=0 cellspacing=0 border=0 width=100%>  
  68. <tr>  
  69. <td bgcolor=$color width=$percent_int% height=10 style=border:0 >  
  70. <spacer type=block width=2 height=8>  
  71. </td>  
  72. <td bgcolor=white width=91% height=10 style=border:0>  
  73. <font color=8d9aa6 size=2>  
  74. <spacer type=block width=2 height=8>  
  75. </td>  
  76. </tr>  
  77. </table>  
  78. </td>  
  79. </tr>  
  80. </table><font color=67727c size=2>$percent_float%</td><td><font color=8d9aa6 size=2><center>$file_array[$key]</td></tr>";  
  81. }  
  82.   
  83. $tv=$total;  
  84.   
  85. echo "<td></td><td></td><td><font color=67727c size=2><div align=left><center>Összesen: $tv</font></font></font></td></TABLE>";  
  86. }  
  87. }elseif (strlen($answer)>0 && $ip!=$temp[0]){  
  88. $file_array = file($RESULT_FILE_NAME);  
  89. if ($answer < count($ANSWER) && $vote) {  
  90. $old_answer = $file_array[$answer];  
  91. $old_answer = preg_replace("/\n\r*/"""$old_answer);  
  92. $file_array[$answer] = ($old_answer + 1)."\n";  
  93. $fname="../../scripts/szavaz/hirek/halottidezes/ip.txt";  
  94. $fq = fopen($fname"a++");  
  95. fwrite ($fq$ip);  
  96. fwrite ($fq"|");  
  97. fwrite ($fq"\n");  
  98. fclose ($fq);  
  99. $file = join(''$file_array);  
  100. $fp = fopen("$RESULT_FILE_NAME""w");  
  101. flock($fp, 1);  
  102. fputs($fp$file);  
  103. flock($fp, 3);  
  104. fclose($fp);  
  105. echo "<div align=center><font color=67727c size=2>Szavazat elfogadva... </div>";  
  106. }  
  107. while (list($key$val) = each($file_array)) {  
  108. $total += $val;  
  109. }  
  110.   
  111. echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";  
  112. echo "<tr><th><font color=ffffff size=2>Válasz lehetőségek</th><th><font color=ffffff size=2>Válaszok aránya</th><th><font color=ffffff size=2><div align=center>Szavazatok száma</th></tr>";  
  113.   
  114. while (list($key$val) = each($ANSWER)){  
  115. $percent = $file_array[$key] * 100 / $total;  
  116. $percent_int = floor($percent);  
  117. $percent_float = number_format($percent, 1);  
  118. $tp += $percent_float;  
  119. if($percent_int>=75){  
  120. $color="#45abe5";  
  121. }  
  122. elseif($percent_int>=50){  
  123. $color="#388dbe";  
  124. }  
  125. elseif($percent_int>=25){  
  126. $color="#2d729a";  
  127. }  
  128. elseif($percent_int<25){  
  129. $color="#215370";  
  130. }  
  131.   
  132. echo "<tr><td><font color=8d9aa6 size=2> $ANSWER[$key] </td><td><table cellpadding=1 cellspacing=0 width=100% border=0 bgcolor=black><tr><td><table cellpadding=0 cellspacing=0 border=0 width=100%>  
  133. <tr>  
  134. <td bgcolor=$color width=$percent_int% height=10 style=border:0>  
  135. <spacer type=block width=2 height=8>  
  136. </td>  
  137. <td bgcolor=white width=91% height=10 style=border:0>  
  138. <spacer type=block width=2 height=8>  
  139. </td>  
  140. </tr>  
  141. </table>  
  142. </td>  
  143. </tr>  
  144. </table><font color=67727c size=2>$percent_float%</td><td><font color=8d9aa6 size=2><center>$file_array[$key]</td></tr>";  
  145.   
  146. }  
  147. $tv=$total;  
  148. echo "<td></td><td></td><td><font color=67727c size=2><center>Összesen: $tv</font></font></font></td></TABLE>";  
  149. }  
  150. else {  
  151. echo "Kérlek válassz előbb";  
  152. }  
  153. }  
  154. if (!emptyempty ($vresult)){  
  155. $file_array = file($RESULT_FILE_NAME);  
  156. while (list($key$val) = each($file_array)) {  
  157. $total += $val;  
  158. }  
  159.   
  160. echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";  
  161. echo "<tr><th><font color=ffffff size=2>Válasz lehetőségek</th><th><font color=ffffff size=2>Válaszok aránya</th><th><font color=ffffff size=2>Szavazatok száma</th></tr>";  
  162.   
  163. while (list($key$val) = each($ANSWER)){  
  164. $percent = $file_array[$key] * 100 / $total;  
  165. $percent_int = floor($percent);  
  166. $percent_float = number_format($percent, 1);  
  167. $tp += $percent_float;  
  168. if($percent_int>=75){  
  169. $color="#45abe5";  
  170. }  
  171. elseif($percent_int>=50){  
  172. $color="#388dbe";  
  173. }  
  174. elseif($percent_int>=25){  
  175. $color="#2d729a";  
  176. }  
  177. elseif($percent_int<25){  
  178. $color="#215370";  
  179. }  
  180.   
  181. echo "<tr><td><font color=8d9aa6 size=2> $ANSWER[$key] </td><td><table cellpadding=1 cellspacing=0 width=100% border=0 bgcolor=black><tr><td><table cellpadding=0 cellspacing=0 border=0 width=100%>  
  182. <tr>  
  183. <td bgcolor=$color width=$percent_int% height=10 style=border:0 >  
  184. <spacer type=block width=2 height=8>  
  185. </td>  
  186. <td bgcolor=white width=91% height=10 style=border:0 >  
  187. <spacer type=block width=2 height=8>  
  188. </td>  
  189. </tr>  
  190. </table>  
  191. </td>  
  192. </tr>  
  193. </table><font color=67727c size=2>$percent_float%</td><td><font color=8d9aa6 size=2><center>$file_array[$key]</td></tr>";  
  194.   
  195. }  
  196. $tv=$total;  
  197. echo "<td></td><td></td><td><font color=67727c size=2><center>Összes szavazat: $tv</td></TABLE>";  
  198. }  
  199.   
  200. ?>  
 
1

kódszínező

solkprog · 2011. Ápr. 11. (H), 14.28
-használj kódszínezőt.

-a linkelt oldalon működik a szavazás.

-ezt adatbázisban lenne célszerű letárolni, nem txt-kell szórakozni. De ha már txt akkor a fájlokat rakd wwwroot-on kívülre mert senkire nem tartozik milyen IP-kről szavaznak (és hogy mire)
2

Továbbá célszerű lenne

bugadani · 2011. Ápr. 11. (H), 14.46
Továbbá célszerű lenne felkészíteni a kódot a register_globals opció off állapotára. Hajlamosak megfeletkezni róla az emberek és csodálkoznak, hogy a kódjuk egy helyen működik és időben, a másikon, esetleg máskor pedig nem.
8

néhamegy néhanem

klinnsy · 2011. Ápr. 11. (H), 17.34
pont ez a gond, hogy kell ezt a globalst használni?
12

Változók

janoszen · 2011. Ápr. 11. (H), 21.59
Nos, akkor induljunk el a kályhától.

Szóval, vannak változók. Ezekben tudsz adatokat tárolni. PHP-ban ezeket $ jellel kell kezdeni, innen lehet őket felismerni. Normális esetben a programodon belüli változókat fogsz használni, csak elvétve használsz a felhasználótól kapott adatot.

Ha a felhasználótól kapott adatot szeretnél felhasználni, akkor arra több lehetőséged van. Ha a címsorban (GET paraméterben) átadott adatokra vagy kíváncsi, akkor $_GET['valtozonev'] néven fogod tudni őket megtámadni. Ha űrlapból POST metódussal küldted el, akkor $_POST['valtozonev'] néven találod meg őket.

Ezek a biztonság kedvéért vannak elválasztva, hiszen nézzünk egy ilyen kódot:
  1. if (valamifeltétel) {  
  2.  $belepve=1;  
  3. }  
Ha én most meghívnám a scriptet pl. így: /script.php?belepve=1 és a rendszer az URL-ben átadott változót automatikusan helyi változóként hozná létre, akkor ez azt jelentené, hogy be tudom magam léptetni. Ez a viselkedést hívják register_globals-nak. Alapértelmezetten a PHP idestova 10 éve ezt az opciót biztonsági okokból off állapotban tartja.

Még egy szó a felhasználói adatokról: ha bármilyen felhasználótól kapott adatot felhasználsz, azt annak megfelelően, hogy hol teszed, escapelni kell. Ha adatbázisba teszed, akkor pl. a mysql_real_escape_string() függvényt kell használni, ha HTML-be írod ki, akkor a htmlspecialchars() függvényt. Ez utóbbinál kínosan ügyelni kell arra, hogy a karakterkódolás meg legyen adva. Ha nem így teszel, akkor mindenféle biztonsági hiba lehet a kódodban, aminek mindenféle következménye lehet. Az még a legjobb eset, hogy egy beküldött kóddal szétesésre bírják az oldaladat, legrosszabb esetben elveszthetsz minden adatot.
6

aha

klinnsy · 2011. Ápr. 11. (H), 17.32
pont ez a gond, hogy valakinek megy, nekem nem ment, régen igen.
Sajna a php-hez nem értek igazán, htmlbe vagyok otthon csak. A netről szedtem ezta scriptet évekel ezelőtt, nem is volt vele semmi gnd.
hova rakjam - wwroot?(légszi részletezd, köszi ;))
3

[szerk]

Poetro · 2011. Ápr. 11. (H), 14.50
beszíneztem a kódot, mondjuk így se lett szebb.
7

ja

klinnsy · 2011. Ápr. 11. (H), 17.33
köszi, a lényeg hogy jó legyen
4

$HTTP_GET_VARS, $HTTP_POST_VARS

Poetro · 2011. Ápr. 11. (H), 15.02
Ezeket kéretik már régen nem használni, valamint az extract-ot ezekre meg főleg nem. Csak gondold el, mi lenne, ha én mondjuk ezek után azt adnám meg a GET vagy POST tömbben, hogy
que=/etc/passwd&ans=/etc/passwd&RESULT_FILE_NAME=etc/passwd
És akkor te ügyesen ezekbe a fájlokba írnál illetve onnan olvasnál. Nagyon nem lenne jó neked.
Valamint próbáld meg elválasztani a HTML-t az működéstől, mondjuk rakd ki függvényekbe. Mert ez így nagyon átláthatatlan.
9

hhm

klinnsy · 2011. Ápr. 11. (H), 17.36
elnézést, de nekem ez kínai sajnos
10

A lényeg

Poetro · 2011. Ápr. 11. (H), 19.07
Az a lényeg, hogy amennyiben nem teszed rendbe a kódodat, akkor veszélyes adatok kerülhetnek be a szerveredre, esetleg tönkre is tehetik az operációs rendszert, ami a gépen van, vagy más súlyos problémákat okozhatnak.
5

Kéne egy cikk arról, hogyan

Hidvégi Gábor · 2011. Ápr. 11. (H), 15.16
Kéne egy cikk arról, hogyan kell hibát keresni, tele van ilyen kérdésekkel a fórum.
11

Minek

janoszen · 2011. Ápr. 11. (H), 21.52
Minek, a web 1x1-et is leírtam, mégse olvassa el a kutya sem.
13

MEGOLDÁS mindenkinek, de azért kösz

klinnsy · 2011. Ápr. 12. (K), 09.20
if ($answer < count($ANSWER) && $vote) {


csere ERRE:


// if ($answer < count($ANSWER) && $vote) {
if ($answer < count($ANSWER) && ($vote || $vote_x)) {