Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][HTML][PHP]Dwa formularze na jednej stronie
Forum PHP.pl > Forum > Przedszkole
b79
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 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.
ZuyPan
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. ?>
neverever
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)
b79
@ZuyPan - niestety nie pomogło 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 smile.gif
sadistic_son
Każdemu submitowi nadaj inny name. Poza tym submit z value='popraw' nie ma u Ciebie name w ogole.
b79
@sadistic_son - niestety nie dało to również żadnego efektu
celbarowicz
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ć
thek
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 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 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.
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.