Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][HTML][PHP]Dwa formularze na jednej stronie, submit działa zawsze dla pierwszego formularza :(
b79
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.02.2010

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


Witam wszystkich to mój pierwszy post na forum więc proszę mnie oszczędzić

mam stronę na której są dwa formularze

1. dodawanie danych do bazy(cały czas widoczny)
2. edycja danych (pojawia sie dopiero po kliknieciu w link do edycji )

pierwszy formularz działa dobrze, drugi w połowie bo pojawiają się odpowiednie dane do edycji, jednak jak wprowadzę zmiany i klikne w przycisk popraw to i tak zadziała pierwszy submit i zamiast edytowac dane formularz dodaje nowy rekord (IMG:style_emoticons/default/sad.gif)

na pewno mógłbym to rozwiązać gdyby formularze odwoływały sie do osobnych skryptów, jednak podoba mi się jak działa to wszystko na jednej stronie i chciałbym aby tak zostało, jednak sam nie potrafię zmusić tego do działania.

To jest mój pierwszy kontakt z PHP (ok 5 dni z tym walcze) więc proszę o wyrozumiałość.

załączam fragment kodu.

  1. <form action="" method="post">
  2.  
  3. url: <input type="text" name="url" /> słowo kluczowe:<input type="text" name="keyword" /> <input type="submit" value="Dodaj" name="submit"/><br /><br/>
  4.  
  5. </form>

  1. <?php
  2. $url = $_POST['url'];
  3. $keyword = $_POST['keyword'];
  4.  
  5. if($url and $keyword) {
  6.  
  7. // dodajemy rekord do bazy
  8. $ins = @mysql_query("INSERT INTO static_data SET url='$url', keyword='$keyword', added_date='1234567890', active='1'");
  9.  
  10. if($ins) echo "Rekord został dodany poprawnie";
  11. else echo "Błąd nie udało się dodać nowego rekordu";
  12.  
  13. }
  14.  
  15. ?>
  16.  
  17. <?php
  18. $a = trim($_GET['a']);
  19. $id = trim($_GET['id']);
  20.  
  21. if($a == 'del' and !empty($id)) {
  22.  
  23. /* usuwamy rekord */
  24. mysql_query("DELETE FROM static_data WHERE id='$id'")
  25. or die('Błąd zapytania: '.mysql_error());
  26.  
  27. echo 'Rekord został usunęty z bazy';
  28. }
  29.  
  30. if($a == 'edit' and !empty($id)) {
  31. /* zapytanie do tabeli */
  32. $wynik = mysql_query("SELECT * FROM static_data WHERE id='$id'")
  33. or die('Błąd zapytania');
  34. /* wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0 */
  35. if(mysql_num_rows($wynik) > 0) {
  36. /* odczytujemy zawartość wiersza z tabeli */
  37. $lista = mysql_fetch_assoc($wynik);
  38. /* wczytujemy dane do formularza */
  39. /* w formularz znajdują się ukryte pola "a" z wartością "save" i pole "id" z wartością zmiennej id */
  40. echo '<form action="" method="post">
  41. <input type="hidden" name="a" value="save" />
  42. <input type="hidden" name="id" value="'.$id.'" />
  43. url:<input type="text" name="url" value="'.$lista['url'].'" /> keyword:<input type="text" name="keyword" value="'.$lista['keyword'].'" /> active:<input type="text" name="active" value="'.$lista['active'].'" /> <input type="submit" value="popraw" />
  44. </form>';
  45. }
  46. }
  47. elseif($a == 'save') {
  48. /* odbieramy zmienne z formularza */
  49. $id = $_POST['id'];
  50. $url = trim($_POST['url']);
  51. $keyword = trim($_POST['keyword']);
  52. $active = trim($_POST['active']);
  53.  
  54. /* uaktualniamy tabelę */
  55. mysql_query("UPDATE static_data SET url='$url', keyword='$keyword', active='$active' WHERE id='$id'")
  56. or die('Błąd zapytania');
  57. echo 'Dane zostały zaktualizowane';
  58. }
  59.  
  60. // pobierabie wartości z tabeli
  61. $sql = "SELECT id, url, keyword FROM static_data WHERE active = 1 ORDER BY url ASC";
  62. $rezultat = mysql_query($sql) or die(mysql_error());
  63.  
  64.  
  65. // wyświetlanie rezultatu na ekranie
  66. echo "<table cellpadding=\"2\" border=1>";
  67. echo "<tr>";
  68. echo "<th>DOMENA</th>";
  69. echo "<th>SŁOWO KLUCZOWE</th>";
  70. echo "<th>SZCZEGÓŁY</th>";
  71. echo "<th>EDYCJA</th>";
  72. echo "<th>USUŃ</th>";
  73. echo "</tr>";
  74. while ($lista = mysql_fetch_array($rezultat)) {
  75. echo "<tr>";
  76. echo "<td>".$lista['url']."</td>";
  77. echo "<td>".$lista['keyword']."</td>";
  78. echo "<td align=\"center\"><a href=\"stats.php?s=".$lista['id']."\">info</a></td>";
  79. echo "<td align=\"center\"><a href=\"stats.php?a=edit&amp;id=".$lista['id']."\">edytuj</a></td>";
  80. echo "<td align=\"center\"><a href=\"stats.php?a=del&amp;id=".$lista['id']."\">usuń</a></td>";
  81. echo "</tr>";
  82. }
  83. echo "</table>";
  84.  
  85.  
  86. ?>


kod to zlepek z tutoriali i kursów które przerobiłem w ostatnim czasie więc prosze nie krytukować jakości kodu, chociaż wszystkie sugestie mile widziane.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
ZuyPan
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


Głowy uciąć nie dam (jestem zmęczony itd.) wydaje mi się, że chodzi o tą linijkę kodu
[


  1.  
  2. <?php
  3. echo '<form action="" method="post">
  4. ?>

w pełnym kodzie jest to linijka nr 40. Powinno być tak: (głowy uciąć, że zadziała nie dam ;>)
  1. <?php
  2. echo '<form action="twoj_skrypt.php?a=save" method="post">
  3. ?>
Go to the top of the page
+Quote Post
neverever
post
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


Na stronie może być i 100 formularzy, wszystko zależy od organizacji kodu.

Najprościej jest je rozróżniać po submicie, a konkretnie po jego nazwie.

przykładowo
  1. <form action="" method="post">
  2. <input type="text" name="xyz" />
  3. <input type="submit" value="Dodaj" name="dodaj"/>
  4. </form>
  5.  
  6. <form action="" method="post">
  7. <input type="text" name="xyz" />
  8. <input type="submit" value="Dodaj" name="edytuj"/>
  9. </form>
  10.  
  11. <form action="" method="post">
  12. <input type="text" name="xyz" />
  13. <input type="submit" value="Dodaj" name="usun"/>
  14. </form>
  15.  


  1. if(isset($_POST['dodaj'])){
  2.  
  3. //... tutaj akcja gdy wysłano formularz dodawania
  4.  
  5. }
  6.  
  7. if(isset($_POST['edytuj'])){
  8.  
  9. //... tutaj akcja gdy wysłano formularz edycji
  10.  
  11. }
  12.  
  13. if(isset($_POST['usun'])){
  14.  
  15. //... tutaj akcja gdy wysłano formularz odp. za usunięcie
  16.  
  17. }


-oczywiście nazwy tych submitów muszą być unikalne! (nie mogą występować nigdzie indziej w formularzach na tej stronie)

Ten post edytował neverever 11.02.2010, 23:10:54
Go to the top of the page
+Quote Post
b79
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.02.2010

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


@ZuyPan - niestety nie pomogło (IMG:style_emoticons/default/sad.gif)

@neverever - wygląda obiecującoale tam już mam sporo ifów i elseifów, także niestety musze przeczytać jeszcze kilka manuali, ale dzięki za nakierowanie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
sadistic_son
post
Post #5





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Każdemu submitowi nadaj inny name. Poza tym submit z value='popraw' nie ma u Ciebie name w ogole.

Ten post edytował sadistic_son 12.02.2010, 07:07:50
Go to the top of the page
+Quote Post
b79
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 11.02.2010

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


@sadistic_son - niestety nie dało to również żadnego efektu
Go to the top of the page
+Quote Post
celbarowicz
post
Post #7





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


a czy to Tobie pomoże?
  1. <?php
  2. if(!isset($_POST['sub1'])){$_SESSION['akcja_1']='celbar';}
  3. else{$_SESSION['akcja_1']=$_POST['sub1'];}
  4. if(!isset($_POST['sub2'])){$_SESSION['akcja_2']='celbar';}else {$_SESSION['akcja_2']=$_POST['sub2'];}
  5. if(!isset($_POST['sub3'])){$_SESSION['akcja_3']='celbar';}else{$_SESSION['akcja_3']=$_POST['sub3'];}
  6.  
  7.  
  8. echo '<form method="post" action="tenformularz.php">';
  9. if($_SESSION['akcja_1']=='DALEJ'){echo 'tutaj róbta co chceta-------------------';}else{}
  10. echo '<br>';
  11. echo '<input type="text" name="okno1">';
  12.  
  13. echo '<br>';
  14. echo '<input type="submit" name="sub1" value="DALEJ" >';
  15. echo '<br>';
  16. echo '</form>';
  17. //-----------------------------------------------------------
  18. echo '<form method="post" action="tenformularz.php">';
  19. if($_SESSION['akcja_2']=='EDYTUJ'){echo 'tutaj wpisz kod edycji';}else{}
  20. if($_SESSION['akcja_3']=='ZAPISZ'){echo 'tutaj wpisz kod zapisu danych';}else{}
  21.  
  22. echo '<br>';
  23. echo '<input type="text" name="okno2">';
  24. echo '<input type="submit" name="sub2" value="EDYTUJ" >';
  25. echo '<input type="submit" name="sub3" value="ZAPISZ" >';
  26.  
  27.  
  28. echo '</form>';
  29.  
  30. ?>
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
daj znać
Go to the top of the page
+Quote Post
thek
post
Post #8





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




Przecież obie te akcje (dodanie i edycja) to jedno i to samo różniące się raptem tylko jedną daną! Robisz formularz z wszystkimi polami jak trzeba i dodajesz jedno pole typu hidden z wartością równą id. Jeśli podczas otwierania nie będzie go -> dajesz 0 i wiesz, że to coś nowego. Jeśli masz owe id, wiesz, że to edycja. Po stronie bazy jedynie sprawdzasz czy nie ma już identycznego podczas sprawdzania "na wszelki wypadek" (nigdy nie ufaj danym usera). Wtedy wystarczy JEDEN submit dla wszystkiego. Jeśli przy submit owo pole ukryte o name = "id" ma value = 0 -> INSERT, jeśli większe od 0 -> UPDATE. Oczywiście po drodze sprawdzasz czy nie ma w bazie już takiego dubla. Pozbywasz się jednak wiele niepotrzebnego kodu. A tak jak radzą poprzednicy, najprościej użyć sprawdzenia po nazwie.
Często spotykam się z błednymi sprawdzeniami typu if( isset( !$_POST ) ) co jest dziwne, bo zmienna ta jest zawsze ustawiona (IMG:style_emoticons/default/winksmiley.jpg) Dlatego sprawdzam tak if( !empty( $_POST ) ) a zaraz potem czy aby wcisnęli właściwy guzik if( array_key_exists( 'name_submita', $_POST ) ) to Ci ujawni, czy klepnięto w interesujący Cię. Nie można bowiem kliknąc dwóch jednocześnie.Do serwera i tak dojdzie tylko jeden (poza przypadkami z modyfikacją danych post, ale to inna bajka (IMG:style_emoticons/default/winksmiley.jpg) ). Wrzucanie kilku submitów do forma i oddanie tego userowi znającemu się na rzeczy to proszenie o kłopoty. Najlepiej niech jest tylko jeden dla jednego kontrolera, a unikniesz problemów wielu. Stąd proponuję Ci usunięcie jednego i pójście w stronę odpowiedniej kontroli po stronie serwera.
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: 17.10.2025 - 06:35