Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Problem z działaniem funkcji
Forum PHP.pl > Forum > Przedszkole
Jaro82
Mam taką funcyjke:
  1. <?php
  2. function sprawdz_kto_to()
  3. //sprawdza typ uzytownika według instniejącego loginu
  4. //przekierowywuje na odpowiednie strony w zależności od typ`u
  5. {
  6.   $lacz = lacz_bd();
  7.   if($wynik = $lacz->query("select typ from uzytkownik
  8.                                where login = '$login'")){
  9.      $wiersz = $wynik->fetch_array();
  10.      $typ = $wiersz[0];
  11.      $wynik->close();
  12.        if ($typ=="pacjent" || !$typ) echo "<TD class=menu width=132 align=center><a href=\"rejestracja.php\"><b>REJESTRACJA</b></a>";
  13.        else echo "<TD class=menu width=132 align=center><b>REJESTRACJA</b>";
  14.        ?><td>
  15.        <td class=menu width=131 align=center><?php
  16.        if ($typ=="admin") echo "&nbsp; <a href=\"admin.php\"><b>ADMINISTRATOR</b></a>";
  17.        if ($typ=="pacjent") echo "<a href=\"pacjent.php\"><b>PACJENT</b></a>";
  18.        if ($typ=="lekarz") echo "<a href=\"lekarz.php\"><b>LEKARZ</b></a>";
  19.        if ($typ=="gabinet") echo "<a href=\"gabinet.php\"><b>GABINET</b></a>";
  20.        if (!$typ) echo "<a href=\"logowanie.php\"><b>UŻYTKOWNICY</b></a>";
  21.     }else
  22.        throw new Exception('Użytkownik o podanym loginie nie istnieje w systenie.');
  23.  
  24.        ?></td><?php
  25.  
  26. }
  27. ?>
  28.   <html>
  29.   <head>
  30.     <title><?php echo $tytul;?></title>
  31.     <link rel="stylesheet" type="text/css" href="style.css">
  32.     <META HTTP-EQUIV="Expires" CONTENT="0">
  33.     <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  34.     <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
  35.   </head>
  36.   <body bgcolor="#FFB1F3"><center>
  37.   <table width=673 border=0 cellpading=0 cellspacing=0>
  38. <tr height=24>
  39. <td class=menu width=130 align=center>&nbsp;<a href="ramka.html"><b>STRONA GŁÓWNA</b></a></td>
  40. <?php
  41. sprawdz_kto_to();
  42. ?>
  43. <td class=menu width=133 align=center><a href="kontakt.php"><b>POMOC</b></a></td>
  44. </tr>
  45. <tr>
  46. <td colspan=7><hr color = green></td>
  47. </tr>
  48. </table>
  49. <br>
.Pytanie me takie co należy pozmienić, by następowało przekierowanie na poszczególne strony.
Z góry dzięki za fatyge.Prosze o wyrozumiałość me umiejętności w programowaniu są znikome.Pozdrawiam
Foxx
Poczytaj o header" title="Zobacz w manualu php" target="_manual
Powinieneś zrobić coś w stylu
  1. <?php
  2.  
  3. if ($typ=="admin") header("Location: pacjent.php");
  4.  
  5. ?>


W tym skrypcie, jeżeli będzie służył tylko do przekierowania, nie wyświetlaj tego całego HTML'a, i tak go nikt nie zobaczy.
Poza tym, żeby header() zadziałało nie możesz wysłać nic do przeglądarki (chyba że będziesz buforował, ale tu nie ma takiej potrzeby).
siemakuba
raczej:
  1. <?php
  2. if ($typ=="admin") 
  3. {
  4. header("Location: pacjent.php");
  5. }
  6. ?>

w innym wypadku kod po headerze zostanie wykonany i moze to sie wiazac z kolejnymi problemami.
Jaro82
Dokładniej chodzi mi o takie przekierowanie
mam takie menu:
MENU
Chodzi mi o to by po zalogowaniu w menu między REJESTRACJA a UżYTKOWNICY
pojawił sie odpowiedni napis który informuje kim jestem na stronie.Czy to pacjent czy lekarz czy admin.
Z góry dzięki za wszelaką fatyge. Proszę o wyrozumiałość
Jednakże jeśli ktos ma ciekawszy pomysł na takowe rozwiązanie chętnie poczytam.Pozdrawiam
Foxx
Po pierwsze, Twoja strona mi się nie otwiera.
Po drugie, wydaje mi się, że chcesz zrobić dwie rzeczy naraz.
Czy te strony dla różnych ludzi różnią się tylko tym dodatkowym wpisem w menu? Jeżeli tak to nie musisz robić przekierowania, w końcu po to jest php.
Możesz umieścić np. w zmiennej sesyjnej dane o tym kto jest zalogowany (pacjent, lekarz...) i w menu umieścić warunek mniej więcej taki jak zrobiłeś:
  1. <?php
  2.  
  3. if($_SESSION['status'] == "lekarz") {
  4. echo "LEKARZ";
  5. } elseif...
  6.  
  7. ?>


A jeżeli koniecznie chcesz przekierować to musisz zrobić skrypt, w którym umieścisz tylko header" title="Zobacz w manualu php" target="_manual w zależności od jakichśtam warunków.

A teraz zrobiłeś tyle, że jeżeli zalogujesz się jako lekarz to w menu wyświetli ci link LEKARZ, który będzie prowadził do strony dla lekarza worriedsmiley.gif
Osoba po zalogowaniu powinna się od razu znaleźć na stronie dla siebie.
Jaro82
Sorki ale działam na neo i nie mam stałego IP rozłączyło mnie i IP sie zmieniło.
tera działaMENU
Zamierzam dla każdego użytkownika stworzyć inną podstrone.Czyli wnioskuje, że jedynym możliwym rozwiązaniem będzie zastosowanie funkcji header.
Jeśli sie mylę proszę o ewentualne sprostowanie. Z góry dzięki. Pozdro
Foxx
Jeżeli już kogoś zalogujesz to tak, możesz użyć header tak jak napisał ~siemakuba.
Jeżeli menu ładujesz całe do każdego z plików to możesz tam po prostu na sztywno wpisać kto jest zalogowany. Ale ładnie byłoby zrobić np. osobną funkcję generującą menu tak zeby nie powtarzać tego samego kodu 3 razy. Wtedy musiałbyś użyć if w celu wyświetlenia w tym menu kto jest zalogowany.
Jaro82
Dzięki Foxx za pomoc i niezbędne wskazówki cool.gif .
Czyli reasumując wykunuję funkcje, która tworzy dynamiczne menu dla każdego użytkownika w zależności od typu zalogowania.
Foxx
Właśnie tak.
Jaro82
Wraz z kreowaniem tej funkcji nastał problem z wykrywaniem typu i przekazaniem wartości zmiennej typ (PRzynajmniej tak mi sie wydaje)W miejscu wstawienia odpowiedniej nazwy użytkownika wyskoczył WARNING

plik funkcje_prawid_dane.php ma postać:
  1. <?php
  2.  
  3. function wypelniony($zmienne_formularza)
  4. {
  5.   // sprawdzenie, czy każda zmienna posiada wartość
  6.   foreach ($zmienne_formularza as $klucz => $wartosc)
  7.   {
  8.      if (!isset($klucz) || ($wartosc == '')) 
  9.         return false;
  10.   } 
  11.   return true;
  12. }
  13.  
  14. function prawidlowy_email($adres)
  15. {
  16.   // sprawdzenie prawidłowości adresu  poczty elektronicznej
  17.   if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $adres))
  18.     return true;
  19.   else 
  20.     return false;
  21. }
  22.  
  23. ?>
Natomiast moja stworzona funkcja ma taką postać:
  1. <?php function sprawdz_kto_to()
  2. //sprawdza typ uzytownika według instniejącego loginu
  3. //przekierowywuje na odpowiednie strony w zależności od typ`u
  4. {
  5.   $lacz = lacz_bd();
  6.   if($wynik = $lacz->query("select typ from uzytkownik
  7.                                where login = '$login'")){
  8.      $wiersz = $wynik->fetch_array();
  9.      $ctyp = $wiersz[0];
  10.      $wynik->close();?>
  11.        <td class=menu width=131 align=center><?php
  12.        if (!$typ)
  13.        {
  14.           echo "<b>UŻYTKOWNICY</b>";
  15.           header("Location: logowanie.php");
  16.           exit;
  17.        }
  18.        if ($typ=="admin")
  19.        {
  20.           echo "<b>ADMINISTRATOR</b>";
  21.           header("Location: aministrator.php");
  22.           exit;
  23.        }
  24.        if ($typ=="lekarz")
  25.        {
  26.           echo "<b>LEKARZ</b>";
  27.           header("Location: lekarz.php");
  28.           exit;
  29.        }
  30.        if ($typ=="gabinet")
  31.        {
  32.           echo "<b>GABINET</b>";
  33.           header("Location: gabinet.php");
  34.           exit;
  35.        }
  36.     }else
  37.        throw new Exception('Użytkownik o podanym loginie nie istnieje w systenie.');
  38.  
  39.        ?></td><?php
  40.  
  41. }
  42. ?>
A linia 182 ma postać
  1. <?php
  2. header("Location: logowanie.php");
  3. ?>

Zawarta jest w mojej funkcji.Proszę o pomoc.
Foxx
Jeżeli w skrypcie chcesz użyć header(), nie możesz wysłać nic do przeglądarki. To znaczy żadnego echo, print ani html'a. A u Ciebie w funkcji sprawdz_kto_to w linii 11 jest <TD>, w l.39 podobnie, przed wywołaniem każdego header() masz dodatkowo echo. Naprawdę nie musisz nic wyświetlać na stronie jeżeli zaraz zrobisz z niej przekierowanie. Jeżeli koniecznie chcesz, poczytaj o ob_start" title="Zobacz w manualu php" target="_manual i ob_end_flush" title="Zobacz w manualu php" target="_manual. Dzięki nim będziesz mógł to zrobić.

Poza tym robisz coś takiego:
  1. <?php
  2.  
  3. $ctyp = $wiersz[0];
  4.  
  5. ?>

Ale w if'ie potem sprawdzasz zmienną $typ.
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.