Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt DotPay - problem
Forum PHP.pl > Forum > PHP
djiras1
Witam.

Chciałem zrobić na swojej stronie dostęp do danych po wyslaniu smsa. Zalozylem konto w dotpay, wybralem odpowiednia usluge, zaimportowalem wygenerowane kody do tabelki w bazie i pobralem skrypt od dotpay. Tu mam problem.

W pliku index.html mam:

  1. wprowadz kod:
  2. <form action="skrypt.php" method="POST">
  3. <input type="text" name="check">
  4. <input type="submit" value="Sprawdź"></form>


I plik skrypt.php

  1. <?
  2. function Polacz() {
  3. $baza = array(
  4. 'db_host' => 'localhost',
  5. 'db_user' => '',
  6. 'db_pass' => '',
  7. 'db_name' => '',
  8. );
  9. if($pol) {
  10. return $pol;
  11. } else {
  12. $pol = mysql_connect("$baza[db_host]","$baza[db_user]","$baza[db_pass]");
  13. if (!$pol || !mysql_select_db("$baza[db_name]",$pol)) {
  14. die ('Problem z baza danych'); return 0;
  15. } else { return $pol; }
  16. }
  17. }
  18.  
  19.  
  20. function ciasteczko($czas_zycia)
  21. {
  22. if (!isset($_COOKIE['ActiveCode']))
  23. {
  24. setcookie('ActiveCode',1, time()+$czas_zycia);
  25. }
  26. else
  27. {
  28. setcookie('ActiveCode',0, time()+2, "/");
  29. setcookie('ActiveCode',1, time()+$czas_zycia, "/");
  30. }
  31. }
  32.  
  33.  
  34. $page = "jakas_strona.php"; //adres strony, ktora ma byc otwarta
  35. //po poprawnej weryfikacji kodu
  36.  
  37. Polacz();
  38.  
  39. ############################# SKRYPT DO SPRAWDZANIA KODU #############################
  40.  
  41. $now = time();
  42. $czas_zycia = 86400; // czas dostepu po wprowadzeniu kodu w sekundach
  43.  
  44.  
  45. $res = "SELECT * FROM `codes` WHERE `code`='".$_POST['check']."' AND `status`='active' LIMIT 1";
  46. $odp = mysql_query("$res");
  47. $r = mysql_fetch_array($odp);
  48. $new_time = $now+$czas_zycia;
  49. if (mysql_num_rows($odp) == 0)
  50. {
  51. // instrukcja, że kod nieprawidłowy, np. przekierowanie z powrotem do strony płatności z komunikatem "ZŁY KOD"
  52. exit("Kod jest nieprawidłowy");
  53. }
  54.  
  55. else {
  56. if($r['expired'] == 0)
  57. {
  58. // jesli kod jeszcze nie byl uzywany sprawdza to sobie i zmienia mu czas, ze bedzie aktywny jeszcze przez godzine
  59. mysql_query("UPDATE `codes` SET `expired`='".$new_time."' WHERE `code`='".$_POST['check']."'");
  60. // i w tym miejscu przekierowanie do platnej czesci serwisu
  61. ciasteczko($czas_zycia);
  62. header("Location: ".$page);
  63. }
  64. elseif ($r['expired'] >= $now)
  65. {
  66. // tutaj sprawdza czy kod przekroczyl juz swoj czas aktywnosci i jesli nie to znowu przekierowanie do platnej czesci serwisu
  67. ciasteczko($czas_zycia);
  68. header("Location: ".$page);
  69. }
  70. else
  71. {
  72. // tutaj juz kod stracil swoja aktywnosc i update bazy na kod nieaktywny
  73. mysql_query("UPDATE `codes` SET `status`='inactive' WHERE `code`='".$_POST['check']."'");
  74. // i komuunikat ze koniec czasu
  75. echo "Koniec czasu<BR><BR>";
  76. }
  77. }
  78.  
  79. ?>


po wklepaniu kodu wywala jednak blad:

  1. Warning: Cannot modify header information - headers already sent by (output started at /home/vadimus/public_html/wchodzi.net/skrypt.php:1) in /home/../skrypt.php on line 24


  1. Warning: Cannot modify header information - headers already sent by (output started at /home/../skrypt.php:1) in /home/vadimus/public_html/wchodzi.net/skrypt.php on line 68


Linijka 24:
  1. setcookie('ActiveCode',1, time()+$czas_zycia);


Linijka 68:
  1. header("Location: ".$page);




Dodawalem ob_start(); na poczatku, ale dalej nic. Szukalem po googlu, tutaj nawet byl podobny temat, ale nie potrafie sobie poradzic mimo to. Nie wiem o co chodzi...
by_ikar
Kod
Warning: Cannot modify header information - headers already sent by (output started at /home/vadimus/public_html/wchodzi.net/skrypt.php:1) in /home/../skrypt.php on line 24


Ten błąd oznacza że chcesz modyfikować nagłówki, za pomocą funkcji setcookie, a jeżeli chce się modyfikować nagłówki, to przed wysłaniem nagłówków nie możesz wysłać żadnego html'a. Czyli, jeżeli chcesz zmodyfikować nagłówek, najpierw wykonaj kod php, bez wyświetlania znaków html, a dopiero potem wyświetl html. Bezpośrednio w tym pliku nie widzę abyś miał jakieś znaki do wyświetlenia, ale nie zamykaj pliku php, to jest nie używaj znacznika ?> ponieważ zamykając plik, jeżeli w następnym pliku który będziesz includować po znaku ?> będzie chociażby spacja lub enter, wówczas przy próbie modyfikacji nagłówków z tego kolejnego includowanego pliku wywali ci taki sam błąd, że nie możesz modyfikować nagłówków, ponieważ nagłówki już zostały wysłane.

Oczywiście można temu zaradzić w inny sposób, ale generalnie nie powinno się tak robić. Tutaj masz chyba bardziej dokładny opis jak to zrobić: http://phpedia.pl/wiki/Cannot_add_header_i...rs_already_sent

EDIT: zapomniałbym. Dodatkowo, jeżeli masz jakiś błąd, a nie wiesz co on znaczy (niektóre błędy php pokazuje w języku innym niż angielski..) to kopiujesz nazwę błędu i wrzucasz w google. Troszkę zaradności ;P
morbic
Znając życie - niechcąca spacja lub enter przed <? w skrypt.php, na samym początku oneeyedsmiley02.png

// Edit:

Jednak na bank spacja ..
Cytat
(output started at /home/../skrypt.php:1)
Ruio
  1.  
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.