Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Undefined variable: Problem ze zmiennymi
Forum PHP.pl > Forum > Przedszkole
Casley
Mam następujący problem, otóż w moim skrypcie pojawia się następujący komunikat: Undefined variable: komunikaty in index.php on line 105. Prosiłbym o wytłumaczenie co robię źle.

  1. <?PHP
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. ?>
  5. <?PHP
  6. //Łaczenie z serwerem danych
  7. mysql_connect('localhost', 'ja', 'ja') or die(mysql_error());
  8. //Wybieranie bazy danych
  9. ?>
  10. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  11. <?PHP
  12.  
  13. echo '<form method="post" action="?akcja=ok">
  14.  
  15. <table><tr>
  16. <td>Nick: </td><td><input type="text" name="nick" /></td></tr>
  17. <tr><td>Hasło: </td><td><input type="password" name="haslo" /></td></tr>
  18. <tr><td>Powtórz hasło: </td><td><input type="password" name="vhaslo" /></td></tr>
  19. <tr><td>Adres email: </td><td><input type="text" name="email" /></td></tr>
  20. <tr><td>Powtórz email: </td><td><input type="text" name="vemail" /></td></tr>
  21. <td>Kod dostępu: </td><td><input type="text" name="kod" /></td></tr>
  22.  
  23. <tr><td></td><td><input type="submit" value="Zarejestruj"></td></tr></table>
  24. </form> ';
  25.  
  26. $akcja = $_GET['akcja'];
  27. if ($akcja == 'ok') {
  28. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,255);
  29. $haslo = substr(addslashes($_POST['haslo']),0,255);
  30. $vhaslo = substr($_POST['vhaslo'],0,255);
  31. $email = substr($_POST['email'],0,255);
  32. $vemail = substr($_POST['vemail'],0,255);
  33. $kod = substr(addslashes($_POST['kod']),0,16);
  34. $nick = trim($nick);
  35. $kod = trim($kod);
  36. $hash = md5($haslo);
  37. //
  38. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,255);
  39. $haslo = substr(addslashes($_POST['haslo']),0,255);
  40. $vhaslo = substr($_POST['vhaslo'],0,255);
  41. $email = substr($_POST['email'],0,255);
  42. $vemail = substr($_POST['vemail'],0,255);
  43. $kod = substr(addslashes($_POST['kod']),0,16);
  44. $nick = trim($nick);
  45. $kod = trim($kod);
  46. $hash = md5($haslo);
  47. //Sprawdzanie poprawności nicku i Hasła
  48. $spr1 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM authme WHERE username='$nick' LIMIT 1")); //Czy użytkownik o takim nickie istnieje
  49. $spr2 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM authme WHERE email='$email' LIMIT 1")); //Czy użytkownik o takim Emailu istnieje
  50. $spr5 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM cshop_CODES WHERE code='$kod' LIMIT 1")); //Czy taki Kod istnieje w bazie danych
  51. $komunikaty = '';
  52. $spr3 = strlen($nick);
  53. $spr4 = strlen($haslo);
  54. //Sprawdzanie poprawności wprowadzonych informacji
  55. if (!$nick || !$email || !$haslo || !$vhaslo || !$vemail ) {
  56. $komunikaty .= "<font size='2'>Musisz wypelnic wszystkie powyższe pola</font><br>"; }
  57. if ($spr3 < 3) {
  58. $komunikaty .= "<font size='2'Nick musi mieć przynajmniej 3 znaki</font><br>"; }
  59. if ($spr4 < 4) {
  60. $komunikaty .= "<font size='2'>Hasło musi mieć przynajmniej 4 znaki</font><br>"; }
  61. if ($spr1[0] >= 1) {
  62. $komunikaty .= "<font size='2'>Ten nick jest już używany!</font><br>"; }
  63. if ($spr2[0] >= 1) {
  64. $komunikaty .= "<font size='2'>Ten e-mail jest już używany!</font><br>"; }
  65. if ($email != $vemail) {
  66. $komunikaty .= "<font size='2'>Emaile się nie zgadzają</font><br>";}
  67. if ($haslo != $vhaslo) {
  68. $komunikaty .= "<font size='2'>Hasła się nie zgadzają</font><br>"; }
  69. $regEx = '/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/'; {
  70. if(!preg_match($regEx, $email))
  71. $komunikaty .= "<font size='2'>Niepoprawidłowy adres e-mail</font><br>"; }
  72. if ($spr5[0] <= 0) {
  73. $komunikaty .= "<font size='2'>Nieprawidłowy kod dostępu</font><br>"; }
  74. if(!preg_match('/^[a-zA-Z0-9]+$/', $nick)) {
  75. $komunikaty .= "<font size='2'>Niepoprawny nick</font><br>"; }
  76.  
  77. //Sprawdzenie poprawności formularza oraz informacja o błędach
  78. if ($komunikaty) {
  79. <font size="3"><br><b>Popraw poniższe błędy formularza:</b><br>
  80. '.$komunikaty.'<br>';
  81. } else {
  82. //jesli wszystko jest ok dodaje użytkownika i wyswietla informacje
  83. $nick = str_replace ( ' ','', $nick );
  84.  
  85. mysql_query("INSERT INTO `authme` (username, password, email)
  86. VALUES('$nick','$hash','$email')") or die("Nie mogłeś zostać zarejestrowany!");
  87. mysql_query("INSERT INTO `cshop_HISTORY` (nick, code)
  88. VALUES('$nick','$kod')") or die("Nie mogłeś zostać zarejestrowany!");
  89. mysql_query("DELETE FROM cshop_CODES WHERE code='$kod'") or die("Nie mogłeś zostać zarejestrowany");
  90.  
  91. echo '<br><font size="3">Zostałeś zarejestrowany jako '.$nick.'</font>';
  92. }
  93. }
  94.  
  95. ?>
  96. <?PHP
  97.  
  98. function checkPlayer($player) {
  99. $mcURL = 'http://www.minecraft.net/haspaid.jsp?user=';
  100. $auth = file_get_contents($mcURL . $player);
  101. if (trim($auth) == "true") {
  102. $komunikaty .= "<font size='2'>Premium jest</font><br>";
  103. }
  104. }
  105.  
  106. checkPlayer($_POST['nick']);
  107.  
  108. ?>
vonski
Zmienna komunikaty jest po prostu niedostępna wewnątrz funkcji checkPlayer().
Tutaj znajdziesz więcej o zasięgu zmiennych: http://www.php.net/manual/pl/language.variables.scope.php

Jeśli chcesz operować wewnątrz funkcji na zmiennej zewnętrznej, masz trzy wyjścia:

1) przekazujesz ją do funkcji, wykonujesz operacje i zwracasz ją za pomocą return
2) przekazujesz ją do funkcji przez referencję i operujesz bezpośrednio na niej (nie musisz wtedy jej zwracać)
3) (niezalecany sposócool.gif wewnątrz funkcji robisz: global $komunikaty; - to sprawi, że zewnętrzna zmienna będzie dostępna wewnątrz funkcji
Kshyhoo
Dostosuj do Jak poprawnie zatytułować wątek, inaczej zamknę.
Casley
Cytat(vonski @ 19.03.2014, 20:34:27 ) *
Zmienna komunikaty jest po prostu niedostępna wewnątrz funkcji checkPlayer().
Tutaj znajdziesz więcej o zasięgu zmiennych: http://www.php.net/manual/pl/language.variables.scope.php

Jeśli chcesz operować wewnątrz funkcji na zmiennej zewnętrznej, masz trzy wyjścia:

1) przekazujesz ją do funkcji, wykonujesz operacje i zwracasz ją za pomocą return
2) przekazujesz ją do funkcji przez referencję i operujesz bezpośrednio na niej (nie musisz wtedy jej zwracać)
3) (niezalecany sposócool.gif wewnątrz funkcji robisz: global $komunikaty; - to sprawi, że zewnętrzna zmienna będzie dostępna wewnątrz funkcji


Otóż nie rozumiem co tu mam zrobić. Gdy zastosowałem się do punktu 3 i dodałem przed zmienną $komunikaty 'global' otrzymałem błąd: Parse error: syntax error, unexpected T_CONCAT_EQUAL, expecting ',' or ';' in index.php on line 105
vonski
Otóż jasnowidzem nie jestem jednakowoż komunikat błędu wskazuje, że sprawa jest dość błaha.
Pokaż kod.
Casley
Cytat(vonski @ 20.03.2014, 18:51:29 ) *
Otóż jasnowidzem nie jestem jednakowoż komunikat błędu wskazuje, że sprawa jest dość błaha.
Pokaż kod.

  1. echo '<form method="post" action="?akcja=ok">
  2.  
  3. <table><tr>
  4. <td>Nick: </td><td><input type="text" name="nick" /></td></tr>
  5. <tr><td>Hasło: </td><td><input type="password" name="haslo" /></td></tr>
  6. <tr><td>Powtórz hasło: </td><td><input type="password" name="vhaslo" /></td></tr>
  7. <tr><td>Adres email: </td><td><input type="text" name="email" /></td></tr>
  8. <tr><td>Powtórz email: </td><td><input type="text" name="vemail" /></td></tr>
  9. <td>Kod dostępu: </td><td><input type="text" name="kod" /></td></tr>
  10.  
  11. <tr><td></td><td><input type="submit" value="Zarejestruj"></td></tr></table>
  12. </form> ';
  13.  
  14. $akcja = $_GET['akcja'];
  15. if ($akcja == 'ok') {
  16. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,255);
  17. $haslo = substr(addslashes($_POST['haslo']),0,255);
  18. $vhaslo = substr($_POST['vhaslo'],0,255);
  19. $email = substr($_POST['email'],0,255);
  20. $vemail = substr($_POST['vemail'],0,255);
  21. $kod = substr(addslashes($_POST['kod']),0,16);
  22. $nick = trim($nick);
  23. $kod = trim($kod);
  24. $hash = md5($haslo);
  25. //
  26. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,255);
  27. $haslo = substr(addslashes($_POST['haslo']),0,255);
  28. $vhaslo = substr($_POST['vhaslo'],0,255);
  29. $email = substr($_POST['email'],0,255);
  30. $vemail = substr($_POST['vemail'],0,255);
  31. $kod = substr(addslashes($_POST['kod']),0,16);
  32. $nick = trim($nick);
  33. $kod = trim($kod);
  34. $hash = md5($haslo);
  35. //Sprawdzanie poprawności nicku i Hasła
  36. $spr1 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM authme WHERE username='$nick' LIMIT 1")); //Czy użytkownik o takim nickie istnieje
  37. $spr2 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM authme WHERE email='$email' LIMIT 1")); //Czy użytkownik o takim Emailu istnieje
  38. $spr5 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM cshop_CODES WHERE code='$kod' LIMIT 1")); //Czy taki Kod istnieje w bazie danych
  39. $komunikaty = '';
  40. $spr3 = strlen($nick);
  41. $spr4 = strlen($haslo);
  42. //Sprawdzanie poprawności wprowadzonych informacji
  43. if (!$nick || !$email || !$haslo || !$vhaslo || !$vemail ) {
  44. $komunikaty .= "<font size='2'>Musisz wypelnic wszystkie powyższe pola</font><br>"; }
  45. if ($spr3 < 3) {
  46. $komunikaty .= "<font size='2'Nick musi mieć przynajmniej 3 znaki</font><br>"; }
  47. if ($spr4 < 4) {
  48. $komunikaty .= "<font size='2'>Hasło musi mieć przynajmniej 4 znaki</font><br>"; }
  49. if ($spr1[0] >= 1) {
  50. $komunikaty .= "<font size='2'>Ten nick jest już używany!</font><br>"; }
  51. if ($spr2[0] >= 1) {
  52. $komunikaty .= "<font size='2'>Ten e-mail jest już używany!</font><br>"; }
  53. if ($email != $vemail) {
  54. $komunikaty .= "<font size='2'>Emaile się nie zgadzają</font><br>";}
  55. if ($haslo != $vhaslo) {
  56. $komunikaty .= "<font size='2'>Hasła się nie zgadzają</font><br>"; }
  57. $regEx = '/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/'; {
  58. if(!preg_match($regEx, $email))
  59. $komunikaty .= "<font size='2'>Niepoprawidłowy adres e-mail</font><br>"; }
  60. if ($spr5[0] <= 0) {
  61. $komunikaty .= "<font size='2'>Nieprawidłowy kod dostępu</font><br>"; }
  62. if(!preg_match('/^[a-zA-Z0-9]+$/', $nick)) {
  63. $komunikaty .= "<font size='2'>Niepoprawny nick</font><br>"; }
  64.  
  65. //Sprawdzenie poprawności formularza oraz informacja o błędach
  66. if ($komunikaty) {
  67. <font size="3"><br><b>Popraw poniższe błędy formularza:</b><br>
  68. '.$komunikaty.'<br>';
  69. } else {
  70. //jesli wszystko jest ok dodaje użytkownika i wyswietla informacje
  71. $nick = str_replace ( ' ','', $nick );
  72.  
  73. mysql_query("INSERT INTO `authme` (username, password, email)
  74. VALUES('$nick','$hash','$email')") or die("Nie mogłeś zostać zarejestrowany!");
  75. mysql_query("INSERT INTO `cshop_HISTORY` (nick, code)
  76. VALUES('$nick','$kod')") or die("Nie mogłeś zostać zarejestrowany!");
  77. mysql_query("DELETE FROM cshop_CODES WHERE code='$kod'") or die("Nie mogłeś zostać zarejestrowany");
  78.  
  79. echo '<br><font size="3">Zostałeś zarejestrowany jako '.$nick.'</font>';
  80. }
  81. }
  82. function checkPlayer($player) {
  83. $mcURL = 'http://www.minecraft.net/haspaid.jsp?user=';
  84. $auth = file_get_contents($mcURL . $player);
  85. if (trim($auth) == "true") {
  86. global $komunikaty .= "<font size='2'>Premium jest</font><br>";
  87. }
  88. }
  89.  
  90. checkPlayer($_POST['nick']);
  91.  
  92. ?>

Proszę, oto kod.
Turson
$akcja = $_GET['akcja'];
tu ci nie pluje błędem? Bo powinieneś najpierw zmienić czy zmienna istnieje
nospor
W linku, ktory dostales w pierwszym poscie, masz dosc jasno napisne, jak nalezy stosowac GLOBAL. Twoje zastosowanie ma sie nijak do tego jak tam napisali smile.gif
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.