Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Widzialność zmiennych przekazywanych przez funkcję.
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Mam taką funkcję:

  1. <?php
  2. function NazwaFunkcji($do){
  3.  
  4.    $query = mysql_query("
  5.    SELECT tp.id, tp.name, upper(r.jednostka) AS skadDuze, r.jednostka AS skadMale
  6.    FROM tp, raporty r, tp_opis o
  7.    WHERE r.j_id = " . $do . "
  8.    AND r.raport_id = tp.id
  9.    AND o.opis_id = tp.id
  10.    AND UNIX_TIMESTAMP( o.start ) <= UNIX_TIMESTAMP( DATE( NOW( ) ) )
  11.    AND UNIX_TIMESTAMP( o.stop ) >= UNIX_TIMESTAMP( DATE( NOW( ) ) )
  12.    ORDER BY tp.name, tp.id
  13.    ");
  14.  
  15.    while($row = mysql_fetch_array($query)){
  16.  
  17.        $id = array($row["id"]);
  18.        $name = array($row["name"]);
  19.  
  20.        $ArrayRaportyF_doJednostki = array_combine($id, $name);
  21.    }
  22. }
  23. ?>


która zwraca mi array $ArrayRaportyF_doJednostki. Teraz w innym pliku dołączam NazwaFunkcji($do) i daję pętlę, która powinna operować na wynikach tej funkcji:

  1. <?php
  2. foreach ($ArrayRaportyF_doJednostki as $id => $name){
  3. echo "Klucz: $id; Wartość: $name<br>\n";
  4. }
  5. ?>


i dostaję komunikat o błędzie: Warning: Invalid argument supplied for foreach() in ...

pętla nie widzi tabeli zwracanej przez funkcję. A jeżeli pętlę umieszczę wewnątrz funkcji, to działa.

Ten post edytował miedzna 19.02.2009, 13:10:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post
Post #2





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




Cytat
która zwraca mi array $ArrayRaportyF_doJednostki
Ta funkcja ci nic nie zwraca.

zajrzyj do manuala do dzialu funkcje i doczytaj sobie co trzeba dodac, by funkcja cos zwracala
Go to the top of the page
+Quote Post
miedzna
post
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Ale jak dodam na końcu funkcji: return $ArrayRaportyF_doJednostki; to też ten sam błąd.
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




bo przeciez musisz odebrac to co funkcja zwraca, a tego w kodzie nigdzie nie ma
Go to the top of the page
+Quote Post
miedzna
post
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


I tego właśnie nie wiem, przeczytałem to: http://pl.wikibooks.org/wiki/PHP/Funkcje i nic tam nie znalazłem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
artur_dziocha
post
Post #6





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

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


  1. <?php
  2. $id = array();
  3. $name = $array();
  4. while($row = mysql_fetch_array($query)){
  5. $id[] = $row['id'];
  6. $name[] = $row['name'];  
  7. }
  8. ArrayRaportyF_doJednostki = array_combine($id, $name);
  9. return ArrayRaportyF_doJednostki;
  10. ?>


Ten post edytował artur_dziocha 19.02.2009, 13:15:37
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




po pierwsze: manual: http://pl.php.net/manual/pl/functions.returning-values.php

po drugie:
  1. <?php
  2. function test(){
  3. return 4;  //tu funkcja zwraca
  4. }
  5.  
  6. $zm = test(); //tu odbierasz to co funkcja zwraca
  7. echo $zm; //tu to wykorzystujesz
  8. ?>

Tyle czasu na forum i jeszcze z czyms takim biegac?
Go to the top of the page
+Quote Post
miedzna
post
Post #8





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Zrobiłem tak:

funkcja:

  1. <?php
  2. function RaportyF_doJednostki($do){
  3.  
  4.    $id = array();
  5.    $name = array();
  6.  
  7.    $query = mysql_query("...");
  8.  
  9.    while($row = mysql_fetch_array($query)){
  10.  
  11.        $id[] = $row['id'];
  12.        $name[] = $row['name'];
  13.  
  14.        $ArrayRaportyF_doJednostki = array_combine($id, $name);
  15.  
  16.    }
  17.    return $ArrayRaportyF_doJednostki;
  18. }
  19. ?>


następnie dołączam:

  1. <?php
  2. $test = RaportyF_doJednostki($_GET["Page"]);
  3.  
  4. foreach ($test as $id => $name){
  5.    echo "Klucz: $id; Wartość: $name<br>\n";
  6. }
  7. ?>


i powstaje pętla w nieskonczoność, aż mi apache siada.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #9





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


O matko, ale rzeźba... Jeśli juz koniecznie musisz to combine to zrób tak:

  1. <?php
  2. function RaportyF_doJednostki($do){
  3.  
  4.   $id = array();
  5.   $name = array();
  6.  
  7.   $query = mysql_query("...");
  8.  
  9.   while($row = mysql_fetch_array($query)){
  10.  
  11.       $id[] = $row['id'];
  12.       $name[] = $row['name'];
  13.  
  14.   }
  15.   $ArrayRaportyF_doJednostki = array_combine($id, $name);
  16.   return $ArrayRaportyF_doJednostki;
  17. }
  18. ?>


Bo po Twojemu to kombinujesz to rekurencyjnie a wystarczy raz na początku

A prościej było by tak:
  1. <?php
  2. function RaportyF_doJednostki($do){
  3.   $query = mysql_query("...");
  4.  
  5.   while($row = mysql_fetch_array($query)){
  6.       $ArrayRaportyF_doJednostki[$row['id']] =  $row['name'];
  7.   }
  8.   return $ArrayRaportyF_doJednostki;
  9. }
  10. ?>


I bez względu na to którą realizację wybierzesz to sprawdź sobie co Ci zwraca

  1. <?php
  2. $test = RaportyF_doJednostki($_GET["Page"]);
  3. echo count($test);
  4. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




  1. <?php
  2. $test = RaportyF_doJednostki($_GET["Page"]);
  3.  
  4. print_r($test);
  5. ?>
Go to the top of the page
+Quote Post
miedzna
post
Post #11





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


W pętli dałem te same nazwy $id i $name co w funkcji i powstaało zapętlenie, że ho... wystarczyło że zmieniłem na inne i jest już ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dziękuję.

A jeszcze jedno pytanko. Funkcja teraz przekazuje 2 zmienne, $id i $name, a jeżeli chcę dołączyć jeszcze jedną zmienną?
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




  1. <?php
  2. $ArrayRaportyF_doJednostki[$row['id']] =  array('name' => $row['name'], 'inna' => $row['inna']);
  3. ?>
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 - 22:04