Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zmiana danych w bazie
Aga_
post 30.05.2006, 09:52:27
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 5.04.2006

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


Witam, mam problem ze zmianą pól w bazie, dla wielu rekordów. Wyświetlam w formularzu rekordy z bazy i dla każdego z nich chce zmieniać jedno pole. Nie wiem jak powiązać to pole z rekordem, skoro w formularzu nie wpisuje danych i do zmiennej wrzucam pustą wartość.
Wyświetlam imie i nazwisko i chce zmienic nieobecnosci. Proszę o pomoc smile.gif Niżej zamieszczam fragment kodu:
  1. <form method=post action=pierwsza.php?action=zmien > 
  2. <table width="80%" border="0" align="center" bgcolor="#FAEBD7" >
  3. <tr>
  4. <td height=30 align=center> <font color="#FFA500"><b> Imie: </b></td>
  5. <td height=30 align=center> <font color="#FFA500"><b> Nazwisko: </b></td>
  6. <td height=30 align=center> <font color="#FFA500"><b> Grupa: </b></td>
  7. <td height=30 align=center> <font color="#FFA500"><b> Ilość nieobecnosci w ubiegłym miesiącu: </b></td>
  8. </tr>
  9.  
  10. <?php
  11.  $connect=mysql_connect('localhost','root','root') or die ('Przykro nam ale nie mogę połączyć się z bazą!');
  12. mysql_select_db("rejestracja");
  13.  
  14.  
  15. $query="SELECT * FROM dzieci where grupa=1 ORDER BY 'nazwisko'";
  16. $result=mysql_query($query)or die (mysql_error());
  17.  
  18. while ($row=mysql_fetch_array($result))
  19. {
  20. echo "<tr>";
  21. echo "<td height=30> ".$row["imie"]."</td>n";
  22. echo "<td height=30> ".$row["nazwisko"]."</td>n";
  23. echo "<td height=30 align=center> ".$row["grupa"]."</td>n";
  24. echo "<td height=30 align=center> <input type=tekst name=nieobecnosci> poprzednio: ".$row["nieobecnosci"]."<br>n";
  25. echo "<div align='center'><input type=submit value='zmien'></div>";
  26. echo "</tr>";
  27. }
  28. mysql_free_result ($result);
  29. ?>
  30. </table>
  31. </form>
  32.  
  33. <?php
  34.  
  35. if ($_REQUEST['action'] == zmien) zmien();
  36.  
  37. function zmien()
  38. {
  39. $imie = $_POST['imie'];
  40. $nazwisko = $_POST['nazwisko'];
  41. $nieobecnosci = $_POST['nieobecnosci'];
  42.  
  43. //sprawdzenie czy pole nieobecnosci są wypełnione
  44. //if 
  45. //($nieobecnosci == '')
  46. //echo "pola nieobecnosci musza byc wypelnione";
  47. //else
  48.  
  49. //zapisanie do bazy
  50. $query = "UPDATE dzieci SET nieobecnosci = '$nieobecnosci'
  51. WHERE nazwisko = '$nazwisko' ";
  52. $result = mysql_query($query) or die (mysql_error());
  53.  
  54. echo "<table><tr><td align=center>",$nieobecnosci,"Lista została zmienona :)<br></a></td></tr></table>";
  55. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
KG-
post 31.05.2006, 20:30:14
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 30.05.2006

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


Tak i nie.

Twój przykład zakłada istnieje jednego przycisku submit który następnie iteruje po wszystkich polach nieobecności i wpisuje je do bazy.

Z treści i kodu z pierwszego postu wywnioskowałem, że formularz składa się z wielu przycisków submit umieszczonych przy każdym polu tekstowym i wciśnięcie danego przycisku aktualizuje tylko dane pole, a konkretnie to które stało obok wciśniętego przycisku.

Zgadzam się że tylko jeden przycisk może zostać wciśnięty, ale cała tablica $_POST['submit'] o której piszesz składa się tak naprawdę tylko z jednego pola (lub nie składa się z żadnego w przypadku gdy akcja jest inna niż wyslanie formularza przez POST), właśnie tego, które określa jaki przycisk był wciśnięty.

Robimy więc foreach z dwóch powodów:
1) jeśli formularz nie został wysłany tylko odczytany to tablica będzie pusta i kod dodawania do bazy nie wykona się
2) robiąc foreach mamy pewność że używamy właściwego klucza do wstawienia odpowiedniego pola do bazy pod odpowiednim id.

Można oba powyższe cele osiągnąć jeszcze na inne sposoby ale to było najprostsze i najbardziej intuicyjne co przyszło mi do głowy.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 14:00