Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] wywolywanie funkcji za pomoca przycisku
misty
post 2.04.2007, 22:31:45
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


hejka!
mam 2 drobne pytania, zaczne od pierwszego:

1.w jaki sposob (prosty..) mozna wywolac funkcje php na 'klikniecie' na przycisk?
przedstawie ponizej troche prostego kodu:
  1. <?php
  2. echo "<form method='POST'>";
  3. echo "<input type='submit' name='dodaj_wiecej' value='dodaj_wiecej' >";
  4. echo "</form>";
  5. ?>


teraz bym chciala aby gdy uzytkownik kilknie przycisk 'dodaj' , wywolala sie odpowiednia fkcja napisana przeze mnie w php.

probowalam to rozwiazac w taki sposob:
  1. <?php
  2. $dodaj_wiecej=$_POST['dodaj_wiecej'];
  3. if ($dodaj_wiecej) // lub $dodaj_wiecej==true
  4. {
  5.  moja_funkcja();
  6. }
  7.  
  8. function moja_funkcja(){
  9.  cos robi
  10. }
  11. ?>


w zaden sposob mi to jednak nie dziala..
czy ktos z Was moze wie jak z tym sobie poradzic?

druga sprawa, pewnie dosc trywialna ale wkurzajaca..

strona ta przy wyswietleniu pokazuje prosty formularz do wprowadzania danych, wyglada to mniej wiecej tak:
  1. <?php
  2. function formularz()
  3. {
  4. i tutaj definiuje sobie odpowiednie pola itd
  5. }
  6. ?>


wracajac do pierwszej sytuacji gdy uzytkownik klika na przycisk 'dodaj_wiecej' (tam gdzie ma sie ta moja nieszczesna funkcja uruchamiac) chcialabym by nie pokazywal sie ten pierwotny formularz.. bo gdy uzytkownik kliknie na dodaj_wiecej ma sie pokazac (napisany w moja_funkcja) inny formularz... a pierwotnego ma nie byc..
czyli mniej wiecej cos takiego:
  1. <?php
  2. function formularz()
  3. {
  4. i tutaj definiuje sobie odpowiednie pola itd
  5. }
  6.  formularz(); //teraz uzytkownik wypelnia pierwszy formularz
  7.  
  8. echo "<form method='POST'>";
  9. echo "<input type='submit' name='dodaj_wiecej' value='dodaj_wiecej' >";
  10. echo "</form>";
  11. $dodaj_wiecej=$_POST['dodaj_wiecej'];
  12. if ($dodaj_wiecej) // lub $dodaj_wiecej==true
  13. {
  14.  moja_funkcja();
  15. }
  16.  
  17. function moja_funkcja(){
  18.  cos robi  // czyli po kliknieciu na dodaj_wiecej uzytkownik widzi formularz zdefiniowany w 
  19. moja_funkcja(), zas pierwotny, zdefiniowany w fkcji formularz() jest dla niego nie widoczny..
  20. }
  21. ?>


tzn to ma sie dziac na jednej stronie 'test.php', nie chce tworzyc zadnych linkow dodatkowych. mam nadz ze w miare jasno opisalam o co mi chodzi..
z gory dzieki za sugestie:)

pzdr!

Ten post edytował misty 2.04.2007, 22:32:11
Go to the top of the page
+Quote Post
bełdzio
post 2.04.2007, 22:38:24
Post #2





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


ad1. jak masz nazwe funkcji w zmiennej to skorzystaj z call_user_func do jej wykonania - wczesniej spr czy istnieje


--------------------
Go to the top of the page
+Quote Post
conip
post 2.04.2007, 22:44:14
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 31.03.2007
Skąd: Gdańsk

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


co do 1szego to chyba jest ok ale nie brakuje tam w formularze zdefiniowania action? np?

  1. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="formularz4" autocomplete="off">


co do drugiego to
jesli to ma byc w tym samym pliku (oba formularze) to moze sprawdzanie warunków na zmienne sesyjne? zaleznie czy spelniony i czy zalogowany to ten forumlarz jak nie to drugi

pozdrawiam
Go to the top of the page
+Quote Post
tiraeth
post 2.04.2007, 23:06:11
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


AD1. Tutaj powinnaś użyć albo Javascript i AJAX, albo wysłać formularz (parametr ACTION w <FORM>) i dopiero tam wykonać ten kod podany w bloku #1 smile.gif Niestety, PHP działa po stronie serwera i nie można tak sobie go łączyć z JavaScriptem lub interakcją użytkownika.

AD2. Najlepiej wykorzystać do tego celu JavaScript.
1) Ładuje się strona - JS wyświetla formularz pierwszy (gdzieś trzymany np. w zmiennej lub pobierany przez AJAX z jakiegoś pliku)
2) Użytkownik wypełnia formularz i wysyła...
3) ...lub naciska DODAJ WIĘCEJ, a wtedy JavaScript zmienia zawartość np. DIVa z formularzem na inny formularz (patrz pkt.1) i wyświetla go użytkownikowi.
4) Użytkownik może wypełnić formularz.
Go to the top of the page
+Quote Post
misty
post 10.04.2007, 09:55:42
Post #5





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


no wlasnie chcialam ominac js i ajaxa.. bo o ajaxie nie wiem NIC, a js.. coz, znam conajmniej slabo. i w przypadku takiej wiedzy bedzie sporo problemow, czesc zmiennych jest przekazywana jako $POST, kilka wyciagana z bazy.. nie dosc ze nie wiem jak to w js obrobic, dwa chyba dosc zamotany bedzie to kod.. no ale faktycznie jak nic nie wymysle to chyba w ostatecznosci (po uprzednim doedukowaniu) sie na to rozwiazanie zdecyduje..

mam jeszcze takie jedno pytanie. zastanawiam sie jak zrobic wyswietlanie razem z dodawaniem wartosci.
tzn chodzi mi o to:
uzytkownik ma formularz, wypelnia go, klika 'dodaj'. dane jednak nie sa jeszcze wysylane do bazy tylko pokazuja sie na dole w formie tabelki (tzn w tabelce na stronie, pod formularzem). i w tym momencie uzytkownik moze dodac wiecej wartosci, gdy znow klika dodaj to te dane maja mu sie wyswietlic tez w tabelce ponizej tych poprzednich..
a niestety jest tak, ze dane sie nadpisuja, czyli jak np uzytkownik wpisze do $zmienna='ania' kliknie 'dodaj' to w tabeli pojawi sie 'ania', jak wpisze 'stefan', to w tabelce zamiast pozycji 'ania', 'stefan', bedzie tylko 'ania'. zastanawialam sie czy moze te wartosci do jakiejs tablicy wrzucac.. macie moze jakis pomysly jak pominac to nadpisywanie i by tabela uaktualniala mi (i zarazem zwiekszala liczbe swoich wartosci) sie po kazdym 'dodaj' ?

pzdr!

podam moze kawalek kodu by mniej wiecej zobrazowac o co mi chodzi:

  1. //fragment formularza, uzytkownik moze dodac imiona (imiona pobierane sa z bazy) 
  2.  
  3.  <form name="imiona" action="test.php" method="POST"> 
  4.  imie : <select name="imie"> 
  5. <? 
  6.  while ($row=pg_fetch_array($wynik_zapytania)) 
  7.  { 
  8.  $imie_id=$row['id']; 
  9.  $imie=$row['imie']; 
  10.  ?> 
  11.  <option value='<?=imie_id?>'><?=imie?></option> 
  12.  <? 
  13.  }?> 
  14.  </select> 
  15.  <input type="submit" name="dodaj" value="dodaj"></form><br> 
  16.  
  17.  // czyli do tego miejsca mam fragment formularza, ktory wyswietla nam imiona 
  18.  // i uzytkownik moze je sobie wybrac i za pomoca 'dodaj' dodac 
  19.  
  20.  <?php 
  21.  $imie_id=$_POST['imie_id']; 
  22.  $zapytanie="select imie from tabelka where id='$imie_id';"; 
  23.  $wynik=pg_query($polaczenie, $zapytanie); 
  24.  
  25.  echo "<table border><tr><td>imie </td><tr>"; 
  26.  while ($row=pg_fetch_row($wynik)) 
  27.  { 
  28.  foreach ($row as $data) 
  29.  $imie=$data; 
  30.  echo "<tr><td>$imie</td></tr></table>"; 
  31.  }


no i wlasnie nie wiem jak zrobic by dane mi sie nie nadpisywaly, by uzytkownik mogl dodawac do tabelki ktora mu sie wyswietla wiele imion (i dopiero jak doda wszystkie ktore chcial, dane beda wprowadzane do bazy). mam nadz ze w miare jasno opisalam o co mi chodzi..

a gdyby zastosowac zmienna sesysjna? $_SESSION['cos']? czy moglabym w niej przechowywac wieksza ilosc danych nie tracac poprzednich? i po czym (po jakims identyfikatorze?) moglabym rozrozniac dane przechowywane w tej zmiennej?
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 Wersja Lo-Fi Aktualny czas: 2.07.2025 - 22:30