Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wywolywanie funkcji za pomoca przycisku
Forum PHP.pl > Forum > Przedszkole
misty
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!
bełdzio
ad1. jak masz nazwe funkcji w zmiennej to skorzystaj z call_user_func do jej wykonania - wczesniej spr czy istnieje
conip
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
tiraeth
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.
misty
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?
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.