Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z modyfikacja zmiennej wewnatrz klasy
sokzzuka
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 9.12.2005

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


alo, wiec mam taki problem, wszystko w tej klasie dzialaloby supcio, gdyby nie to ze funkcja mysql_escape_data mimo iz dziala dobrze to nie modyfikuje mi zmiennej $dane,

klasa ma tak dzialac, ze przy inicjalizacji z jakims zestawem danych, automatycznie laczy sie z baza a nastepnie pobiera dane wejsciowe, a funkcja mysql_escape_data wywala rozne podstepne znaczki i uaktualnia ustawiona juz wczesniej tablice z danymi wejsciowymi,

czy ktos moze mi powiedziec w czym tkwi problem?

ustawialem tez w tej lini nr 22 tak: $this->dane=$this->escape_data($dane) , ale wtedy ustawialo pusta tablice...,


  1. <?
  2.  
  3. class sql{
  4.  
  5. private $db=array(db_user => 'xxx', 
  6. db_password => 'xxx', 
  7. db_host => 'localhost', 
  8.  db_name => 'xxx');
  9.  
  10. protected $dbc;
  11. private $dane=array();
  12.  
  13.  
  14. function __construct($dane=array()){
  15.  
  16. $this->connect($db);
  17. $this->dane=$dane;
  18.  
  19. $dane=$this->dane;
  20.  
  21. if(isset($dane)){
  22. $this->escape_data($dane);
  23. }
  24.  
  25.  
  26.  
  27. }
  28.  
  29. function connect($db){
  30.  
  31.  $db = $this->db; 
  32.  
  33.  $this->dbc = mysql_connect ($db['db_host'] ,$db['db_user'] ,$db['db_password']);
  34.  mysql_select_db($db['db_name']) or die('Nie mogĹ‚em połączyć sie z bazÄ… danych');
  35.  
  36. }
  37.  
  38. function escape_data($dane=array()) {
  39. $dane=$this->dane;
  40. if(ini_get('magic_quotes_gpc')) {
  41. foreach($dane as $key => $value){
  42. if($key=='submit'){echo"cos";
  43. unset($dane[$key]);
  44. }
  45. $value = strip_tags(stripslashes($value));
  46. }
  47. }
  48. return mysql_real_escape_string(trim($dane), $this->dbc);
  49. }
  50.  
  51. function wyswietl(){
  52.  
  53. foreach($this->dane as $key => $value){
  54. echo $key.','.$value;
  55.  
  56. }
  57.  
  58. }
  59.  
  60. function __destruct(){
  61. mysql_close($this->dbc); 
  62. }
  63.  
  64.  
  65.  
  66. }
  67. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. $this->dane=$dane;
  3. $dane=$this->dane;
  4. ?>
blink.gif co chiales przez to osiągnąc?

  1. <?php
  2. if(isset($dane)){
  3. ?>
Zmienna $dane zawsze jest ustawiona, a jak nie jest to jest ustawiana domyslnie na pustą tablicę. Ten warunek zawsze bedzie spelniony.

funkcja escape_data operuje na tablicy, a ty potem robisz trim na tej tablicy, escapujesz ją i wogole. krotko rzecz mowiąc wykonujesz funkcje, które powinny dzialac na stringach, a ty ich uzywach do tablicy. Jestes pewien ze to chciales osiągnąć?

  1. <?php
  2. $value = strip_tags(stripslashes($value));
  3. ?>
To ci bedzie modyfikowalo lokalną zmienna utworzoną na potrzebę petli, a nie jak podejrzewam ze ty chciales ze bedzie ci to modyfikowalo element tablicy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LBO
post
Post #3





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


dodam jeszcze
  1. <?php
  2. $this->connect($db);
  3. ?>

zamien na:
  1. <?php
  2. $this->connect($this->db);
  3. ?>
i usun
  1. <?php
  2. $db = $this->db;
  3. ?>

albo usun parametr w metodzie sql::connect()

edit: musisz sie zdecydowac, albo przekazujesz $dane w parametrze,albo olewasz to i uzywasz sql::dane (co powinienes robic o ile nie tworzysz np metod statycznych)

Ten post edytował LBO 11.04.2006, 07:02:21
Go to the top of the page
+Quote Post
sokzzuka
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 9.12.2005

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


wiecie no to jest moja pierwsza klasa nie typu 'hello world' to winksmiley.jpg, ale teraz widze moj blad, musze wszystko w escapie do petli wciagnac i bedzie alright, thnx za pomoc winksmiley.jpg,
a tak ogolnie to wzorowalem sie troche na manualu i tutorialu o obiektach z php.pl, w manualu byla podobna klasa do bazy danych w opisie metod magicznych...
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 06:47