Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Edycja i pętla while
Forum PHP.pl > Forum > Przedszkole
olszam
Prawie wszystko działa tylko nie edytuje mi tego formularzu tak jak trzeba tylko 1 rekord mi edytuje i nie ten co trzeba.
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.4.5
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 01 Sty 2012, 16:06
  7. -- Wersja serwera: 5.5.16
  8. -- Wersja PHP: 5.3.8
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8 */;
  18.  
  19. --
  20. -- Baza danych: `olszam`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Struktura tabeli dla `danezawody`
  27. --
  28.  
  29. CREATE TABLE IF NOT EXISTS `danezawody` (
  30. `iddanezawody` int(11) NOT NULL AUTO_INCREMENT,
  31. `datazawodow` date NOT NULL,
  32. `faza` tinyint(1) NOT NULL,
  33. `rodzajzawodow` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  34. `miejscezawodow` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  35. PRIMARY KEY (`iddanezawody`)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;
  37.  
  38. --
  39. -- Zrzut danych tabeli `danezawody`
  40. --
  41.  
  42. INSERT INTO `danezawody` (`iddanezawody`, `datazawodow`, `faza`, `rodzajzawodow`, `miejscezawodow`) VALUES
  43. (1, '1991-09-01', 1, 'MŚ 1991', 'Tokyo'),
  44. (2, '1991-08-30', 0, 'MŚ 1991', 'Tokyo');
  45.  
  46. -- --------------------------------------------------------
  47.  
  48. --
  49. -- Struktura tabeli dla `danezdjecia`
  50. --
  51.  
  52. CREATE TABLE IF NOT EXISTS `danezdjecia` (
  53. `iddanezdjecia` int(11) NOT NULL AUTO_INCREMENT,
  54. `opis` text COLLATE utf8_polish_ci,
  55. `nazwapliku` varchar(255) COLLATE utf8_polish_ci NOT NULL,
  56. `iddanezawody` int(11) DEFAULT NULL,
  57. PRIMARY KEY (`iddanezdjecia`),
  58. KEY `Relationship17` (`iddanezawody`)
  59. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;
  60.  
  61. -- --------------------------------------------------------
  62.  
  63. --
  64. -- Struktura tabeli dla `trener`
  65. --
  66.  
  67. CREATE TABLE IF NOT EXISTS `trener` (
  68. `idtrener` int(11) NOT NULL AUTO_INCREMENT,
  69. `nazwiskotrener` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  70. `imietrener` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  71. `krajtrener` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  72. `plectrener` char(1) COLLATE utf8_polish_ci NOT NULL,
  73. PRIMARY KEY (`idtrener`)
  74. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=5 ;
  75.  
  76. --
  77. -- Zrzut danych tabeli `trener`
  78. --
  79.  
  80. INSERT INTO `trener` (`idtrener`, `nazwiskotrener`, `imietrener`, `krajtrener`, `plectrener`) VALUES
  81. (1, 'BrakTrenera', '', '', ''),
  82. (2, 'Kraenzlein', 'Alvin', 'Kuba', 'M'),
  83. (3, 'Ter-Owanesjan', 'Igor', 'Rosja', 'M'),
  84. (4, 'Biffle', 'Jerome', 'USA', 'M');
  85.  
  86. -- --------------------------------------------------------
  87.  
  88. --
  89. -- Struktura tabeli dla `zawodnik`
  90. --
  91.  
  92. CREATE TABLE IF NOT EXISTS `zawodnik` (
  93. `idzawodnik` int(11) NOT NULL AUTO_INCREMENT,
  94. `nazwiskozawodnik` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  95. `imiezawodnik` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  96. `krajzawodnik` varchar(20) COLLATE utf8_polish_ci NOT NULL,
  97. `dataurodzenia` date NOT NULL,
  98. `pleczawodnik` char(1) COLLATE utf8_polish_ci NOT NULL,
  99. PRIMARY KEY (`idzawodnik`)
  100. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=5 ;
  101.  
  102. --
  103. -- Zrzut danych tabeli `zawodnik`
  104. --
  105.  
  106. INSERT INTO `zawodnik` (`idzawodnik`, `nazwiskozawodnik`, `imiezawodnik`, `krajzawodnik`, `dataurodzenia`, `pleczawodnik`) VALUES
  107. (1, 'Powell', 'Mike ', 'USA', '1963-11-10', 'M'),
  108. (2, 'Myricks', 'Larry', 'USA', '1956-03-10', 'M'),
  109. (3, 'Pedroso', 'Ivan', 'Kuba', '1972-12-17', 'M'),
  110. (4, 'Emmijan', 'Robert', 'ZSRR', '1965-02-16', 'M');
  111.  
  112. -- --------------------------------------------------------
  113.  
  114. --
  115. -- Struktura tabeli dla `zawody`
  116. --
  117.  
  118. CREATE TABLE IF NOT EXISTS `zawody` (
  119. `skok1` int(11) NOT NULL,
  120. `skok2` int(11) NOT NULL,
  121. `skok3` int(11) NOT NULL,
  122. `idzawodnik` int(11) NOT NULL,
  123. `iddanezawody` int(11) NOT NULL,
  124. `idtrener` int(11) NOT NULL,
  125. PRIMARY KEY (`idzawodnik`,`iddanezawody`),
  126. KEY `Relationship6` (`iddanezawody`),
  127. KEY `Relationship14` (`idtrener`)
  128. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  129.  
  130. --
  131. -- Zrzut danych tabeli `zawody`
  132. --
  133.  
  134. INSERT INTO `zawody` (`skok1`, `skok2`, `skok3`, `idzawodnik`, `iddanezawody`, `idtrener`) VALUES
  135. (840, 830, 820, 1, 1, 4),
  136. (840, 850, 830, 1, 2, 4),
  137. (790, 770, 810, 2, 2, 3),
  138. (820, 870, 830, 3, 1, 2),
  139. (870, 800, 0, 3, 2, 1),
  140. (820, 800, 790, 4, 2, 3);
  141.  
  142. -- --------------------------------------------------------
  143.  
  144. --
  145. -- Struktura tabeli dla `zdjecia`
  146. --
  147.  
  148. CREATE TABLE IF NOT EXISTS `zdjecia` (
  149. `idzdjecia` int(11) NOT NULL AUTO_INCREMENT,
  150. `idzawodnik` int(11) DEFAULT NULL,
  151. `idtrener` int(11) DEFAULT NULL,
  152. `iddanezdjecia` int(11) NOT NULL,
  153. PRIMARY KEY (`idzdjecia`,`iddanezdjecia`),
  154. KEY `Relationship15` (`idzawodnik`),
  155. KEY `Relationship16` (`idtrener`),
  156. KEY `Relationship18` (`iddanezdjecia`)
  157. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;
  158.  
  159. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  160. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  161. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


  1. <?php
  2. require 'polacz.php';
  3. mysql_query("SET NAMES utf8");
  4. mysql_query("SET CHARACTER SET utf8");
  5. mysql_query("SET collation_connection = utf8_polish_ci");
  6.  
  7. echo '<form action="edycja333.php" method="post">
  8. danezawody: <select name="iddanezawody">';
  9. $rezultat2 = mysql_query("SELECT * FROM danezawody ORDER BY datazawodow ASC");
  10. while($Wiersz2 = mysql_fetch_array($rezultat2)){
  11. if($Wiersz2['faza'] == 0){
  12. echo '<option value="'.$Wiersz2['iddanezawody'].'">'.$Wiersz2['rodzajzawodow'].' w '.$Wiersz2['miejscezawodow'].': Eleminacje</option>';
  13. }
  14. if($Wiersz2['faza'] == 1){
  15. echo '<option value="'.$Wiersz2['iddanezawody'].'">'.$Wiersz2['rodzajzawodow'].' w '.$Wiersz2['miejscezawodow'].': Finał</option>';
  16. }
  17. }
  18. echo '</select><br />
  19. <input type="submit" name="sprawdz" value="sprawdz" />';
  20.  
  21. if(isset($_POST['sprawdz'])){
  22. $id=$_POST['iddanezawody'];
  23. $sql=mysql_query("SELECT za.idzawodnik zaidz, za.imiezawodnik zaimie, za.nazwiskozawodnik zanazwisko,
  24. z.skok1 zskok1, z.skok2 zskok2, z.skok3 zskok3, z.idzawodnik, z.idtrener zidtrener, z.iddanezawody ziddz,
  25. t.nazwiskotrener tnazwisko, t.imietrener, t.idtrener tidtrener
  26. FROM trener AS t INNER JOIN zawody AS z ON z.idtrener=t.idtrener
  27. INNER JOIN zawodnik AS za ON z.idzawodnik=za.idzawodnik WHERE z.iddanezawody='$id'");
  28. while($Wiersz = mysql_fetch_array($sql)){
  29. echo '<br/><input type="text" name"iddanezawody" value="'.$Wiersz['ziddz'].' disabled="disabled"/>';
  30. echo '<br/>skok1: ';
  31. echo '<input type="text" name="skok1" value="'.$Wiersz['zskok1'].'"/> ';
  32. echo 'skok2: ';
  33. echo '<input type="text" name="skok2" value="'.$Wiersz['zskok2'].'"/> ';
  34. echo 'skok3: ';
  35. echo '<input type="text" name="skok3" value="'.$Wiersz['zskok3'].'"/> ';
  36. echo 'zawodnik: ';
  37. echo '<select name="idzawodnik">';
  38. $sql6="SELECT * FROM zawodnik";
  39. $rezultat2 = mysql_query($sql6);
  40. while($Wiersz5 = mysql_fetch_array($rezultat2)){
  41. if($Wiersz5['idzawodnik'] == $Wiersz['zaidz']){
  42. echo '<option value="'.$Wiersz5['idzawodnik'].'" selected="selected">'.$Wiersz5['imiezawodnik'].' '.$Wiersz5['nazwiskozawodnik'].' </option>';
  43. }
  44. else{
  45. echo '<option value="'.$Wiersz5['idzawodnik'].'">'.$Wiersz5['imiezawodnik'].' '.$Wiersz5['nazwiskozawodnik'].' </option>';
  46. }
  47. }
  48. echo '</select>';
  49. echo 'trener :';
  50. echo '<select name="idtrener">';
  51. $sql5="SELECT * FROM trener";
  52. $rezultat1 = mysql_query($sql5);
  53. while($Wiersz4 = mysql_fetch_array($rezultat1)){
  54. if($Wiersz4['idtrener'] == $Wiersz['tidtrener']){
  55. echo '<option value="'.$Wiersz4['idtrener'].'" selected="selected">'.$Wiersz4['imietrener'].' '.$Wiersz4['nazwiskotrener'].' </option>';
  56. }
  57. else{
  58. echo '<option value="'.$Wiersz4['idtrener'].'">'.$Wiersz4['imietrener'].' '.$Wiersz4['nazwiskotrener'].' </option>';
  59. }
  60. }
  61. echo '</select><br/>';
  62. }
  63. echo '<br/>';
  64. echo '<input type="submit" value="aktuaknij" name="aktualnij"/>';
  65. echo '</form>';
  66.  
  67. }
  68.  
  69. // odbieramy dane z formularza
  70. if(isset($_POST['aktualnij'])){
  71. $skok1 = $_POST['skok1'];
  72. $skok2 = $_POST['skok2'];
  73. $skok3 = $_POST['skok3'];
  74. $id2=$_POST['idtrener'];
  75. $id1=$_POST['idzawodnik'];
  76. $id3=$_POST['iddanezawody'];
  77. if($skok1 && $skok2 && $skok3 && $id1 && $id2 && $id3)
  78. {
  79. var_dump($sql1="UPDATE zawody SET skok1=$skok1, skok2=$skok2, skok3=$skok3, idzawodnik=$id2, idtrener=$id1 WHERE idzawodnik=$id2 AND iddanezawody=$id3");
  80. // dodajemy rekord do bazy
  81. $ins = mysql_query($sql1,$polacz);
  82.  
  83. if($ins)
  84. {
  85. echo '<br/>Rekord został wyedytowany poprawnie';
  86. }
  87. else
  88. {
  89. echo '<br/>Błąd nie udało się wyedytować nowego rekordu';
  90. }
  91. }
  92. }
  93. ?>
Niktoś
Sprawdzałeś w ogóle tą kwerendę,czy działa?

  1. $sql=mysql_query("SELECT za.idzawodnik zaidz, za.imiezawodnik zaimie, za.nazwiskozawodnik zanazwisko,
  2. z.skok1 zskok1, z.skok2 zskok2, z.skok3 zskok3, z.idzawodnik, z.idtrener zidtrener, z.iddanezawody ziddz,
  3. t.nazwiskotrener tnazwisko, t.imietrener, t.idtrener tidtrener
  4. FROM trener AS t INNER JOIN zawody AS z ON z.idtrener=t.idtrener
  5. INNER JOIN zawodnik AS za ON z.idzawodnik=za.idzawodnik WHERE z.iddanezawody='$id'");
,wydaje mi się ,że moźe być ona nieprawidłowa.
olszam
sprawdzałem i działa
Niktoś
Jak to działa, to ja głupi jestem.
mortus
Zapytanie działa, a problemem jest niewłaściwe przekazywanie danych przez formularz. Zauważ @olszam, że w tej chwili nie wiadomo, które dane chcesz zaktualizować. Dlaczego? Otóż dla wszystkich zawodników pola mają dokładnie takie same nazwy (skok1, skok2, skok3, idtrener, idzawodnik). Ciężko zgadnąć, które dane zostaną wysłane/przekazane w tablicy $_POST. W takiej sytuacji trzeba przesłać tablicę, w której znajdą się wszystkie rekordy:
  1. // zmodyfikowana pętla while (linie 28-62 włącznie)
  2. while ($Wiersz = mysql_fetch_array($sql)) {
  3. echo '<br/><input type="text" name="iddanezawody" value="' . $Wiersz['ziddz'] . '" disabled="disabled" />';
  4. echo '<br/>skok1: ';
  5. echo '<input type="text" name="skok1[]" value="' . $Wiersz['zskok1'] . '" /> ';
  6. echo 'skok2: ';
  7. echo '<input type="text" name="skok2[]" value="' . $Wiersz['zskok2'] . '" /> ';
  8. echo 'skok3: ';
  9. echo '<input type="text" name="skok3[]" value="' . $Wiersz['zskok3'] . '" /> ';
  10. echo 'zawodnik: ';
  11. echo '<select name="idzawodnik[]">';
  12. $sql6 = "SELECT * FROM zawodnik";
  13. $rezultat2 = mysql_query($sql6);
  14. while ($Wiersz5 = mysql_fetch_array($rezultat2)) {
  15. if ($Wiersz5['idzawodnik'] == $Wiersz['zaidz']) {
  16. echo '<option value="' . $Wiersz5['idzawodnik'] . '" selected="selected">' . $Wiersz5['imiezawodnik'] . ' ' . $Wiersz5['nazwiskozawodnik'] . ' </option>';
  17. } else {
  18. echo '<option value="' . $Wiersz5['idzawodnik'] . '">' . $Wiersz5['imiezawodnik'] . ' ' . $Wiersz5['nazwiskozawodnik'] . ' </option>';
  19. }
  20. }
  21. echo '</select>';
  22. echo 'trener :';
  23. echo '<select name="idtrener[]">';
  24. $sql5 = "SELECT * FROM trener";
  25. $rezultat1 = mysql_query($sql5);
  26. while ($Wiersz4 = mysql_fetch_array($rezultat1)) {
  27. if ($Wiersz4['idtrener'] == $Wiersz['tidtrener']) {
  28. echo '<option value="' . $Wiersz4['idtrener'] . '" selected="selected">' . $Wiersz4['imietrener'] . ' ' . $Wiersz4['nazwiskotrener'] . ' </option>';
  29. } else {
  30. echo '<option value="' . $Wiersz4['idtrener'] . '">' . $Wiersz4['imietrener'] . ' ' . $Wiersz4['nazwiskotrener'] . ' </option>';
  31. }
  32. }
  33. echo '</select><br/>';
  34. }

W ten oto sposób w tablicy $_POST znajdą się dane, które będą identyfikować każdego zawodnika z osobna. Wszystkie tablice będą równe co do wielkości (tzn. ilości elementów w nich zawartych). Można się zatem poruszać po nich w pętli foreach.:
  1. foreach($_POST['skok1'] as $klucz => $skok1) {
  2. $sql = "UPDATE `zawody` SET `skok1` = {$_POST['skok1'][$klucz]}, `skok2` = {$_POST['skok2'][$klucz]}, `skok3` = {$_POST['skok3'][$klucz]}, `idtrener` = {$_POST['idtrener'][$klucz]} WHERE `idzawodnik` = {$_POST['idzawodnik'][$klucz]} AND `iddanezawody` = {$_POST['iddanezawody']}";
  3. mysql_query($sql);
  4. }

Takie rozwiązanie ma swoje wady:
1. wykonując UPDATE z każdym przebiegiem pętli foreach bardzo obciążamy serwer baz danych,
2. nawet rekordy, w których nie zmienialiśmy danych zostaną przez polecenie UPDATE sprawdzone, co w połączeniu z punktem powyżej jeszcze bardziej obciąży serwer.
Obie te wady można oczywiście ominąć, ale to już "wyższa matematyka", do której możemy przejść, jak poprawisz to.
olszam
poprawiłem i powinno działać jak należy ale jednego nie rozumiem, czemu iddanezawody do update pobiera mi z tego comboboxa zamiast z textboxa tzn tak normalnie jest wszystko wyświetlane zawodnicy id danych zawodów trenerzy i skoki ale jak biore aktualizuj to zamiast aktualizować mi iddanezawody z textboxa to bierze mi z tego comboboxa iddanychzawodów.
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.