• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak uzyskać dostęp do zmiennej z innej klasy w PHP ?

VPS Starter Arubacloud
0 głosów
131 wizyt
pytanie zadane 8 lutego 2021 w PHP przez mat19 Obywatel (1,580 p.)

Mam mały problem, a konkretnie chcę ww klasie insert wstawić dane do bazy, ale pod warunkiem że zmienna $errors z klasy UserValidation nie będzie zawierała błędów. I tutaj moje pytanie jak sprawić żeby zmienna $errors z klasy UserValidation była dostępna dla klasy Insert. Obecnie za każdym razem dane są wstawiane do bazy nawet jak zmienna $errors zawiera błędy.

 

class Insert
{

 private $data;
 private $database;
 private $validation;

    public function __construct($data, $database, $validation)
    {
        $this->data = $data;
        $this->database = $database;
        $this->validation = $validation;
    }

    public function hash_password()
    {
        $field = $this->data['password'];
        return $hash = password_hash($field, PASSWORD_DEFAULT);
    }

    public function insert_user()
    {
        $login = $this->data['login'];
        $password = $this->data['password'];
        $hash = $this->hash_password();
        
        
        if(empty($this->errors))
        {
            $sql = $this->database->connect()->prepare("INSERT INTO users(`login`, `password`) VALUES(:login, :password)");
            $sql->bindParam(':login', $login, PDO::PARAM_STR);
            $sql->bindParam(':password',$hash, PDO::PARAM_STR);
            $sql->execute();
            
        }
        
    }

    }   
}


class UserValidation
{
    private $data;
    private $errors = '';
    private $database;
    
    public function __construct($data, $database)
    {
        $this->data = $data;
        $this->database = $database;
    }
    
    
    public function validateLogin()
    {
        $val = $this->data['login'];
        
        if(empty($val))
        {
            return $this->errors = "Field can not empty";
        }
        else if(!preg_match('/^[a-zA-Z-0-9]{4,12}$/', $val))
        {
        return $this->errors = "Login have to get from 4 to 12 chars.";
        }else
        {
            $sql = $this->database->connect()->prepare("SELECT * FROM users where login = :login");
            $sql->bindParam(':login', $val, PDO::PARAM_STR);
            $sql->execute();        

             if($sql->rowCount())
             {
                 return $this->errors = "Login is exist;
             }
        }
            
    }
    
    public function validatePassword()
    {
        $val = trim($this->data['password']);
        
        if(empty($val))
        {
            return $this->errors = 'Field can not empty';
        }
        else if(!empty($val) && !preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $val))
        {
            return $this->errors =' Password have to get almost 6 chars and begin from letter';
        }
    }

1 odpowiedź

+3 głosów
odpowiedź 8 lutego 2021 przez Comandeer Guru (599,730 p.)

Bo nie odwołujesz się do $errors z tej klasy. Jak już to $this->validation->errors, ale to rzuci błędem, bo $errors są prywatne. Możesz je zrobić publiczne albo (IMO lepiej) dorobić w UserValidation metodę getErrors, która będzie zwracać zawartość pola $errors.

Podobne pytania

0 głosów
1 odpowiedź 816 wizyt
pytanie zadane 16 października 2017 w Java przez zygmunt Początkujący (310 p.)
+1 głos
2 odpowiedzi 289 wizyt
pytanie zadane 8 lutego 2021 w PHP przez mat19 Obywatel (1,580 p.)
0 głosów
1 odpowiedź 1,482 wizyt
pytanie zadane 9 listopada 2017 w C# przez garris Użytkownik (660 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...