Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Unset() nie działa poprawnie
zabic
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Pr0100
post
Post #2





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. $this->tmp_msg = array();
Go to the top of the page
+Quote Post
zabic
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


Nie pomogło. Dalej dostaje komunikaty

Temat dalej jest aktualny (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Zyx
post
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


A nie zauważyłeś, że dwie linijki wyżej wywołujesz metody, które coś do tej tablicy wpisują?
Go to the top of the page
+Quote Post
zabic
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował zabic 4.05.2010, 12:36:01
Go to the top of the page
+Quote Post
pyro
post
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zabic
post
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


Usunąlem isset() i dalej mam pelną tablice ;p

Ten post edytował zabic 4.05.2010, 13:44:39
Go to the top of the page
+Quote Post
pyro
post
Post #8





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
zabic
post
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


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ę ?
Go to the top of the page
+Quote Post
pyro
post
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


A jak wywołujesz dane funkcje z tej klasy?
Go to the top of the page
+Quote Post
mortus
post
Post #11





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mortus 4.05.2010, 14:04:20
Go to the top of the page
+Quote Post
zabic
post
Post #12





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
mortus
post
Post #13





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post
zabic
post
Post #14





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


heh... działa...

Jak to isset nie jest funckją skoro pobiera argumenty i zwraca wartośc ? (IMG:style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
mortus
post
Post #15





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Jest specjalną konstrukcją języka PHP. Działa jak funkcja, ale funkcją nie jest. Poczytaj w Manual-u w ramce Notes.
Go to the top of the page
+Quote Post
zabic
post
Post #16





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.05.2010

Ostrzeżenie: (0%)
-----


Bardzo dziękuję za pomoc
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 13:45