Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Giną "po drodze" dane z formularza
Forum PHP.pl > Forum > Przedszkole
JMDvP
Witam

W pierwszym pliku mam formularz (w skrócie):

  1. <form method="post" action="dopisz.php">
  2. <BUTTON name="odp" type="submit" value="b">
  3. ...</BUTTON>


Natomiast w docelowym pobieram dane (m.in.):
  1. ++$tbl[$_POST['odp']];


Wszystko działało, póki nie wstawiłem pomiędzy skrypt weryfikujący IP, czyli na początku drugiego pliku dodałem:
  1. require('voter.php');
  2.  
  3. $voter = new Voter();
  4.  
  5. if($voter->isPossibleToVote()){
  6. $voter->saveVoteDate();
  7. //kod zapisu głosu
  8. } else {
  9. //komunikat o odrzuceniu głosu
  10. }


Oddzielny plik voter.php wygląda tak:
  1. <?php
  2.  
  3. /**
  4.  * Class Voter
  5.  */
  6. class Voter
  7. {
  8. const FILENAME = 'voting_ips.txt';
  9.  
  10. public function isPossibleToVote()
  11. {
  12. $ip = $this->getIp();
  13. if ($ip === null) {
  14. return false; //nie można zidentyfikować IP
  15. }
  16.  
  17. $ips = $this->read();
  18.  
  19. if (!isset($ips[$ip])) {
  20. return true; //nie głosował jeszcze
  21. } elseif (strtotime($ips[$ip]) < strtotime("-30 minutes")) {
  22. return true; //głosował, ale czas minął
  23. } else {
  24. return false;
  25. }
  26. }
  27.  
  28. public function saveVoteDate()
  29. {
  30. $ip = $this->getIp();
  31.  
  32. $ips = $this->read();
  33.  
  34. $ips[$ip] = date('Y-m-d H:i:s');
  35.  
  36. $this->write($ips);
  37. }
  38.  
  39. /**
  40.   * @return array
  41.   */
  42. private function read()
  43. {
  44. if (file_exists(self::FILENAME)) {
  45. $serializedData = file_get_contents(self::FILENAME);
  46.  
  47. if ($serializedData) {
  48. return unserialize($serializedData);
  49. } else {
  50. return array();
  51. }
  52. } else {
  53. return array();
  54. }
  55. }
  56.  
  57. /**
  58.   * @param array $ips
  59.   */
  60. private function write(array $ips)
  61. {
  62. file_put_contents(self::FILENAME, serialize($ips), LOCK_EX);
  63. }
  64.  
  65. /**
  66.   * @return string|null
  67.   */
  68. private function getIp()
  69. {
  70. $ip_keys = array(
  71. 'HTTP_CLIENT_IP',
  72. 'HTTP_X_FORWARDED_FOR',
  73. 'HTTP_X_FORWARDED',
  74. 'HTTP_X_CLUSTER_CLIENT_IP',
  75. 'HTTP_FORWARDED_FOR',
  76. 'HTTP_FORWARDED',
  77. 'REMOTE_ADDR'
  78. );
  79. foreach ($ip_keys as $key) {
  80. if (array_key_exists($key, $_SERVER) === true) {
  81. foreach (explode(',', $_SERVER[$key]) as $ip) {
  82. // trim for safety measures
  83. $ip = trim($ip);
  84. // attempt to validate IP
  85. if ($this->validateIp($ip)) {
  86. return $ip;
  87. }
  88. }
  89. }
  90. }
  91.  
  92. return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
  93. }
  94.  
  95. /**
  96.   * @param string $ip
  97.   * @return bool
  98.   */
  99. private function validateIp($ip)
  100. {
  101. if (filter_var($ip, FILTER_VALIDATE_IP,
  102. FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false
  103. ) {
  104. return false;
  105. }
  106.  
  107. return true;
  108. }
  109. }
  110.  



Wstawiałem na początku voter.php przekazywanie wartości w ten sposób:
  1. <form method="post" action="dopisz.php">
  2. <input type="hidden" name="odp" value="POST">
  3. </form>

ale to chyba nie jest tak jak trzeba bo nie działa. Może w innym miejscu powinien być ten wpis.
Jak przekazać dane z formularza dalej, aby nie zostały zgubione po drodze przez voter.php?
Tomplus
sprawdź var_dump($_POST);

umieść w kilku pozycjach, bo wygląda tak jakbyś sobie gdzie usuwał wartość, a klasa tutaj nic nie psuje.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.