Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]$_POST+pdf
Forum PHP.pl > Forum > Przedszkole
jacusek
Mam taki skrypt. Jest to wyszukiwarka badań wpisanych przez lekarza do tabeli w MySQL. Generalnie wyszukiwarka działa bez większych zarzutów. Teraz mam problem co zrobić, żeby dawne badanie dało się wydrukować ponownie. Mam plik który wykonuje PDF, ale też wstawiłem do aktualnego pliku dane dotyczące geneerowania pdf. Niestety ta funkcja nie działa. Tak jakby zdefiniowane poniżej zmienne z końca pliku nie mogły się wykonać w częsci drukuj. Po wciśnięciu drukuj nie pokazuje mi żadnego błędu po prostu wraca do pierwotnego okna przeglądarki. Nie bardzo wiem jak to dalej ugryźć?
  1. <?php
  2. $file = "wyszukiwarka.php";
  3. include('connect2.php');
  4.  
  5. switch($_POST["action"]){
  6. case "druk":
  7. define('FPDF_FONTPATH','font/');
  8. require('fpdf.php');
  9. $pdf=new FPDF();
  10. $pdf->Open();
  11. $pdf->AddPage();
  12. $pdf->AddFont('arialpl','','arialpl.php');
  13. $pdf->SetFont('arialpl','',12);
  14. $imie=$pdf->Text(60,45, $imie);
  15. $nazwisko=$pdf->Text(90,45, $nazwisko);
  16. $wiek=$pdf->Text(160,45, $rok_ur);
  17. $sql= 'select bad_usg from usg where id_usg='.$id_usg;
  18. $rez= mysqli_query($mysqli, $sql);
  19. while($res = mysqli_fetch_array($rez,MYSQLI_ASSOC)){
  20. $usg=$res['bad_usg'];
  21. }
  22. $bad=$pdf->Text(80,64, $usg);
  23. $pdf->SetXY(4,75);
  24. $opis=$pdf->multicell(0,4, $opis,0, 'J',0);
  25. $pdf->SetCompression(true);
  26. $pdf->SetDisplayMode(100);
  27. $pdf->SetMargins(20, 20 , 20);
  28. $pdf->Output();
  29. break;
  30. default:
  31. echo "<h1><center>Znajdź badanie</center></h1>\n";
  32. $blok = "
  33. <center><form method=\"POST\" form action=\"".$file."\">
  34. <p><strong>ROK URODZENIA</strong><br/>
  35. <input type=\"text\" name=\"rok_ur\" size=\"4\" maxlength=\"4\"><br\>
  36. <p><strong>Nazwisko</strong><br/>
  37. <input type=\"text\" name=\"nazwisko\" size=\"30\" maxlength=\"30\"><br\>
  38. <p><strong>Imię</strong><br/>
  39. <input type=\"text\" name=\"imie\" size=\"30\" maxlength=\"30\"></p>
  40. <p><input type=\"submit\" name=\"submit\" value=\"Szukaj\"></p></center>";
  41. echo $blok;
  42. $sql = 'select id, id_usg, nazwisko, imie, rok_ur, opis, termin from usg_opis where
  43. nazwisko =\''.$_POST['nazwisko'].'\' and imie =\''.$_POST['imie'].'\'or rok_ur=\''.$_POST['rok_ur'].'\'
  44. order by nazwisko limit 30';
  45. $rez= mysqli_query($mysqli, $sql);
  46. echo "<TABLE CELLPADDING=5 BORDER=1>";
  47. echo "<center><TR>
  48. <TD><B>NAZWISKO</B></TD>
  49. <TD><B>IMIE</B></TD>
  50. <TD><B>ROK_URODZENIA</B></TD>
  51. <TD><B>TERMIN</B></TD>
  52. <TD><B>OPIS</B></TD>
  53. <TD><B>DRUKUJ</B></TD>
  54. </TR>";
  55. while ($rekord = mysqli_fetch_array($rez, MYSQLI_ASSOC)) {
  56. $id = $rekord['id'];
  57. $id_usg=$rekord['id_usg'];
  58. $nazwisko = $rekord['nazwisko'];
  59. $imie = $rekord['imie'];
  60. $rok_ur = $rekord['rok_ur'];
  61. $opis = $rekord['opis'];
  62. $termin = $rekord['termin'];
  63. echo "<TR>";
  64. echo "<TD>$nazwisko</TD><TD>$imie</TD><TD>$rok_ur</TD><TD>$termin</TD><TD>$opis</TD>";
  65. echo "<TD><A HREF=\"$file?action=druk\">Drukuj</A></TD>";
  66. echo "</TR>";
  67. echo "</center></TR>";
  68. }
  69. echo "</TABLE>";
  70. }
  71. ?>
mortus
Dwie rzeczy.
1. Masz
  1. switch($_POST["action"])
natomiast action przesyłasz metodą get (linia 65)
  1. echo "<TD><A HREF=\"$file?action=druk\">Drukuj</A></TD>";

2. Jak już będziesz w opcji (case) "druk", to skąd Twój skrypt ma wiedzieć, co to jest $imie, $nazwisko, $rok_ur, $opis czy $id_usg.
Otóż rozwiązać to można w taki sposób, że w odnośniku podajesz również id pacjenta, czyli w linii 65 powinieneś mieć:
  1. echo "<TD><A HREF=\"$file?action=druk&id_pacjenta=$id\">Drukuj</A></TD>";
Natomiast w switchu:
  1. case 'druk':
  2. $id = $_GET['id'];
  3. // pobieramy informacje o pacjencie
  4. // "SELECT * FROM usg_opis WHERE id=$id";
  5. // wyciągamy odpowiednie dane
  6. // $imie = $rekord['imie'];
  7. // przygotowujemy PDF-a i drukujemy
  8. break;
jacusek
Dzięki Mortus za uwagi, ale problem polega na tym, że nie mogę użyć $_GET, ponieważ opisy badań będą dużo za długie żeby przesłać je w linku. I właśnie jak to zrobić w $_POST. Tutaj leży cały mój problem. Co nie zmienia faktu że miałem błędy smile.gif.
mortus
Ale w linku przesyłasz tylko id tego konkretnego opisu, a dane wyciągasz z bazy danych dla tego konkretnego id opisu już w którymś case-ie. Jeżeli chcesz przesyłać za pomocą post, to musisz utworzyć formularz z polami ukrytymi, tyle że to byłoby bez sensu, bo przecież Ty na stronie nie wyświetlasz informacji o konkretnym pacjencie, tylko listę 30 ostatnich informacji. Pierwsze rozwiązanie to jedyne słuszne rozwiązanie.

Moim zdaniem takie dane należałoby pokazywać w dwóch formach. Pierwsza, to lista wszystkich opisów. Druga to odpowiednio sformatowany pojedynczy opis. Możliwość drukowania można podpiąć zarówno pod listę, jak i pod pojedynczy opis.
jacusek
No tak w sumie masz rację. Dzięki za pomoc. Teraz siedzę nad skryptem bo mam gdzieś jakiś głupi błąd.
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.