Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Unset() nie działa poprawnie
Forum PHP.pl > Forum > PHP
zabic
Witam
Na poczatek kod: http://www.phpriot.com/2835

Tablica tmp_msg zawiera wszystkie informacje o napotkanych błędach. Później wyświetlam jej zawartość a następnie ją usuwam i co dziwne, te komunikaty dalej są obecne w tej tablicy. Dostaję je nawet po przeładowaniu strony. Co robię źle ?

pozdrawiam
zabic
Pr0100
  1. $this->tmp_msg = array();
zabic
Nie pomogło. Dalej dostaje komunikaty

Temat dalej jest aktualny biggrin.gif
Zyx
A nie zauważyłeś, że dwie linijki wyżej wywołujesz metody, które coś do tej tablicy wpisują?
zabic
Owszem, zauwazyłem. Ów metody, w razie potrzeby powinny umieszczać ów komunikaty w tej tablicy, później następuje wypisanie jej zawartości a na końcu chcialbym ją wyczyścić tylko nie wiem czemu, ale mi się to nie udaje ;p Jak usunąć jej zawartość ? ;p

Zresztą skopiuj sobie ten kod, zakomentuj konstruktor i zobacz jak działa;p
pyro
Jak dla mnie to to wcale nie będzie działać jak powinno, gdyż:

  1. $name=$this->validName(isset($data['name']));
  2. $surname=$this->validSurname(isset($data['surname']));
  3.  


I dalej te funkcje:

  1. public function validName($data) {
  2. preg_match_all('#^[a-zA-Z]*$#',$data, $data);
  3. return (empty($data[0][0])) ? $this->tmp_msg[]=$this->msg[1] : $data;
  4. }
  5.  
  6. public function validSurname($data) {
  7. preg_match_all('#^[a-zA-Z]*$#',$data, $data);
  8. return (empty($data[0][0])) ? $this->tmp_msg[]=$this->msg[2] : $data;
  9. }
  10.  


Jako argument do tych funkcji dajesz isset($data['surname']) lub name isset($data['name']), czyli wartość true/false, czyli te wyrażenia PCRE na nic się nie zdadzą przeciw temu typowi danych smile.gif
zabic
Usunąlem isset() i dalej mam pelną tablice ;p
pyro
Muszę przyznać, że trochę denerwująca jest Twoja ignorancja. Nie muszę nawet tego sprawdzać, bo widzę dokładnie co się dzieje w skrypcie. Napisałem teraz na szybko coś, a żebyś TY sobie sprawdził i się zdziwił, bo jestem pewien, że mam rację. Nie sprawdzałem, ale syntax errorów raczej nie ma:

  1. <?php
  2.  
  3. class user {
  4.  
  5.  
  6. public function validName($data) {
  7. var_dump($data); echo '<br />';
  8. preg_match_all('#^[a-zA-Z]*$#',$data, $data);
  9. return (empty($data[0][0])) ? $this->tmp_msg[]=$this->msg[1] : $data;
  10. }
  11.  
  12. public function validSurname($data) {
  13. var_dump($data);
  14. preg_match_all('#^[a-zA-Z]*$#',$data, $data);
  15. return (empty($data[0][0])) ? $this->tmp_msg[]=$this->msg[2] : $data;
  16. }
  17.  
  18.  
  19.  
  20. }
  21.  
  22. $data = array('name'=>'Jan','surname'=>'Kowalski');
  23. $instance = new user();
  24. $name=$instance->validName(isset($data['name']));
  25. $surname=$instance->validSurname(isset($data['surname']));
  26.  
  27. ?>
zabic
MIałeś racje dlatego szybko poprawiłem swojego wczesniejszego posta;p hmm... co jest z ta tablicą? Czemu ciągle ona coś zawiera mimo tego, że ją unsetuję ?
pyro
A jak wywołujesz dane funkcje z tej klasy?
mortus
Jak zawiera, skoro nie zawiera. Sprawdź:
  1. <?php
  2. class user {
  3. private $msg = array(1=>'Niepoprawne imię', 2=>'Niepoprawne nazwisko');
  4. public $tmp_msg = array();
  5.  
  6. public function __construct() {
  7. //require_once ('class.database.php');
  8. //$DB = new database();
  9. }
  10.  
  11. public function register($data) {
  12. $name = $this->validName($data['name']);
  13. $surname = $this->validSurname($data['surname']);
  14.  
  15. if (! empty($this->tmp_msg)) {
  16. echo '<pre>';
  17. print_r($this->tmp_msg);
  18. echo '</pre>';
  19.  
  20. unset($this->tmp_msg);
  21.  
  22. echo '<pre>';
  23. print_r($this->tmp_msg);
  24. echo '</pre>';
  25.  
  26. }
  27. }
  28.  
  29. public function validName($data) {
  30. preg_match_all('#^[a-zA-Z]*$#', $data, $data);
  31. return ( empty($data[0][0])) ? $this->tmp_msg[] = $this->msg[1] : $data;
  32. }
  33.  
  34. public function validSurname($data) {
  35. preg_match_all('#^[a-zA-Z]*$#', $data, $data);
  36. return ( empty($data[0][0])) ? $this->tmp_msg[] = $this->msg[2] : $data;
  37. }
  38. }
  39.  
  40. $u = new user();
  41. $data = array('name'=>'name', 'surname'=>'\surname');
  42. $u->register($data);
  43. print_r($u->tmp_msg);
  44. $u->register($data);
  45. ?>

Jeśli ponownie wykonasz funkcję register dla obiektu $u, to pole tmp_msg klasy user znowu będzie zawierać przez krótką chwilę komunikaty.
zabic
heh... wyczyściłem cache przeglądarki i już jest ok. Jeszcze jedno pytanko. W którym miejscu dodać funckję isset() by nie dostawać Notice: Undefined index: status in C:\www\register.php on line 10?

  1. if($_POST['status']==1) {
  2. require_once('class.user.php'); //10 linia
  3. $USER=new user();
  4. $USER->register($_POST);
  5. }
mortus
Dziesiątą linią jest linia wyżej niż ta z komentarzem. W tym if-ie daj isset
  1. if(isset($_POST['status']) && $_POST['status'] == 1) {
Poza tym isset() nie jest funkcją.
zabic
heh... działa...

Jak to isset nie jest funckją skoro pobiera argumenty i zwraca wartośc ? snitch.gif
mortus
Jest specjalną konstrukcją języka PHP. Działa jak funkcja, ale funkcją nie jest. Poczytaj w Manual-u w ramce Notes.
zabic
Bardzo dziękuję za pomoc
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.