Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyszukiwarka + case
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam. Stworzyłem wyszukiwarkę z case'ami.
  1. <?php
  2. $file = "wyszukiwarka.php";
  3. include('cookie.php');
  4. include('connect2.php');
  5.  
  6. switch($_GET["action"]){
  7.  
  8.  
  9. case "popraw":
  10. $query = 'UPDATE usg_opis SET nazwisko=\''.$_POST['nazwisko'].'\', imie=\''.$_POST['imie'].'\',
  11. bad=\''.$_POST['bad'].'\', rok_ur=\''.$_POST['rok_ur'].'\',opis=\''.$_POST['opis'].'\',
  12. id_usg=\''.$_POST['bad'].'\', id_lek=\''.$_POST['lek'].'\'
  13. WHERE id_bad='.$_GET['id'];
  14. $result=mysqli_query($mysqli,$query);
  15. mysqli_close($mysqli);
  16. echo "<script>alert('Wyniki badań zostały poprawione');</script>";
  17. echo("<script>window.location.href = '$file';</script>");
  18. break;

ta część działa OK. To znaczy z default przenosi mi do case edit. Niestety następnie z edit nie działa mi case popraw i nie bardzo wiem dlaczego. Mam zrobiona gdzie indziej podobną przeglądarkę i tam nie mam takich problemów, choć jest tam użyta głównie $_GET. Tutaj muszę używać $_POST z prostej przyczyny - zmienna $opis może być stosunkowo długa i nie znieści się w linku.
  1. case "edit":
  2. // przygotowanie do poprawek
  3. $query1 = 'select id, id_lek, bad_usg, nazwisko, imie, rok_ur, opis, termin,nazwisko_imie,now from usg_opis join usg using (id_usg)
  4. join lekarze using (id_lek) where id='.(int)$_GET['id'];
  5. $result1 = mysqli_query($mysqli,$query1);
  6. $rekord = mysqli_fetch_array($result1,MYSQLI_ASSOC);
  7. $id=$rekord['id'];
  8. $mid3=$rekord['id_usg'];
  9. $nazwisko = $rekord['nazwisko'];
  10. $imie = $rekord['imie'];
  11. $rok_ur = $rekord['rok_ur'];
  12. $bad=$rekord['bad_usg'];
  13. $opis = $rekord['opis'];
  14. $termin = $rekord['termin'];
  15.  
  16. echo "<FORM METHOD=\"POST\"FORM ACTION=\".$file.\">Poprawa rekordu:";>Poprawa rekordu:";
  17. echo "<INPUT TYPE=\"hidden\" NAME=\"action\" VALUE=\"popraw\">";
  18. echo "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"'.$id.'\">";
  19. echo "<table><tr><td>Nazwisko:</td>
  20. <td><input type=\"text\" name=\"nazwisko\" VALUE=\"$nazwisko\"size=\"30\" maxlength=\"30\"></input></td></tr>
  21. <tr><td>Imie:</td>
  22. <td><input type=\"text\" name=\"imie\" VALUE=\"$imie\" size=\"30\" maxlength=\"30\"></input></td></tr>
  23. <TR><TD>Rok Urodzenia:</TD><TD><INPUT TYPE=\"text\"
  24. NAME=\"rok_ur\" VALUE=\"$rok_ur\"MAXLENGTH=\"20\"></TD></TR>
  25. <TR><TD>Badanie:</TD><TD>";
  26. echo "<select name=\"bad\">";
  27. echo "<option value =\"$mid\">----ponownie wskaż badanie------</option>";
  28. $sql2= "select id_usg, bad_usg from usg order by 2";
  29. $rez2= mysqli_query($mysqli, $sql2);
  30. while ($nowaTab=mysqli_fetch_array($rez2, MYSQLI_ASSOC))
  31. {
  32. $mid = intval($nowaTab['id_usg']);
  33. $badanie=$nowaTab['bad_usg'];
  34.  
  35. echo"<option value=\"".$mid."\">".$badanie."</option>";
  36. }
  37. echo "</select>";
  38. echo "</td><tr><tr><td>Lekarz wykonujący:</td><td>";
  39. echo "<select name=\"lek\">";
  40. echo "<option value =\"$mid2\">---przedstaw się ponownie---</option>";
  41. $sql3= "select id_lek, nazwisko_imie from lekarze order by 2";
  42. $rez3= mysqli_query($mysqli, $sql3);
  43. while ($nowaTab=mysqli_fetch_array($rez3, MYSQLI_ASSOC))
  44. {
  45. $mid2 = intval($nowaTab['id_lek']);
  46. $lek=$nowaTab['nazwisko_imie'];
  47. echo"<option value=\".$mid2.\">".$lek."</option>";
  48. }
  49. echo "</select>";
  50. echo "</TD></TR></TABLE>";
  51. echo "<p>Opis Badania<br/>
  52. <textarea name=\"opis\"cols=\"60\" rows=\"15\">$opis</textarea><br/>";
  53. echo "<INPUT TYPE=\"submit\" VALUE=\"POPRAW\"></FORM>";
  54. break;
  55.  
  56. case "druk":
  57. $id = $_GET['id'];
  58. $sql2 = 'select id, id_usg, nazwisko, imie, rok_ur, opis, termin from usg_opis where ID='.$id;
  59. $rez2= mysqli_query($mysqli, $sql2);
  60. while ($rekord = mysqli_fetch_array($rez2, MYSQLI_ASSOC)) {
  61. $id_usg=$rekord['id_usg'];
  62. $nazwisko = $rekord['nazwisko'];
  63. $imie = $rekord['imie'];
  64. $rok_ur = $rekord['rok_ur'];
  65. $opis = $rekord['opis'];
  66. $termin = $rekord['termin'];
  67. }
  68.  
  69. //kod generujący pdf
  70. //działa bez zarzutu
  71. break;

i na końcu kod default. Też nie ma problemu
  1. default:
  2. echo "<h1><center>Znajdz badanie</center></h1>\n";
  3. echo"<center><form method=\"POST\" form action=\"".$file."\">
  4. <p><strong>Nazwisko</strong><br/>
  5. <input type=\"text\" name=\"nazwisko\" size=\"30\" maxlength=\"30\"><br\>
  6. <p><strong>Imie</strong><br/>
  7. <input type=\"text\" name=\"imie\" size=\"30\" maxlength=\"30\"></p>";
  8. include ('badanie2.php');
  9. echo "<p><input type=\"submit\" name=\"submit\" value=\"Szukaj\"></p></center>";
  10. echo "<b><center>*!!!!!UWAGA!!!! EDYCJA WYNIKÓW BADAŃ JEST MOŻLIWA TYLKO W DNIU ICH WYKONANIA</center></b><br>";
  11. $sql = 'select id, id_usg, nazwisko, imie, rok_ur, opis, termin from usg_opis where
  12. nazwisko =\''.$_POST['nazwisko'].'\' and imie =\''.$_POST['imie'].'\'and id_usg='.$_POST['bad'].'
  13. order by nazwisko limit 30';
  14. $rez= mysqli_query($mysqli, $sql);
  15. echo "<center><TABLE CELLPADDING=5 BORDER=1>";
  16. echo "<center><TR>
  17. <TD><B>NAZWISKO</B></TD>
  18. <TD><B>IMIE</B></TD>
  19. <TD><B>ROK_UR</B></TD>
  20. <TD><B>TERMIN</B></TD>
  21. <TD><B>OPIS</B></TD>
  22. <TD><B>DRUKUJ</B></TD>
  23. <TD><B>EDYTUJ*</B></TD>
  24. </TR>";
  25.  
  26.  
  27. while ($rekord = mysqli_fetch_array($rez, MYSQLI_ASSOC)) {
  28. $id = $rekord['id'];
  29. $nazwisko = $rekord['nazwisko'];
  30. $imie = $rekord['imie'];
  31. $rok_ur = $rekord['rok_ur'];
  32. $opis = $rekord['opis'];
  33. $termin = $rekord['termin'];
  34. echo "<TR>";
  35. echo "<TD>$nazwisko</TD><TD>$imie</TD><TD>$rok_ur</TD><TD>$termin</TD><TD>$opis</TD>";
  36. echo "<TD><A HREF=\"$file?action=druk&id=$id\">Drukuj</A></TD>";
  37. if(date('Y-m-d')==date('Y-m-d', strtotime($termin)))
  38. {
  39. echo "<TD><A HREF=\"$file?action=edit&id=$id\">Edycja</TD>";
  40. }
  41. else {
  42. echo "<td>BRAK EDYCJI</a></td>";
  43. }
  44. echo "</TR>";
  45. echo "</center></TR>";
  46. }
  47. echo "</TABLE></center>";
  48. break;
  49. }
  50. ?>

i nie wiem gdzie leży błąd - czy w rozumowaniu czy w jakieś literówce której nie zauważyłem.
Z góry dzięki za pomoc
tehaha
nie zrozumiałem na czym polega Twój problem, ale widzę błąd w 16 linijce drugiego kodu,
  1. echo "<FORM METHOD=\"POST\"FORM ACTION=\".$file.\">Poprawa rekordu:";>Poprawa rekordu:";

chyba miało być
  1. echo "<FORM METHOD=\"POST\" ACTION=\".$file.\">Poprawa rekordu:";
jacusek
dzięki to rzeczywiście był głupi błąd. Ale niestety nadal nie zmienia to faktu, zee część case "popraw" nie działa
bastard13
Ale dokładnie co ci nie działa, bo nie za bardzo rozumiem. Wyrzuca ci jakiś błąd? Czegoś nie wyświetla? Wyświetla za dużo? W, którym miejscu wyskakuje ci ten błąd?
jacusek
problem polega na tym że nic nie wyświetla ale nie update'uje w bazie
tehaha
ok, a więc tak:
1. po co używasz mysqli zamiast mysql
2. zrób tak:
  1. echo $query;
  2. $result=mysql_query($mysqli,$query) or die(mysql_error());

sprawdź czy zapytanie jest takie jak trzeba poprzez echo $query; no i zobacz czy zapytanie zwraca błędy
jacusek
no właśnie o dziwo nic nie zwraca
sciana.gif
wygląda jakby błąd wynikał gdzieś w case'ie edytuj.
tehaha
a echo $query? dobre zapytanie jest budowane? na pewno jest id przesyłane?
jacusek
ok więc problemów jest kilka.
Po pierwsze nie przechodzi do case "popraw" nie wiedzieć czemu. Zmieniłem ręcznie link i okazuje się że w ogóle nie przechodzi do "popraw".
Następna sprawa to przesyłanie pustych stringów z case edytuj.
Rzeczywiście jest błąd w pytaniu w składni, nie zmienia to faktu, że pytanie byłoby ze stringami pokazane.
bastard13
Jak rozumiem to case 'edit' działa i skrypt sypie się jak chcesz przejść do 'popraw', tak?
Zamień w case edit:
  1. echo "<FORM METHOD=\"POST\" ACTION=\".$file.\">Poprawa rekordu:";

na:
  1. echo "<FORM METHOD=\"POST\" ACTION=\"$file?action=popraw&id=".$_GET['id']."\">Poprawa rekordu:";
tehaha
eh pytam się po raz trzeci... co zwraca echo $query; questionmark.gif a tak na marginesie jak coś masz w polu hidden i używasz metody POST, to się odwołujesz $_POST['id'] a nie $_GET['id']
jacusek
echo $query zwraca:
UPDATE usg_opis SET nazwisko='', imie='', rok_ur='', opis='', id_usg='', id_lek='' WHERE id=267
jak widać puste stringi. sad.gif
bastard13
To zrób tak jak ci napisałem, czyli zmień sobie atrybut action znacznika form w case 'edit', ponieważ nie wysyłasz tam posta.
Wtedy po naciśnięciu sumita skrypt wywoła odpowiednią akcję.
tehaha
no to wróć do formularza sprawdź czy jest on wypełniany danymi, generalnie widzę że pomieszałeś dane z tablic $_GET i $_POST, np. skoro po wysłaniu formularza wysyłasz dane metodą POST, to w case popraw będziesz odwoływał przez $_POST, np. $_POST['id'], a nie $_GET['id'], tak samo skoro przekazujesz action w polu hidden i wysyłasz przez POST, to też będziesz odbierał przez $_POST['action'] a nie $_GET['action'], przez $_GET odbierasz tylko to co jest wysłane za pomocą url.
jacusek
po usilnych staraniach i kilku błędach pomógł w końcu post bastard13.
czyli konieczność wstawienia
  1. echo "<FORM METHOD=\"POST\" ACTION=\"$file?action=popraw&id=".$_GET['id']."\">Poprawa rekordu:";


@tehaha
generalnie zamysł był taki, żeby używać $_GET tylko do ID i tylko id tak przesyłać, a pozostałe dane $_POST. Rzeczywiście troszkę namieszałem w tej kwestii i pewnie stąd tych kilka błędów.

temat myślę się wyczerpał.
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.