Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Obsługa wielu przycisków w formularzu
Forum PHP.pl > Forum > Przedszkole
zaiac
Witajcie,

Mam oto taki problemik. Wyciągam z bazy powiedzmy.... koncerty wraz z ich datami, które spełniają jakieś tam kryteria - ich ilość jest oczywiście zmienna i wyświetlam tabelkę, w każdym wierszu tworząc przyciski Zapisz lub Wypisz (jeśli zalogowany użytkownik jest już na ten koncert zapisany). I teraz mam problem w jaki sposób obsłużyć przyciski tak, aby ich kliknięcie powodowało odpowiednie akcje w bazie (zapisanie lub wypisanie użytkownika). Podkreślam, że ilość przycisków jest zmienna, więc odpada zwykłe if-owanie i podpięcie różnych warunków dla każdego buttona. Podejrzewam że chodzi o stworzenie jakiegoś JS, ale jestem w tym temacie zielony. Bardzo proszę o sugestie w jaki sposób wykaraskać się z tego.

Z góry dzięki za podpowiedzi!
no_face
Kazdy przycisk to osobny formularz, np.
  1. <form method="POST" action="plik_ktory_przetworzy_dane.php">
  2. <input type="hidden" name="id_koncertu" value="np_22">
  3. <input type="submit" value="Submit">
  4. </form>

generujac strone z lista koncertow, wypisujesz za kazdym powtorzeniem sie koncertu jego id w id_koncertu. Po wyslaniu odbierasz w pliku, ktory bedzie to przetwazal id i mozesz robic z tym co chcesz.
Kicok
  1. <?php
  2. if( $zapisany ) {
  3. echo( '<button onClick="window.location = 'plik.php?action=wypisz&id_koncertu=' . $id_koncertu . '';">Wypisz</button>' );
  4. }
  5. else {
  6. echo( '<button onClick="window.location = 'plik.php?action=zapisz&id_koncertu=' . $id_koncertu . '';">Zapisz</button>' );
  7. }
  8. ?>


Pisane z palca, ale coś w tym guście powinieneś zrobić.
zaiac
Cytat(no_face @ 11.05.2007, 15:17:52 ) *
Kazdy przycisk to osobny formularz, np.
  1. <form method="POST" action="plik_ktory_przetworzy_dane.php">
  2. <input type="hidden" name="id_koncertu" value="np_22">
  3. <input type="submit" value="Submit">
  4. </form>

generujac strone z lista koncertow, wypisujesz za kazdym powtorzeniem sie koncertu jego id w id_koncertu. Po wyslaniu odbierasz w pliku, ktory bedzie to przetwazal id i mozesz robic z tym co chcesz.


Tylko że nie chcę przechodzić nigdzie z tej strony - idealnie byłoby, gdyby po naciśnięciu odświeżała się strona z owmi przyciskami i widać było już zmianę w wyświetlonej tabelce.

Cytat(Kicok @ 11.05.2007, 15:19:15 ) *
Pisane z palca, ale coś w tym guście powinieneś zrobić.


A co to miałoby robić? Możesz wytłumaczyć trochę te kodzik?
no_face
Cytat(zaiac @ 11.05.2007, 13:44:01 ) *
A co to miałoby robić? Możesz wytłumaczyć trochę te kodzik?

Po nacisnieciu przycisku, przejdzie do strony plik.php wykona w tym przypadku action=wypisz czyli wypisz koncert o id_koncertu=jakies_id; Czyli mniej wiecej to co chciales zrobic. Ogolnie mowiac jest on bardzo podobny do mojego rozwiazania. Strona sie przeladuje, zostanie cala lista, tylko zmieni sie wypisz/zapisz.

Istnieje tez inna mozliwosc, zastosuj ajaxa, w tym przypadku mozesz wykonac co chcesz nie przeladowujac strony.
zaiac
A jak pozniej odebrac zmienne przekazane w te sposob i jak wygladaloby przekazanie wiecej niz jednej zmiennej?
no_face
W skrypcie odbierasz takie dane po przez tablice POST:
  1. <?php
  2. $_POST['id_koncertu'] itd
  3. ?>

by przekazac wiecej danych po prostu wstawiasz wiecej zmiennych:
  1. <input type="hidden" name="id_koncertu" value="22">
  2. <input type="hidden" name="operacja" value="zapisz">

teraz tylko korzystajac z tych danych, wiemy jaki koncert mamy zmodyfikowac i czy ma to byc opcja zapisz czy wypisz. Z pewnoscia bedziesz potrzebowal id usera, ale to juz pewnie gdzies z sesji zciagniesz, czy tez w inny sposob.
zaiac
Wielkie dzięki za pomoc - wszystko fajnie działa, tylko chciałbym żeby strona "odświeżała sie" po naciśnięciu zapisania lub wypisania. Próbowałem czegoś takiego:

  1. <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  2. <input type="hidden" name="id_gry" value="<?php echo $row[0] ?>">
  3. <input type="submit" name="Wypisz" value="Wypisz">
  4. </form>


ale nie działa tak jakbym chciał. Możesz mi pomóc jeszcze w tej kwestii.


--
Poprawiłem bbcode. Proszę na przyszłość zwrócić na to uwagę.
~siemakuba
uli
Po co te wszystkie kombinacje??ohmy.gif

Wystarczy przecież zrobić taki szkielecik:

na początku index.php
  1. <?php
  2. if ($_POST["przycisk"] == "ZAPISZ") {
  3.  
  4. // tutaj zapis do bazy
  5. }
  6.  
  7. if ($_POST["przycisk"] == "KASUJ") {
  8.  
  9. // tutaj kasowanie
  10. }
  11. ?>


no i w index.php sam formularz:

  1. <form action=index.php method=POST>
  2. // tutaj pola do wypełnienia
  3.  
  4. //i dwa lub więcej przycisków
  5. <input type="submit" name="przycisk" value="ZAPISZ">
  6. <input type="submit" name="przycisk" value="KASUJ">
  7. </form>


Chyba prościej i bez hidden. No i ładniej.
zaiac
Jest ok tylko jak zrobić to odświeżanie - czyli co wpisać w action żeby mi nie przechodził do innej podstrony tylko zostawał na tej samej i odświeżał ją, żeby można było zobaczyć zmiany w zapisach (po kliknięciu zapisz lub wypisz mam tabelke z datami i czy user jest zapisany czy nie) - chciałbym zeby po nacisnieciu zapisz/wypisz odswiezyla sie stronka i byly widoczne zmiany w owej tabelce.
uli
  1. <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">


No to wstaw zamiast kodu PHP w action (skoro Tobie nie działa) nazwę tego pliku i już smile.gif
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.