Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zmiana danych w bazie
Aga_
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
Post #2





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

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


Po pierwsze masz źle zaprojektowaną bazę, jeśli miałabyś pole (będące nota bene kluczem głównym) `id` dla każdego ucznia, to ułatwiłoby Ci to choćby zmianę rekordów (no i byłoby lepsze ponieważ porównywanie wartości liczbowych jest szybsze niż ciągów znaków).

Po drugie pole:
  1. <?php
  2. echo "<td height=30 align=center> <input type=tekst name=nieobecnosci> poprzednio: ".$row["nieobecnosci"]."<br>n";
  3. ?>


proponuję zamienić na (po prowadzeniu pola id

  1. <?php
  2. echo '<td height="30" align="center"><input type="text" name="nieobecnosci['.$row['id'].']" VALUE="'.$row['nieobecnosci'].'"><br>';
  3. ?>

dodanie pola VALUE spowoduje, że do pola tekstowego wpisywana będzie na starcie wartość tego pola z bazy co jest chyba lepszym rozwiązaniem niż podawanie obok poprzedniej wartości.

Po trzecie jeśli już chcesz mieć osobny przycisk submit dla każdego pola to powinien on wyglądać mniej więcej tak:
  1. <?php
  2. echo '<div align="center"><input type="submit" value="zmien" name="submit['.row['id'].']"></div>';
  3. ?>


Co spowoduje że każdemu przyciskowi i polu przypisanie zostanie id ucznia którego dane chcemy zmienić.
Przykładowy kod obsługujący formularz mógłby wyglądać następująco:
  1. <?php
  2. foreach ($_POST['submit'] as $id => $v) {
  3. if (!empty($v) && !empty($_POST['nieobecnosci'][$id])) {
  4. $query = 'UPDATE `dzieci` SET `nieobecnosci`='.intval($_POST['nieobecnosci'][$id]).' WHERE `id`='.$id.' LIMIT 1;';
  5. $result = mysql_query($query) or die (mysql_error());
  6. }
  7. }
  8. ?>


Jak jeszcze coś jest niejasne to pytaj.
Go to the top of the page
+Quote Post

Posty w temacie


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: 5.10.2025 - 16:08