Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/HTML] Dwa formy na stronie i problem (wysyła oba?)
Forum PHP.pl > Forum > Przedszkole
zaaap
Witam,
Na stronie mam dwa lub wiecej <form> (submit). Załozmy ze jeden jest do edytowania artykułu a drugi do napisania nowego. Kiedy wciskam wysylanie nowego to updetuje mi ostatni napisany artykul.
Krotkie pytanie; czy kazdy form zbiera dane tylko "swoje"? Czy tez wysyla wszystkie formy z calej strony? Jesli tak to czy trzeba nadawac im rozne nazwy (formom)? I jak to odebrac w skrypcie wykonujacym?
erix
Nie wiem, jak to masz w kodzie, ale na stronie mogą być niezależne formularze. winksmiley.jpg

Albo coś pomieszałeś po stronie HTML (nie wiem, jak się zachowuje formularz w formularzu; jak coś, to ta metoda jest niezgodna ze specyfikacją, o ile pamiętam), albo nie rozróżniasz, który formularz jaką akcję wykonuje.

Cytat
I jak to odebrac w skrypcie wykonujacym?

No normalnie tongue.gif Dodaj jakiś parametr w np. $_GET albo pole typu hidden i jedziesz.
zaaap
No niestety wyglada jakby submit wysłał wszystkie formy ze strony.
Gdzies na necie było cos takiego:

  1. <input type="submit" name="button_1" />
  2. </form>
  3.  
  4. <input type="submit" name="button_2" />
  5. </form>


Akcja:
  1. <?php
  2. if ($this->_request->getPost('button_1'))
  3.  // wysłano formularz 1
  4. else if ($this->_request->getPost('button_2'))
  5. // wysłano formularz 2
  6. ?>

Jednak nie moge sobie pozwolic na cos takiego, gdyz to wymaga oddzielnego bloku intrukcji dla kazdego unikalnego submita, a jesli bedzie 100 komentarzy to nie bede wkladal 100 skupiowanych blokow instrukcji do skryptu wykonywalnego.
batman
Zamiast bawić się w pisanie ręczne formularzy, skorzystaj z Zend_Form.
zaaap
Nie jest to pisanie reczne, tylko automatyczne tworzenie dla kazdego komentarza. Nie chce wchodzic w nowy system, tylko sprytnie wykorzystac to co daje php i html.
batman
Przecież nie wchodzisz w nowy system. W końcu używasz Zend Frameworka. Co za problem wykorzystać Zend_Form?
zaaap
Np to, ze ma byc to mobilne, jako, ze pisze to na zaliczenie. A nie bede doktorkowi kazal instalowac zenda
batman
Czyli nie używasz ZF?
To mnie zmyliło
  1. <?php
  2. $this->_request->getPost('button_1')
  3. ?>
Identyczna składnia.
zaaap
Wiem wiem, moglo zmylic. To jest rozwiazanie stosowane w ZF (male niedopatrzenie przy wklejaniu). Natomiast potrzebne mi jest bez uzycia ZF

Hmmm, a zastosowanie czegos takiego:

  1. <form name="myform" action="handle-data.php">
  2. Search: <input type='text' name='query'>
  3. <A href="javascript: submitform()">Search</A>
  4. </form>
  5. <script language="JavaScript">
  6. function submitform()
  7. {
  8. document.myform.submit();
  9. }


Ma sens? Dodam, ze nazwy beda modyfikowane z uzyciem zmiennej z petli php, czyli
Kod
<forma name="myform<?php echo $i; ?>"
i to samo w skrypcie. Bedzie to spelnialo fukcje wysylania tylko okreslonego forma?
erix
A czemu nie możesz użyć zwykłego elementu submit?
zaaap
no tak jak pisalem na poczatku. Na jednej stronie (komentarze) bedzie co najmniej dwa pola formularza do wysłania. Np. opcja dodaj komentarz i opcja edytuj. Robiac zwykle submit mam wrazenie ze wysylane sa oba (tzn na pewno cos jest nie tak, bo dodania komentarza dziala tylko wtedy gdy nie ma zadnych dodanych wczesniej, po dodaniu chocj jednego jest kompletny sajgon), a maja rozne wartosci na "values", wiec jest to problem, bo chcac przekazac dajmy na to zmienna "id" ktora wynosi 5, przekazuje mi "id" równe 0 (z drugiego forma).
erix
A czytałeś uważnie, o czym ja wcześniej pisałem?
Cytat
No normalnie tongue.gif Dodaj jakiś parametr w np. $_GET albo pole typu hidden i jedziesz.
zaaap
Cytat(erix @ 30.11.2008, 10:41:53 ) *
A czytałeś uważnie, o czym ja wcześniej pisałem?


A czytales co ja pisalem? Wiem jak odebrac normalne dane w skrypcie wykonywalnym, nie wiem jak zrobic zeby wysylalo jednego submita z wielu znajdujacych sie na stronie. Bo jestem prawie pewien z doswiadczenia jak i lektury na necie, ze sa zsyłane wszystkie formy naraz i po to nadawane sa atrybuty name.
lukasz_os
Mozesz przeciez kazdy formularz obslugiwac w oddzielnym pliku php i wtedy twoje problemy znikna.

Pozdrawiam.
zaaap
Cytat(lukasz_os @ 30.11.2008, 13:13:36 ) *
Mozesz przeciez kazdy formularz obslugiwac w oddzielnym pliku php i wtedy twoje problemy znikna.

Pozdrawiam.


Nie, nie moge. Gdyz: jeden formularz bedzie do pisania komentarza. A np. 5 formularzy do ich edytowania. Jesli ktos jest w grupie moderatorow to pod kazdym komentem jest rysowany ukryty div z formem zawierajacym tresc komentarza do ktorego sie odwoluje. Moglem to zrobic niejako w oddzielnym pliku, tzn getem przekazać informacje jaki to komentarz itp do pliku edytuj_kom.php (na przyklad), ale zalezalo mi na tym zeby mozna bylo edytowc komenty "w locie" bez nadmiernego skakania po stronach.
erix
Nie wiem, czy dobrze zrozumiałem, bo troszkę zamotałeś.

Cytat
nie wiem jak zrobic zeby wysylalo jednego submita z wielu znajdujacych sie na stronie.

No to jeden submit na formularzu; i mają hulać niezależnie - osobiście czegoś takiego używam w prostym skrypcie i nie ma problemów.

Cytat
ale zalezalo mi na tym zeby mozna bylo edytowc komenty "w locie" bez nadmiernego skakania po stronach

AJAX?
phpion
Cytat(zaaap @ 30.11.2008, 14:57:08 ) *
Bo jestem prawie pewien z doswiadczenia jak i lektury na necie, ze sa zsyłane wszystkie formy naraz i po to nadawane sa atrybuty name.

Widocznie wiesz lepiej niż osoby starające się tobie pomóc.

Mając na stronie klika formularzy wysyłany jest tylko ten, który został wysłany - przecież to jest logiczne. Mając X formularzy, w każdym przycisk submit, wysyłasz tylko ten, na którym naciśniesz ów przycisk.
zaaap
Cytat(erix)
AJAX?


Zebym to ja umiał >.<
zaaap
Cytat(erix @ 30.11.2008, 13:39:04 ) *


dry.gif Tu mnie masz. Dzieki, przyjrze sie jak wroce do domu happy.gif

Nie chcac tworzyc nowego tematu, a ten jest zwiazany z tytułowym to pisze tutaj.

W koncu udało mi sie zrobic wysyłanie tych formów, modyfikując trochę skrypt javy, lecz nie wiedziec czemu przy wysyłaniu forma, który ma edytowac komentarz, do bazy danych zawsze zostają przesłane dane ostatniego komentarza
  1. <?php
  2. $kom = intval($_REQUEST['artykul']);
  3.  
  4.  $lacz1 = lacz_bd();
  5.  $komentuj= "select * from komentarze
  6.          where id_kom = '$kom' order by czas asc";
  7.          
  8.    $wiersz = $lacz1->query($komentuj);
  9. (...)
  10. while ($kom = $wiersz->fetch_assoc())
  11. {
  12. $i++;
  13.  
  14. echo '<tr><td><font class="komenty">'.$i.'. <span class="kom_autor">'.$kom['kto'].'</span> / <span class="kom_data">'.date('d.m.Y, H:i', $kom['czas']).'</span>';
  15. if (sprawdz_uwierz_uzyt())
  16. {
  17. ?>
  18.  
  19. <a class="two" href="usun_komentarz.php?id=<?php echo $kom['id']; ?>">[U</a>/<a class="two" href="java script:animatedcollapse.toggle('jason<?php echo $i; ?>')">E]</a></font><br>
  20. <div id='jason<?php echo $i; ?>' style="display:none;">
  21. <form action="komentarz_wyslij.php" method="post" enctype="multipart/form-data" name="form<?php echo $i; ?>">
  22. <input type="hidden" name="art" value="<?php echo $art; ?>"><input type="hidden" name="updejt" value="1"><input type="hidden" name="identyf" value="<?php echo $kom['id']; ?>">
  23.  
  24. <table width="790" align="center" border="0">
  25. <tr>
  26.  <td><font class="komenty"><br />Autor</font></td>
  27. </tr>
  28. <tr>
  29.  <td><input type="text" name="autor" size="40" value="<?php echo $kom['kto'];?>"></td>
  30. </tr>
  31.  
  32. <tr>
  33.  <td><font class="komenty">Tekst komentarza (może zawierać znaczniki HTML)</font></td>
  34. </tr>
  35. <tr>
  36.  <td><textarea cols="80" rows="7" name="tekst_komentarza" wrap="virtual"><?php echo $kom['komentarz'];?></textarea>
  37.  </td>
  38. </tr>
  39. <tr>
  40.  <td><A  href="java script: submitkoment()">Gotowe</A></td></form>
  41. </tr>
  42. <script language="JavaScript">
  43. function submitkoment()
  44. {
  45. document.form<?php echo $i; ?>.submit();
  46. }
  47. </script>
  48. </table>
  49. </div>
  50. <?php
  51. }
  52. echo '</font></td></tr><tr><td><div class="komtext">'.$kom['komentarz'].'</div></td></tr><tr><td>&nbsp;</td></tr></table>';
  53. }

Sprawdziłem dane jakie sa przesyłane do skryptu wykonywalnego, i są to dane ostatniego komentarza, nawet kiedy edytuje pierwszy.
Dziwnym jest tez fakt, że:
Kod
<a class="two" href="usun_komentarz.php?id=<?php echo $kom['id']; ?>">
zwraca dobre id komentarza (link do usuniecia i usuwa prawidłowy komentarz), natomiast juz w
Kod
<input type="hidden" name="identyf" value="<?php echo $kom['id']; ?>">
zdaje sie, ze powinna siedziec ta sama wartosc pola, natomiast przekazywana jest inna. O co tu chodzi?

Jeszcze dodam, ze kiedy rozwijam formularz do edycji to sa w nim poprawne dane, tzn autor i tekst tego artykułu, który chce edytowac. Takze dopiero przy nacisnieciu submit musi wariowac z tego co widze...
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.