Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z modyfikacja zmiennej wewnatrz klasy
Forum PHP.pl > Forum > PHP
sokzzuka
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. ?>
nospor
  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
LBO
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)
sokzzuka
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...
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.