Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]PHP i MySQL problemy z zapytaniami.
Forum PHP.pl > Forum > Przedszkole
Pinkyoov
Witam, otoz tworze swoja witryne gdzie bedzie mozliwosc dodawania, edycji oraz usuwania pewnych rekordow, dodawanie dziala mi poprawnie, problem jednak jest z edycja i kasowaniem, oto kod:
  1. <?
  2. mysql_connect ("localhost", "root", "haslo") or
  3. die ("nie mozna polaczyc sie z mysql");
  4. mysql_select_db ("szpital") or
  5. die ("nie mozna polaczyc sie z mysql");
  6.  
  7.  
  8. if ($_POST['co'] == 'popraw') {
  9. if ($_POST['imie'] && $_POST['nazwisko'] && $_POST['pesel'] && $_POST['miejscowosc']) {
  10. $query = "UPDATE pacjent SET imie='".$_POST['imie']."', nazwisko ='".$_POST['nazwisko']."',";
  11. $query.= "pesel='".$_POST['pesel']."', miejscowosc ='".$_POST['miejscowosc']."',";
  12. $query.= "data_rec ='".$_POST['data_rec']."', recepta ='".$_POST['recepta']."',";
  13. $query.= "leczenie ='".$_POST['leczenie']."' WHERE pacjentid='". $_POST['pacjentid']."';";
  14. printf("update: %d\n", mysql_affected_rows());
  15. }
  16. }
  17. elseif ($_GET['co'] == 'edycja') {
  18. $query = "SELECT * FROM pacjent WHERE pacjentid='".$_GET['pacjentid']."';" ;
  19. printf("update: %d\n", mysql_affected_rows());
  20. $wynik = mysql_query($query);
  21. $rekord = mysql_fetch_assoc($wynik);
  22. $pacjentid = $rekord['pacjentid']; $imie=$rekord['imie']; $nazwisko=$rekord['nazwisko']; $pesel=$rekord['pesel'];
  23. $pacjentid .= $miejscowosc=$rekord['miejscowosc'];$data_rec=$rekord['data_rec'];$recepta=$rekord['recepta'];
  24. $pacjentid .= $leczenie=$rekord['leczenie'];
  25. print '<form METHOD="POST">Poprawa danych:';
  26. print '<input type="hidden" name="co" VALUE="popraw">';
  27. print '<input type="hidden" name="pacjentid" VALUE="'.$pacjentid.'">';
  28. print '<table>';
  29. print '<tr><td>Imię:</td><td><input type="text" name="imie" VALUE="'.$imie.'"></td></tr>';
  30. print '<tr><td>Nazwisko:</td><td><input type="text" name="nazwisko" VALUE="'.$nazwisko.'"></td></tr>';
  31. print '<tr><td>Pesel:</td><td><input type="text" name="pesel" VALUE="'.$pesel.'"></td></tr>';
  32. print '<tr><td>Miejscowość:</td><td><input type="text" name="miejscowosc" VALUE="'.$miejscowosc.'"></td></tr>';
  33. print '<tr><td>Data recepty:</td><td><input type="date" name="data_rec" VALUE="'.$data_rec.'"></td></tr>';
  34. print '<tr><td>Recepta:</td><td><input type="text" name="recepta" VALUE="'.$recepta.'"></td></tr>';
  35. print '<tr><td>Leczenie:</td><td><input type="text" name="leczenie" VALUE="'.$leczenie.'"></td></tr>';
  36. print '</table><input type="submit" VALUE="popraw"></form>';
  37.  
  38.  
  39. } elseif ($_GET['co']=='skasuj') {
  40. $wynik = mysql_query
  41. ("DELETE FROM pacjent WHERE pacjentid= '".$_GET['pacjentid']."';");
  42. printf ("Zaktualizowanych rekordów: %d\n", mysql_affected_rows());
  43. }
  44. $wynik = mysql_query ("SELECT * FROM pacjent;") or
  45. die ("blad w pytaniu");
  46. print "<table cellpadding=5 border=1>";
  47. print "<tr><td><b>Imię</b></td>";
  48. print "<td><b>Nazwisko</b></td>";
  49. print "<td><b>Pesel</b></td>";
  50. print "<td><b>Miejscowość</b></td>";
  51. print "<td><b>Data recepty</b></td>";
  52. print "<td><b>Recepta</b></td>";
  53. print "<td><b>Leczenie</b></td></tr>\n";
  54. while ($rekord = mysql_fetch_assoc ($wynik)){
  55. $pacjentid=$rekord['pacjentid'];
  56. $imie =$rekord['imie'];
  57. $nazwisko= $rekord['nazwisko'];
  58. $pesel= $rekord['pesel'];
  59. $miejscowosc= $rekord['miejscowosc'];
  60. $data_rec= $rekord['data_rec'];
  61. $recepta= $rekord['recepta'];
  62. $leczenie= $rekord['leczenie'];
  63.  
  64. print "<tr><td>$imie</td><td>$nazwisko</td><td>$pesel</td><td>$miejscowosc</td><td>$data_rec</td><td>$recepta</td><td>$leczenie</td><td>";
  65. print "<a href=\"wysw_pacjent.php?co=skasuj&pacjentid='.$pacjentid.'\">skasuj</a></td><td>\n";
  66. print "<a href=\"wysw_pacjent.php?co=edycja&pacjentid='.$pacjentid.'\">edycja</a></td>\n";
  67.  
  68. }
  69. ?>




a oto baza pacjent:

Kod
CREATE TABLE `pacjent` (
`pacjentid` int unsigned NOT NULL AUTO_INCREMENT,
`haslo` char(50),
`nazwisko` char(50),
`pesel` int(20),
`miejscowosc` char(100),
`data_rec` date,
`recepta` char(100),
`leczenie` char(250),
PRIMARY KEY (`pacjentid`)
);



bylbym bardzo wdzieczny jakby ktos mi pokazal gdzie co zrobilem zle i jakos nakierowal, jest mi to bardzo potrzebne, z gory dziekuje!
CuteOne
zamiast
"<a href=\"wysw_pacjent.php?co=skasuj&pacjentid='.$pacjentid.'\">skasuj</a></td><td>\n";
wstaw
'<a href="wysw_pacjent.php?co=skasuj&pacjentid='.$pacjentid.'">skasuj</a></td><td><br />';

ps. zamiast or die("nlad w pytaniu") używaj or die(mysql_error())
mastermindssj2
mozesz powiedziec co zwraca mysql_error() ?
mastermindssj2
Spróbuj może pesel wstawić bez pojedynczych cudzysłowów ' bo widze że pole to jest typu int w Twojej bazie i upewnij się czy masz uprawnienia do dokonywania poleceń typu update w bazie na której pracujesz
jaslanin
1. Jeżeli aktualny kod jakiego używasz to ten w pierwszym poście (z wprowadzonymi w między czasie poprawkami), to:

  1. print "<a href=\"wysw_pacjent.php?co=skasuj&pacjentid='.$pacjentid.'\">skasuj</a></td><td>\n";
  2. print "<a href=\"wysw_pacjent.php?co=edycja&pacjentid='.$pacjentid.'\">edycja</a></td>\n";


powinno być:

  1. print "<a href=\"wysw_pacjent.php?co=skasuj&pacjentid=$pacjentid\">skasuj</a></td><td>\n";
  2. print "<a href=\"wysw_pacjent.php?co=edycja&pacjentid=$pacjentid\">edycja</a></td>\n";



Formularz z kolei powinien przesyłać query string:

  1. print '<form METHOD="POST" action="?co=popraw">Poprawa danych:';


trzeba było też wywalić :

  1. $pacjentid .= $miejscowosc = $rekord['miejscowosc'];


w bazie danych pacjentid jest liczbą wiec mysql musi to samo otrzymać, a nie zlepek jakichś informacji.

w bazie danych nie ma kolumny imie, a w zapytaniach jej uzywasz więc trzeba ją stworzyć w bazie danych

zapisywanie peselu jako int to zly pomysl bo co sie wtedy stanie z peselami np. urodzonych w 2001 dzieci: 01123199999, w bazie zostaną zapisane jako: 1123199999, imo lepiej zapisywac pesel jako string

Podsumowywując:

kod jaki zrobiłem:

  1. <?
  2.  
  3. error_reporting(E_ALL ^ E_NOTICE);
  4.  
  5. mysql_connect("localhost", "root", "") or
  6. die("nie mozna polaczyc sie z mysql");
  7. mysql_select_db("test_szpital") or
  8. die("nie mozna polaczyc sie z mysql");
  9.  
  10.  
  11. if ($_POST['co'] == 'popraw') {
  12.  
  13. if ($_POST['imie'] && $_POST['nazwisko'] && $_POST['pesel'] && $_POST['miejscowosc']) {
  14.  
  15. $query = "UPDATE pacjent SET imie='" . $_POST['imie'] . "', nazwisko ='" . $_POST['nazwisko'] . "',";
  16. $query.= "pesel='" . $_POST['pesel'] . "', miejscowosc ='" . $_POST['miejscowosc'] . "',";
  17. $query.= "data_rec ='" . $_POST['data_rec'] . "', recepta ='" . $_POST['recepta'] . "',";
  18. $query.= "leczenie ='" . $_POST['leczenie'] . "' WHERE pacjentid='" . $_POST['pacjentid'] . "';";
  19.  
  20. mysql_query($query);
  21.  
  22. printf("update: %d\n", mysql_affected_rows());
  23. }
  24. } elseif ($_GET['co'] == 'edycja') {
  25. $query = "SELECT * FROM pacjent WHERE pacjentid='" . $_GET['pacjentid'] . "';";
  26. printf("update: %d\n", mysql_affected_rows());
  27. $wynik = mysql_query($query);
  28. $rekord = mysql_fetch_assoc($wynik);
  29. $pacjentid = $rekord['pacjentid'];
  30. $imie = $rekord['imie'];
  31. $nazwisko = $rekord['nazwisko'];
  32. $pesel = $rekord['pesel'];
  33. $miejscowosc = $rekord['miejscowosc'];
  34. $data_rec = $rekord['data_rec'];
  35. $recepta = $rekord['recepta'];
  36. $leczenie = $rekord['leczenie'];
  37. print '<form METHOD="POST" action="?co=popraw">Poprawa danych:';
  38. print '<input type="hidden" name="co" VALUE="popraw">';
  39. print '<input type="hidden" name="pacjentid" VALUE="' . $pacjentid . '">';
  40. print '<table>';
  41. print '<tr><td>Imię:</td><td><input type="text" name="imie" VALUE="' . $imie . '"></td></tr>';
  42. print '<tr><td>Nazwisko:</td><td><input type="text" name="nazwisko" VALUE="' . $nazwisko . '"></td></tr>';
  43. print '<tr><td>Pesel:</td><td><input type="text" name="pesel" VALUE="' . $pesel . '"></td></tr>';
  44. print '<tr><td>Miejscowość:</td><td><input type="text" name="miejscowosc" VALUE="' . $miejscowosc . '"></td></tr>';
  45. print '<tr><td>Data recepty:</td><td><input type="date" name="data_rec" VALUE="' . $data_rec . '"></td></tr>';
  46. print '<tr><td>Recepta:</td><td><input type="text" name="recepta" VALUE="' . $recepta . '"></td></tr>';
  47. print '<tr><td>Leczenie:</td><td><input type="text" name="leczenie" VALUE="' . $leczenie . '"></td></tr>';
  48. print '</table><input type="submit" VALUE="popraw"></form>';
  49. } elseif ($_GET['co'] == 'skasuj') {
  50. $wynik = mysql_query
  51. ("DELETE FROM pacjent WHERE pacjentid= '" . $_GET['pacjentid'] . "';");
  52. printf("Zaktualizowanych rekordów: %d\n", mysql_affected_rows());
  53. }
  54. $wynik = mysql_query("SELECT * FROM pacjent;") or
  55. die("blad w pytaniu");
  56. print "<table cellpadding=5 border=1>";
  57. print "<tr><td><b>Imię</b></td>";
  58. print "<td><b>Nazwisko</b></td>";
  59. print "<td><b>Pesel</b></td>";
  60. print "<td><b>Miejscowość</b></td>";
  61. print "<td><b>Data recepty</b></td>";
  62. print "<td><b>Recepta</b></td>";
  63. print "<td><b>Leczenie</b></td></tr>\n";
  64. while ($rekord = mysql_fetch_assoc($wynik)) {
  65. $pacjentid = $rekord['pacjentid'];
  66. $imie = $rekord['imie'];
  67. $nazwisko = $rekord['nazwisko'];
  68. $pesel = $rekord['pesel'];
  69. $miejscowosc = $rekord['miejscowosc'];
  70. $data_rec = $rekord['data_rec'];
  71. $recepta = $rekord['recepta'];
  72. $leczenie = $rekord['leczenie'];
  73.  
  74. print "<tr><td>$imie</td><td>$nazwisko</td><td>$pesel</td><td>$miejscowosc</td><td>$data_rec</td><td>$recepta</td><td>$leczenie</td><td>";
  75. print "<a href=\"wysw_pacjent.php?co=skasuj&pacjentid=$pacjentid\">skasuj</a></td><td>\n";
  76. print "<a href=\"wysw_pacjent.php?co=edycja&pacjentid=$pacjentid\">edycja</a></td>\n";
  77. }
  78. ?>


Baza danych

Kod
CREATE TABLE IF NOT EXISTS `pacjent` (
  `pacjentid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `haslo` char(50) DEFAULT NULL,
  `imie` varchar(50) NOT NULL,
  `nazwisko` char(50) DEFAULT NULL,
  `pesel` varchar(11) DEFAULT NULL,
  `miejscowosc` char(100) DEFAULT NULL,
  `data_rec` date DEFAULT NULL,
  `recepta` char(100) DEFAULT NULL,
  `leczenie` char(250) DEFAULT NULL,
  PRIMARY KEY (`pacjentid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3;

--
-- Zrzut danych tabeli `pacjent`
--

INSERT INTO `pacjent` (`pacjentid`, `haslo`, `imie`, `nazwisko`, `pesel`, `miejscowosc`, `data_rec`, `recepta`, `leczenie`) VALUES
(2, 'asd1234', 'jacek', 'nowak', '01123199999', 'Jaslo', '2012-03-31', 'poglupieli z cenami lekow', 'drogie panie, drogie');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


Uwaga:

Kod ten nie jest zabezpieczony przed atakami typu SQL INJECTION, co może doprowadzić do kradzieży danych przechowywanych w bazie danych (jeżeli skrypt będzie publicznie dostępny i jakiś haker się zainteresuje). Więc radzę zapoznać się z bezpieczeństwem aplikacji PHP/MYSQL
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.