Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z pobieraniem konkretnych danych z bazy i ich późniejsza modyfikacja
Forum PHP.pl > Forum > Przedszkole
MatBlo
Jestem w trakcie tworzenia skryptu, który wyświetla dane z bazy w formie tabeli, a następnie umożliwia ich edycję. Zatrzymałem się na momencie, w którym gdy chcę edytować dane konkretnej osoby każdorazowo wczytywane są dane osoby o najniższym ID. To jest kod przy pomocy którego pobieram ID osoby, którą chcę edytować

  1. echo"<td><a href=" . 'edytuj_osobe.php?id='. $row['id_uzytkownika'] . ">Wykonaj</td>";


a tu już sam kod który pobiera dane z bazy i je edytuje:

  1. <?php
  2. require_once('polaczenie.php');
  3. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
  4. or die('Brak połączenia z serwerem MySQL.');
  5. mysqli_set_charset($dbc, "utf8");
  6.  
  7. $error_imie = "";
  8. $error_nazwisko = "";
  9. $info_msg = "";
  10. $error_msg = "";
  11. $err = false;
  12.  
  13. // Pobieranie danych z profilu z bazy.
  14. $query = "SELECT imie, nazwisko, nazwa, nazwa_wydzialu, nazwa_symbolu FROM stanowisko a INNER JOIN uzytkownicy b ON a.id_stanowiska = b.id_stanowiska INNER JOIN wydzialy c ON b.id_wydzialu = c.id_wydzialu;";
  15. if ( isset( $_GET['id_uzytkownika'] )) {
  16. $query.= " WHERE id_uzytkownika = " . $_GET['id_uzytkownika'];
  17. }
  18. $data = mysqli_query($dbc, $query);
  19. $row = mysqli_fetch_array($data);
  20.  
  21. if ($row != NULL) {
  22. $imie = $row['imie'];
  23. $nazwisko = $row['nazwisko'];
  24. }
  25. else {
  26. echo '<p class="error">Wystąpił problem przy próbie dostępu do profilu.</p>';
  27. }
  28.  
  29. if (isset($_POST['submit'])) {
  30. $imie = mysqli_real_escape_string($dbc, trim($_POST['imie']));
  31. $nazwisko = mysqli_real_escape_string($dbc, trim($_POST['nazwisko']));
  32. $stanowisko = $_POST['stanowisko'];
  33. $wydzial = $_POST['wydzial'];
  34.  
  35. //walidacja
  36. if (empty($imie)) {
  37. $error_imie = ' Wprowadź imię.';
  38. $err=true;
  39. }
  40.  
  41. else if (!preg_match ('/^[a-żA-Ż\s]+$/', $_POST['imie'])) {
  42. $error_imie = ' Wprowadzono niewłaściwe znaki.';
  43. $err=true;
  44. }
  45. if (empty($nazwisko)) {
  46. $error_nazwisko = ' Wprowadź nazwisko.';
  47. $err=true;
  48. }
  49. else if (!preg_match ('/^[a-żA-Ż\s\-]+$/', $_POST['nazwisko'])) {
  50. $error_nazwisko = ' Wprowadzono niewłaściwe znaki.';
  51. $err=true;
  52. }
  53.  
  54. if (!$err) {
  55. $query = "UPDATE uzytkownicy SET imie = '$imie', nazwisko = '$nazwisko', ";
  56. $query.= " id_stanowiska = '$id_stanowiska', id_wydzialu = '$id_wydzialu', data_mod = NOW()";
  57. $query.= " WHERE id_uzytkownika = '" . $_GET['id_uzytkownika'] . "'";
  58. if (mysqli_query($dbc, $query)) {
  59. $info_msg = "Aktualizacja danych zakończyła się sukcesem.";
  60. } else {
  61. $error_msg = "Nastąpił nieoczekiwany błąd podczas dodawania osoby." . mysql_error();
  62. }
  63. }
  64. }
  65. ?>
  66. <!DOCTYPE html>
  67. <html>
  68. <head>
  69. <meta name="author" content="matblo" />
  70. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  71. <meta http-equiv="content-language" content="pl" />
  72. <title>Edycja danych</title>
  73. <link rel="stylesheet" href="css/styl.css" media="screen" type="text/css" />
  74. </head>
  75. <body>
  76. <div id="maincenter">
  77. <div id="header">
  78. <div id="logo">
  79. </div>
  80. </div>
  81. <div id="menu">
  82. </div>
  83. <div id="content">
  84. <div id="naglowek">
  85. <h1><p>Edytuj osobę</p></h1>
  86. </div>
  87. <div id="tresc">
  88. <h1>
  89. </h1>
  90. <?php echo"<form id=\"formularz\" method=\"post\" action=" . $_SERVER['PHP_SELF'] . '?id=' . $_GET['id_uzytkownika'] . ">"; ?>
  91. <fieldset>
  92. <ul>
  93. <li>
  94. <label for="imie">Imię:</label>
  95. <input type="text" id="imie" value="<?php echo"$imie" ?>" name="imie" /><span class="error_input"><?php echo"$error_imie"; ?></span>
  96. </li>
  97. <li>
  98. <label for="nazwisko">Nazwisko:</label>
  99. <input type="text" id="nazwisko" value="<?php echo"$nazwisko" ?>" name="nazwisko" /><span class="error_input"><?php echo "$error_nazwisko" ?></span>
  100. </li>
  101. <li>
  102. <label for="stanowisko">Stanowisko:</label>
  103. <select id="stanowisko" name="stanowisko">
  104. <?php
  105. $query = "SELECT * FROM stanowisko";
  106. $result = mysqli_query($dbc, $query);
  107. while ($row = mysqli_fetch_array($result)) {
  108. echo "<option value='" . $row['id_stanowiska'] . "' >" . $row['nazwa'] ."&nbsp". $row['opis'] ." </option>";
  109. }
  110. ?>
  111. </select>
  112. </li>
  113. <li>
  114. <label for="wydzial">Wydział i symbol:</label>
  115. <select id="wydzial" name="wydzial">
  116. <?php
  117. $query = "SELECT * FROM wydzialy";
  118. $result = mysqli_query($dbc, $query);
  119. while ($row = mysqli_fetch_array($result)) {
  120. echo "<option value='" . $row['id_wydzialu'] . "' >" . $row['nazwa_wydzialu'] ."&nbsp". $row['nazwa_symbolu'] . " </option>";
  121. }
  122. ?>
  123. </select>
  124. </li>
  125. <li>
  126. <label for="status">Aktywny</label>
  127. <input class="status" type="checkbox" name="status" value="status" />
  128. </li>
  129. </ul>
  130.  
  131. <?php
  132. if ( $info_msg != "" )
  133. echo"<p class=\"center_info\">" . $info_msg . "</p>";
  134. if ( $error_msg != "" )
  135. echo"<p class=\"center_error\">" . $error_msg . "</p>";
  136. ?>
  137.  
  138. <p class="submit">
  139. <input class="przycisk_zapisz" type="submit" name="submit" value="Wyślij" alt="Zapisz" title="Zapisz" />
  140. </p>
  141. </fieldset>
  142. </form>
  143. </div>
  144. </div>
  145. <div id="footer">
  146. <span>Copyright &copy; 2012 matblo</span>
  147. </div>
  148. </div>
  149. </body>
  150. </html>


Druga sprawa nawet po wczytaniu danych "niechcianej" osoby i próbie ich edycji nie udaje się tego dokonać.
ZAKO
Dorzuc jeszcze kod SQL na bazę danych, to będzie można potestować.
MatBlo
ee jaki kod?
prz3kus
Uważasz że to zadziała, nie sądzę że po średniku jeszcze dodasz zapytanie
Zmień te linijki na normalny kawałek kodu bo strasznie kole w oczyska smile.gif
  1. $query = "SELECT imie, nazwisko, nazwa, nazwa_wydzialu, nazwa_symbolu FROM stanowisko a INNER JOIN uzytkownicy b ON a.id_stanowiska = b.id_stanowiska INNER JOIN wydzialy c ON b.id_wydzialu = c.id_wydzialu;";
  2. if ( isset( $_GET['id_uzytkownika'] )) {
  3. $query.= " WHERE id_uzytkownika = " . $_GET['id_uzytkownika'];
  4. }
MatBlo
Możesz mnie jakoś nakierować bo szczerze nie bardzo mam pomysł jak to inaczej zapisać.
greycoffey
Jak zwykle - problem z bazą danych: SRUFP (Standardowa Rada Użyszkodnika Forum Php.pl) #1: Wyświetl błąd mysql. Zamiast
Kod
mysql_query($query);
daj
Kod
mysql_query($query) or die(mysql_error());
.
MatBlo
Cytat(ZAKO @ 30.04.2012, 11:09:13 ) *
Dorzuc jeszcze kod SQL na bazę danych, to będzie można potestować.

  1. -- phpMyAdmin SQL Dump
  2. -- version 2.11.4
  3. --
  4. -- Host: localhost
  5. -- Czas wygenerowania: 30 Kwi 2012, 11:46
  6. -- Wersja serwera: 5.0.45
  7. -- Wersja PHP: 5.2.5
  8.  
  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  10.  
  11. --
  12. -- Baza danych: `db_centralny_rejestr`
  13. --
  14.  
  15. -- --------------------------------------------------------
  16.  
  17. --
  18. -- Struktura tabeli dla `stanowisko`
  19. --
  20.  
  21. DROP TABLE IF EXISTS `stanowisko`;
  22. CREATE TABLE `stanowisko` (
  23. `id_stanowiska` bigint(20) NOT NULL AUTO_INCREMENT,
  24. `nazwa` varchar(300) collate utf8_polish_ci NOT NULL,
  25. `opis` varchar(10) collate utf8_polish_ci NOT NULL,
  26. PRIMARY KEY (`id_stanowiska`),
  27. UNIQUE KEY `id_stanowiska` (`id_stanowiska`)
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=7 ;
  29.  
  30. --
  31. -- Zrzut danych tabeli `stanowisko`
  32. --
  33.  
  34. INSERT INTO `stanowisko` (`id_stanowiska`, `nazwa`, `opis`) VALUES
  35. (1, 'Dyrektor', ''),
  36. (2, 'p.o. Dyrektora', '');
  37.  
  38. -- --------------------------------------------------------
  39.  
  40. --
  41. -- Struktura tabeli dla `uzytkownicy`
  42. --
  43.  
  44. DROP TABLE IF EXISTS `uzytkownicy`;
  45. CREATE TABLE `uzytkownicy` (
  46. `id_uzytkownika` bigint(20) NOT NULL AUTO_INCREMENT,
  47. `imie` varchar(50) collate utf8_polish_ci DEFAULT NULL,
  48. `nazwisko` varchar(50) collate utf8_polish_ci DEFAULT NULL,
  49. `id_stanowiska` bigint(20) NOT NULL,
  50. `id_wydzialu` bigint(20) NOT NULL,
  51. `data_u` datetime DEFAULT NULL,
  52. `data_mod` datetime DEFAULT NULL,
  53. `status` tinyint(4) DEFAULT NULL,
  54. PRIMARY KEY (`id_uzytkownika`),
  55. UNIQUE KEY `id_uzytkownika` (`id_uzytkownika`),
  56. KEY `id_stanowiska` (`id_stanowiska`),
  57. KEY `id_wydzialu` (`id_wydzialu`)
  58. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=53 ;
  59.  
  60. --
  61. -- Zrzut danych tabeli `uzytkownicy`
  62. --
  63.  
  64. INSERT INTO `uzytkownicy` (`id_uzytkownika`, `imie`, `nazwisko`, `id_stanowiska`, `id_wydzialu`, `data_u`, `data_mod`, `status`) VALUES
  65. (1, 'Jan', 'Kowalski', 1, 1, NULL, NULL, NULL),
  66. (7, 'Krzysztof', 'Nowak', 2, 3, NULL, NULL, NULL),
  67. (50, 'mdfsklgg', 'mmmm', 1, 1, '2012-04-26 14:43:58', NULL, NULL),
  68. (51, 'mdfsklgg', 'mmmm', 1, 1, '2012-04-26 14:52:53', NULL, NULL),
  69. (52, 'mdfsklgg', 'mmmm', 1, 1, '2012-04-26 14:55:29', NULL, NULL);
  70.  
  71. -- --------------------------------------------------------
  72.  
  73. --
  74. -- Struktura tabeli dla `wydzialy`
  75. --
  76.  
  77. DROP TABLE IF EXISTS `wydzialy`;
  78. CREATE TABLE `wydzialy` (
  79. `id_wydzialu` bigint(20) NOT NULL AUTO_INCREMENT,
  80. `nazwa_wydzialu` varchar(200) collate utf8_polish_ci NOT NULL,
  81. `nazwa_symbolu` varchar(10) collate utf8_polish_ci NOT NULL,
  82. `opis` varchar(200) collate utf8_polish_ci DEFAULT NULL,
  83. PRIMARY KEY (`id_wydzialu`),
  84. UNIQUE KEY `id_wydzialu` (`id_wydzialu`)
  85. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=5 ;
  86.  
  87. --
  88. -- Zrzut danych tabeli `wydzialy`
  89. --
  90.  
  91. INSERT INTO `wydzialy` (`id_wydzialu`, `nazwa_wydzialu`, `nazwa_symbolu`, `opis`) VALUES
  92. (1, 'Kierownictwo', 'SKJ', 'I Zastępca'),
  93. (2, 'Kierownictwo', 'SKC', 'Zastępca - logistyka');
  94.  
  95. --
  96. -- Ograniczenia dla zrzutów tabel
  97. --
  98.  
  99. --
  100. -- Ograniczenia dla tabeli `uzytkownicy`
  101. --
  102. ALTER TABLE `uzytkownicy`
  103. ADD CONSTRAINT `uzytkownicy_ibfk_1` FOREIGN KEY (`id_stanowiska`) REFERENCES `stanowisko` (`id_stanowiska`),
  104. ADD CONSTRAINT `uzytkownicy_ibfk_2` FOREIGN KEY (`id_wydzialu`) REFERENCES `wydzialy` (`id_wydzialu`);


Cytat(greycoffey @ 30.04.2012, 11:44:58 ) *
Jak zwykle - problem z bazą danych: SRUFP (Standardowa Rada Użyszkodnika Forum Php.pl) #1: Wyświetl błąd mysql. Zamiast
Kod
mysql_query($query);
daj
Kod
mysql_query($query) or die(mysql_error());
.


Wstawiłem nie otrzymuje, żadnego błędu z bazy
RAV_8
Spróbuj tak jak napisał Prz3kus - usuń średnik przy
  1. c.id_wydzialu;
MatBlo
Próbowałem i mam syntax error, dlatego też zapytałem się jak mam to inaczej zapisać.
prz3kus
Zmień to:
  1. $query = "SELECT imie, nazwisko, nazwa, nazwa_wydzialu, nazwa_symbolu FROM stanowisko a INNER JOIN uzytkownicy b ON a.id_stanowiska = b.id_stanowiska INNER JOIN wydzialy c ON b.id_wydzialu = c.id_wydzialu;";
  2. if ( isset( $_GET['id_uzytkownika'] )) {
  3. $query.= " WHERE id_uzytkownika = " . $_GET['id_uzytkownika'];
  4. }


na coś w tym stylu(szybko pisze więc mogą być literówki)- mało czasu smile.gif :
  1. if ( isset( $_GET['id_uzytkownika'] ))
  2. $query = "SELECT imie, nazwisko, nazwa, nazwa_wydzialu, nazwa_symbolu FROM stanowisko a INNER JOIN uzytkownicy b ON a.id_stanowiska = b.id_stanowiska INNER JOIN wydzialy c ON b.id_wydzialu = c.id_wydzialu WHERE b.id_uzytkownika =".$_GET['id_uzytkownika'].";";
  3. else
  4. $query = "SELECT imie, nazwisko, nazwa, nazwa_wydzialu, nazwa_symbolu FROM stanowisko a INNER JOIN uzytkownicy b ON a.id_stanowiska = b.id_stanowiska INNER JOIN wydzialy c ON b.id_wydzialu = c.id_wydzialu;";
  5.  
MatBlo
Niestety jest to samo.
prz3kus
czyli zapewne wartość if ( isset( $_GET['id_uzytkownika'] )) nie istnieje i wchodzi w else
MatBlo
Temat do zamknięcia, zrobiłem kilka błędów:

  1. echo"<td><a href=" . 'edytuj_osobe.php?id='. $row['id_uzytkownika'] . ">Wykonaj</td>";

powinno być
  1. echo"<td><a href=" . 'edytuj_osobe.php?id_uzytkownika='. $row['id_uzytkownika'] . ">Wykonaj</td>";


  1. <?php echo"<form id=\"formularz\" method=\"post\" action=" . $_SERVER['PHP_SELF'] . '?id=' . $_GET['id_uzytkownika'] . ">"; ?>

powinno być
  1. <?php echo"<form id=\"formularz\" method=\"post\" action=" . $_SERVER['PHP_SELF'] . '?id_uzytkownika=' . $_GET['id_uzytkownika'] . ">"; ?>


  1. if ($row != NULL) {
  2. $imie = $row['imie'];
  3. $nazwisko = $row['nazwisko'];
  4. }

powinno być
  1. if ($row != NULL) {
  2. $imie = $row['imie'];
  3. $nazwisko = $row['nazwisko'];
  4. $id_stanowiska = $row['id_stanowiska'];
  5. $id_wydzialu = $row['id_wydzialu'];
  6. }
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.