Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Tablica z błędami
Forum PHP.pl > Forum > Przedszkole
user767
Proszę o pomoc, bo nie działa zapisywanie do tablicy błędów w klasie.
Nie mam kodu, ale poproszę o pomoc na przykładzie (może błąd tkwi w definicji ?)

  1. class Klasa{
  2. var $errors = array();
  3. public function CheckOne($zmienna1,$zmienna2){
  4. if() {
  5. print "blabla";
  6. }
  7. else {$this->errors[] = "Źle !!!<br />"; }
  8. }
  9. public function CheckTwo($zmienna1,$zmienna2){
  10. if() {
  11. print "blabla";
  12. }
  13. else {$this->errors[] = "Też niedobrze !!!<br />"; }
  14. }
  15.  
  16. public function Errors($errors){
  17.  
  18. if (count($errors)) {
  19.  
  20. print "są bledy:"; // tu bym wypisał jakie
  21. }
  22. }
  23.  
  24.  
  25. };
  26.  
  27. $validate = new Klasa;
  28. $validate->CheckOne('123',$tablica['element']);
  29. $validate->CheckTwo('123',$tablica['element']);
  30. $validate->Errors($errors);


Tej tablicy nie ma, a jak chcę ją zresetować pisze odwołanie do nieistniejącej tablicy, obiektu.
mortus
Zauważ, że Twoja funkcja Errors() przyjmuje parametr $errors, a tymczasem błędy zostały już w odpowiedniej zmiennej w klasie zapisane. Funkcja Errors() powinna zatem korzystać z istniejącej już w tej klasie tablicy błędów, czyli:
  1. public function Errors() {
  2. if(count($this->errors) > 0) {
  3. echo 'Są błędy';
  4. }
  5. }
  6. // ...
  7. $validate->Errors();
user767
Zastanawiam się nad odebraniem danych z formularza post w konstruktorze, jak to wykonać ? Normalnie odbierałem dane tak jak kod pokazuje - poza klasą.

  1. $tablica = ($_POST);
  2.  
  3.  
  4. class abc(
  5.  
  6. function __construct(){
  7. // tutaj chciałbym odebrać dane z tablicy i używać ich wewnątrz klasy
  8. }
  9.  
  10. public function nazwa1(){
  11. //
  12. }
  13.  
  14. };
muk4
$_POST jest tablicą superglobalną więc możesz jej użyć wewnątrz metody.
user767
Jak odwołać się do takiej tablicy w kodzie ?

  1. $this->tablica['subject']


nie działa
Daiquiri
$_POST['subject']; albo przekazać tablicę jako parametr.
  1. class abc
  2. {
  3. private $arrPost = array();
  4.  
  5. public function __construct($arr)
  6. {
  7. $this->arrPost = $arr;
  8. }
  9.  
  10. public function returnPost()
  11. {
  12. return $this->arrPost['subject'];
  13. }
  14. }


user767
Do arrPost chciałbym wczytać już przy deklaracji przesłane przez POST dane, z ($_POST); bez określania elementów tablicy.
Daiquiri
Nie bardzo rozumiem. Przecież możesz wrzucić całą tablicę, tak jak jest to w konstruktorze z mojego przykładu (nie musisz korzystać ze zmiennej $arr, możesz przesłać dowolną tablicę, w tym $_POST). Jeżeli nie chcesz przekazywać tego jako parametr to korzystasz z $_POST po prostu. Opcjonalnie możesz pojedyncze elementy wrzucać do klasy, korzystając z czegoś na kształt __get i __set.
user767
  1. private $arrPost = array($_POST);
  2. private $arrPost = ($_POST);


niestety nie działa, błąd w tej samej linii
Daiquiri
No przecież masz napisane wyżej $this->$arrPost = to co chcesz przypisać... Jeżeli masz to w konstruktorze to $zmienna = new abc($_POST). Wtedy:
  1. class abc
  2. {
  3. private $arrPost = array();
  4.  
  5. public function __construct($arr)
  6. {
  7. $this->arrPost = $arr;
  8. }
  9. }
user767
  1. private $dataPost = array();
  2.  
  3. public function __construct(){
  4. $this->dataPost = ($_POST);
  5. }


w ten sposób

Za to odwołanie nie bardzo działa
  1. $validate->AddValidator('subject',$this->dataPost['subject']);


$this nie jest obiektem
Daiquiri
Pokaż klasę, której obiektem jest validate, wraz z metodą AddValidator. $this->zmienna będzie, w tym przypadku, działać tylko wewnątrz klasy.
user767
jest:
  1.  
  2. $validate->AddValidator('subject',$validate->dataPost['subject']);


więcej nie napiszę, sami pogłówkujcie
Daiquiri
No to ciężko Ci będzie pomóc, skoro nie wiem nawet co robisz. Nie wiem przecież jakie parametry ma przyjmować AddValidator. $this->dataPost będzie funkcjonować wewnątrz klasy, w której masz taką zmienną. Przecież to Ty potrzebujesz pomocy, a nie my.
user767
Ale popatrz z tej strony, to podstawy, ja jestem zmęczony, noc nie spałem.
Znam php strukturalnie dosyć dobrze, żeby przejść na obiektowy język.
Dzięki za pomoc!
Daiquiri
Tylko na podstawie czego mam Ci pomóc? Ogólnikami już rzuciłam, a Ty nawet nie napisałes jakiego typu parametry ma przyjąć metoda AddValidator i czy ten obiekt($validate) znajduje się wewnątrz klasy, w której zdefiniowałeś zmienną prywatną dataPost.
user767
typ do swith i daną


  1. class abc{
  2.  
  3. public $dataPost = array();
  4.  
  5. public function __construct{
  6. $this->dataPost = ($_POST);
  7. //
  8. }
  9.  
  10. public funkcja1($a,$b) { // }
  11.  
  12. };
  13.  
  14.  
  15. $validate = new abc;
  16. $validate=funkcja1('1',$validate->dataPost['subject']);
  17. $validate=funkcja1('2',$validate->dataPost['content']);

//
Daiquiri
  1. $_POST['subject'] = 'subject';
  2. $_POST['content'] = 'content';
  3.  
  4. class abc
  5. {
  6. public $dataPost = array();
  7.  
  8. public function __construct()
  9. {
  10. $this->dataPost = ($_POST);
  11. }
  12.  
  13. public function funkcja1($a,$b)
  14. {
  15. echo $a . ' i ' . $b;
  16. }
  17. }
  18.  
  19. $validate = new abc;
  20. $validate->funkcja1('1',$validate->dataPost['subject']);
  21. $validate->funkcja1('2',$validate->dataPost['content']);
Teraz będzie śmigać. Warto pomyśleć o metodach dostępowych, zamiast bezpośrednich odwołań do zmiennych publicznych.
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.