Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z klasą podczas includowania
Forum PHP.pl > Forum > Przedszkole
Testosteron
Witam. Wczoraj spotkałem się z doscyć dziwnym problemem. Klasy związane z tworzeniem i zarządzaniem forumularzami umieściłem w pliku form.php i umieściłem w katalogu inc. Stworzyłem też plik register.php i umieściłem w głównym folkderze projektu. Oczywiście dołączyłem plik form.php za pomocą include
  1. include ("inc/form.php");

I tutaj pojawiły się pierwsze schody, ponieważ, ponieważ moim oczom ukazał się następujący błąd
Cytat
Fatal error: Cannot redeclare class Form in /var/www/html/inc/form.php on line 5

Kiedy ten sam plik (niech nazywa się nowy.php) umieszczałem w katalogu inc (zmieniałem jedynie ścieżkę w include, tj. "form.php", zamiast "inc/form.php"), wszystko jest ok. Próbowałem też stworzyć nowy plik w katalogu głównym i dołączyć do niego plik nowy.php. Pojawia się dokładnie ten sam błąd. Z czego to może wynikać?
phpion
Kilkukrotnie dołączasz plik, w którym jest deklaracja klasy Form. Sprawadź, w którym pliku masz "class Form..." i gdzie go dołączasz.
Testosteron
To co jest w komentarzu, próbowałem zamieścić w oddzielnym pliku + dołączyć include
form.php
  1. <?php
  2. include ('register.php');
  3. include('code.php');
  4. class Form{
  5. var $name, $value;
  6. function __construct($method, $action){
  7. if ($method == 'get' || $method== 'post'){
  8.  
  9. echo '<form method="' . $method . '" action="' . $action . '">';
  10. } else {
  11. return 0;
  12. }
  13. }
  14. function __destruct(){
  15. echo "</form>";
  16. }
  17. }
  18.  
  19. class Text extends Form{
  20. function __construct($name){
  21. echo '<input type ="text" name="' . $name . '">';
  22. }
  23. }
  24. class Pass extends Form{
  25. function __construct($name){
  26. echo '<input type ="password" name="' . $name . '">';
  27. }
  28. }
  29. class Submit extends Form{
  30. function __construct($value){
  31. echo '<input type ="submit" value="' . $value . '">';
  32. }
  33. }
  34.  
  35. class validateForm{
  36. function validateEmail($date){
  37. if (preg_match('/^[a-zA-Z0-9\.\-_]+\@[a-zA-Z0-9\.\-_]+\.[a-z]{2,4}$/D', $date)){
  38. return true;
  39. } else {
  40. return false;
  41. }
  42. }
  43. function validateLogin($date){
  44. if (preg_match('/[a-zA-z0-9\_\-\+]{4,12}$/D', $date)){
  45. return true;
  46. } else {
  47. return false;
  48. }
  49. }
  50. function validatePassword($date){
  51. if (preg_match('/[a-zA-z0-9\_\-\+\@\#]{4,35}$/D', $date)){
  52. return true;
  53. } else {
  54. return false;
  55. }
  56. }
  57. function validateCaptcha($date){
  58. if($date==$_SESSION['captcha']){
  59. return true;
  60. } else {
  61. return false;
  62. }
  63. }
  64. }
  65.  
  66. class Query{
  67. function query($date){
  68. $db->query($date);
  69. }
  70. }
  71. /*
  72. if(!$_POST['login'] || !$_POST['pass'] || !$_POST['pass2'] || !$_POST['email']){
  73. $form = new Form("post", 'index.php');
  74. echo '<table><tr><td><b>Login</b></td><td>';
  75. $login = new Text('login');
  76. echo '</td></tr><tr><td><b>Hasło</b></td><td>';
  77. $pass = new Pass('pass');
  78. echo '</td></tr><tr><td><b>Powtórz hasło</b></td><td>';
  79. $pass2 = new Pass('pass2');
  80. echo '</td></tr><tr><td><b>Email</b></td><td>';
  81. $email = new Text('email');
  82. echo '</td></tr>';
  83. echo '<tr><td colspan="2" align="center">Captcha</td></tr>
  84. <tr><td><img src="captcha.php"</td><td>';
  85. $captcha = new Text('captcha');
  86. echo '</td></tr><tr><td colspan="2">';
  87. $send = new Submit('Wyślij');
  88. echo '</td></tr></table>';
  89. } else {
  90. $validate = new validateForm();
  91. if(!$validate->validateLogin($_POST['login'])){
  92. echo 'Nieprawidłowa nazwa użytkownika';
  93. exit;
  94. exit;
  95. } elseif (!$validate->validatePassword($_POST['pass']) || !$validate->validatePassword($_POST['pass'])) {
  96. echo 'Nieprawdiłowe hasło';
  97. exit;
  98. }elseif ($_POST['pass'] != $_POST['pass2']) {
  99. echo 'Podałeś dwa różne hasła';
  100. exit;
  101. }elseif (!$validate->validateEmail($_POST['email'])) {
  102. echo 'Nieprawdiłowy adres email';
  103. exit;
  104. }elseif (!$validate->validateCaptcha($_POST['captcha'])){
  105. echo 'Nieprawidłowy kod';
  106. exit;
  107. } else {
  108. $a = new checkUser;
  109. if ($a->checkNewUser($_POST['login']) ){
  110. echo 'User istnieje';
  111. exit;
  112. } else {
  113. include('db.php');
  114. $login = $db->real_escape_string($_POST['login']);
  115. $pass = $db->real_escape_string($_POST['pass']);
  116. $a = new code;
  117. $pass = $a->codePass($pass);
  118. $insert = $db->query("INSERT INTO register VALUES ('', '" .$login."', '".$pass."')");
  119. if ($insert){
  120. echo 'User został dudany';
  121. exit;
  122. } else {
  123. echo 'Wystąpił nieoczekiwany błąd';
  124. exit;
  125. }
  126. }
  127. }
  128. }
  129. */
  130.  
  131. ?>


register.php
  1. <?php
  2.  
  3. class checkUser{
  4. public function checkNewUser($login){
  5. include('db.php');
  6. $query = $db->query("SELECT login FROM register WHERE login='" . $login . "'");
  7.  
  8. if ($query->num_rows == 0){
  9. return false;
  10. } else {
  11. return true;
  12. }
  13. }
  14.  
  15. }
  16.  
  17. ?>


To są dwa najważniejsze pliki. W pozostałych plikach także nie ma drugiej klasy form. Gdzie leży błąd?
Sephirus
Gdzieś musisz mieć include'a tego form.php drugiego - wyszukaj w plikach jak nie możesz znaleźć - zawsze możesz zastąpić include jej bratnim include_once co powinno rozwiązać problem.
Testosteron
Próbowałem wpiosać include_once, ale wtedy formularz pojawiają mi się dwa formularze. Dlaczego plik z tym samym kodem (tylko ze zmienioną ścieżką) działa bez problemu z katalogu inc?
kreatiff
Może po prostu wówczas jeden z plików zawierających klasę Form nie jest includowany i wyświetla się ostrzeżenie gdzieś tam w kodzie, ale te masz wyłączone i go nie widzisz? Drugi zawierający tę klasę wczytuje się normalnie i i nie ma błedu o próbie stworzenia klasy o już istniejącej nazwie?

Cytat
Kiedy ten sam plik (niech nazywa się nowy.php) umieszczałem w katalogu inc (zmieniałem jedynie ścieżkę w include, tj. "form.php", zamiast "inc/form.php"), wszystko jest ok. Próbowałem też stworzyć nowy plik w katalogu głównym i dołączyć do niego plik nowy.php. Pojawia się dokładnie ten sam błąd. Z czego to może wynikać?
Testosteron
Zmieniłem nazwę klasy, ale błąd został. Mam zaledwie kilka plików i kilka includów. Sprawdziłem wszystko dokładnie. Ten plik includuję tylko raz.
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.