Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Parametry funkcji
agentmullder
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 1.03.2010

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


Witam. Dzis postanowilem zoptymalizowac moj kod. Z racji, ze sporo kodu sie powtarza, to postanowilem zastosowac funkcje. Na etapie testowania funkcji napotkalem na pewien problem, otoz:

wywolanie funkcji:

  1. edytuj('pilka_kolor',$jakies_id);


postac funkcji edytuj:

  1. function edytuj($a,$b)
  2. {
  3. $zapytanie=mysql_query("SELECT '".$a."' FROM pilki WHERE pilka_id='".$b."'");
  4. $zapytanie_wykonaj = mysql_fetch_array($zapytanie);
  5. $d=$zapytanie_wykonaj['"'.$a.'"'];
  6.  
  7. echo $d;
  8.  
  9. }


W taki sposob funkcja nie chce mi wypisac zawartosci zmiennej $d. Podejrzewam, ze problem znajduje sie w sposobie uzycia zmiennej $a=pilka_kolor w tej funkcji, poniewaz wstawiajac w miejsce zmiennej $a w tej funkcji na pilka_kolor wszystko dziala idealnie.

Tutaj kod, ktory dziala tak jak nalezy:

  1. function edytuj($a,$b)
  2. {
  3. $zapytanie=mysql_query("SELECT pilka_kolor FROM pilki WHERE pilka_id='".$b."'");
  4. $zapytanie_wykonaj = mysql_fetch_array($zapytanie);
  5. $d=$zapytanie_wykonaj['pilka_kolor'];
  6.  
  7. echo $d;
  8.  
  9. }


Macie jakies pomysly w jaki sposob uzyc zmiennej $a w tej funkcji dla jej poprawnego dzialania?

Ten post edytował agentmullder 19.05.2010, 13:46:37
Go to the top of the page
+Quote Post
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie... Problemem są u Ciebie apostrofy. Sprawdź zamiast
  1. $zapytanie=mysql_query("SELECT '".$a."' FROM pilki WHERE pilka_id='".$b."'");

choćby
  1. $zapytanie=mysql_query('SELECT '.$a.' FROM pilki WHERE pilka_id='.$b );

Ale zaznaczam... zarówno $a jak i $b w takim wypadku musisz filtrować, bo na chwilę obecną narażasz się na błędy i możliwy atak typu SQL Injection jeśli ktoś dojdzie gdzie można pchnąć ewentualnie zmanipulowane dane.

PS.: Oczywiście przyjąłem, że pilka_id to liczba i stąd darowałem sobie apostrofy. Jak wspomniałem.... FILTRUJ a życie stanie się prostsze (IMG:style_emoticons/default/winksmiley.jpg) Błąd polega w Twoim myśleniu na tym, że nazwa kolumny nie może być ujęta w pojedyncze apostrofy. Może być albo bez, albo w pojedynczych odwróconych czyli `takich`.
Go to the top of the page
+Quote Post
agentmullder
post
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 1.03.2010

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


O super, dzieki Thek. Co do filtrowania to mam to zrobione, nie wklejalem tego, zeby byl bardziej widoczny sens problemu.

A jesli bym potrzebowal uzyc tej zmiennej $d poza funkcja, to musialbym ustawic ta zmienna jako globalna?
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A po co jako global? Walnij ją wtedy dodatkowo jako return $id (IMG:style_emoticons/default/smile.gif) Po co globale stosować? Tylko problemy powodują.
Go to the top of the page
+Quote Post
agentmullder
post
Post #5





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 1.03.2010

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


Cytat(thek @ 19.05.2010, 16:02:30 ) *
A po co jako global? Walnij ją wtedy dodatkowo jako return $id (IMG:style_emoticons/default/smile.gif) Po co globale stosować? Tylko problemy powodują.


Jesli zrobie
  1. return $d;
to jak do niej sie dobrac? Bo jesli zrobie pod spodem wywolania funkcji
  1. echo $d;
to mi nie wyswietla.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




może
  1. echo edytuj($a,$b);

?

polecam manual: http://www.php.net/manual/pl/functions.user-defined.php
Go to the top of the page
+Quote Post
agentmullder
post
Post #7





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 1.03.2010

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


Cytat(piotrooo89 @ 19.05.2010, 16:26:35 ) *


Dziekuje. Tak widzialem ten manual kilka razy i sie nie dopatrzylem tego ;/
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(agentmullder @ 19.05.2010, 16:41:06 ) *
widzialem ten manual kilka razy


Ty nie masz go widzieć kilka razy tylko cały czas. tak w gwoli wyjaśnienia (IMG:style_emoticons/default/smile.gif)
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: 23.08.2025 - 11:18