ďťż

[PHP] Tablice (ze zmiennych $$) Jak to zrobić? PISZCIE!!!

       

Podstrony


telcocafe

<?php function db_read($co,$t,$v,$a,$id) { //KOD WYCIĘTY ${$a} = mysql_fetch_row($result); echo $$a; } ?>
Zmienne wywołuję funkcją ECHO() w funkcji.

Jeśli wywołam $$a, $dinfo (bo taką ma nazwę) - wyświetli się "Array".

Jeśli wywołam $$a[0], $dinfo[0] - nic się nie wyświetla. <- I w tym problem.
To powinno też działać, gdy w $a jest np. wartość "dgr[0]".

Stosowanie $$ ułatwiłoby mi pewne operacje, dlatego pytam, w jaki sposób poprawnie tutaj (funkcja mysql_fetch_row()) można zapisać to jako tablicę.

$a zawiera "dinfo".
db_read - funkcja odczytująca dane z SQLa...

Jaki ma być wynik?
Musi być globalna tablica, podana w zmiennej $a, by wszystko z niej dało się odczytać.
Jeśli $a ma wartość "test", to $test[0] musi mieć poprawną wartość.

Jak to zrobić?
Gdyby dało się tak: $GLOBALS["test[0]"], nie byłoby takiego problemu.

Czy istnieje funkcja, która zamienia STRING na zmienną (oprócz tego $$)?
Użytkownik Ferrari edytował ten post 22 marzec 2005, 22:21


Ja mam klasę ($this):
$this->make = mysql_query($query);  IF (mysql_errno())   {   die("".mysql_error()."");   }    while ($row = mysql_fetch_object($this->make))      {      $this->result[] = $row;      $this->num_rows++;      }     mysql_free_result($this->make);  return $this->result;
To zwraca tablicę obiektową (lub asocjacyjną - mysql_fetch_assoc) zawierającą efekt działania SELECTA.

Cała klasa (z cache) wygląda tak:
<?PHP class db { var $user; var $pass; var $db; var $host; var $make; var $result; var $conn; var $aff; function db($hostx, $userx, $passx, $dbx) { $this ->host = $hostx; $this ->user = $userx; $this ->pass = $passx; $this ->db = $dbx; } // Ł&plusmn;czenie z baz&plusmn; function connect() { IF ($this->conn != true)  {  $this->conn = true;  $this->connect = mysql_connect($this->host, $this->user, $this->pass, $this->db);  IF (!$this->connect) { die ('Nie nawiązano połączenia z bazą danych. Albo baza nawala albo podane dane są złe!'); }  $this->connect = mysql_select_db($this->db);  IF (!$this->connect) { die ('Nie można połączyć się z bazą danych'); }  } } // Przetwarzanie zapytań function query($query) { db::clear(); $cdir = 'cache'; $qr = crc32($query); // HASH $query dla nazwy pliku cache // nazwa tabeli użyta w zapytaniu IF(ereg('FROM [a-zA-z_0-9]*', $query, $tab))  {  $table = str_replace('FROM ', '', $tab[0]);  } elseIF(ereg('UPDATE [a-zA-z_0-9]*', $query, $tab))  {  $table = str_replace('UPDATE ', '', $tab[0]);  } ####################################### #        QUERY:   SELECT       # ####################################### IF (is_readable("$cdir/$qr.$table.php") == 1 and filesize("$cdir/$qr.$table.php")!= 0) // JEST plik cache  {  $plik = fopen("$cdir/$qr.$table.php", "r");  $this->result = fread($plik, filesize("$cdir/$qr.$table.php"));  fclose($plik);  $this->result = str_replace("<?php exit(); ?>\n", '', $this->result);  $this->result = unserialize($this->result);  $this->num_rows = count($this->result);  return $this->result;  } elseIF(ereg('SELECT', $query))  {  // Brak pliku cache, query, return i zapisać  db::connect();  $this->make = mysql_query($query);  IF (mysql_errno())   {   die("".mysql_error()."");   }    while ($row = mysql_fetch_object($this->make))      {      $this->result[] = $row;      $this->num_rows++;      }   // zrób plik   $out = serialize($this->result);   $wskaz = @fopen("$cdir/$qr.$table.php", "w");   @fputs($wskaz, "<?php exit(); ?>\n");   @fputs($wskaz, $out);   @fclose($wskaz);  mysql_free_result($this->make);  return $this->result;  } else  {  #######################################  #        NON-SELECT Queries       #  #######################################  $patch = "$cdir/"; // katalog cache  $katalog = @dir($patch) or  die ("Wrong cache patch");  while ($plik_kat = $katalog->read())  // Wywalanie odpowiednich plików cache  IF(ereg("$table.php", $plik_kat) or filesize("cache/$plik_kat") <= 20)   {   $kknd = unlink ("$cdir/$plik_kat");   IF (!$kknd)    {    die('CACHE ERROR: CAN\'T DELETE CACHE FILE<BR />Nie można usun&plusmn;ć pliku cache. SprawdÄ˝ uprawnienia na katalogu Cache<BR />W systemie windows funkcja unlink może nie działać<BR />On Windows unlink function may not work');    }   }  $katalog->close();  // Wykonaj zapytanie  db::connect();  $this->make = mysql_query($query);  IF (mysql_errno())   {   die("".mysql_error()."");   }  //$this->aff = mysql_affected_rows();  $this->insert_id = mysql_insert_id();  return $this->make;  } } function insert() { return $this->insert_id; } function clear() { unset($this->make); unset($this->result); unset($this->result); } } ?>
(brakuje paru varów na początku lecz nie wpływa to na działanie kodu)
Użytkownik Riklaunim edytował ten post 23 marzec 2005, 10:33
Rozszerzę problem...

function Funkcja($a) { [zmienna]=mysql_fetch_row(...); //Co wpisać w [zmienna]? }

Funkcja zwraca poprawnie już zapełnioną tablicę. Jeśli nazwą zmiennej będzie $GLOBALS[$a], a $a w argumencie będzie stringiem "$test[0]" (czyli tablica), to nic z tego... Samo "$test" spokojnie zadziała.
Jak to można najlepiej zrobić, by funkcja zwracała globalną tablicę podaną w $a?
Użytkownik Ferrari edytował ten post 23 marzec 2005, 15:54
Spróbuj mysql_fetch_array(); - powinno zwrócić i asocjacyjną i normalną.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.