Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z if/elseif
Forum PHP.pl > Forum > Przedszkole
artur81
Witam, problem jak widać podstawowy ale już na tyle razy zmieniałem kod że zauważyłem iż wstawiam już te ify na "łapu capu", mogłby mi ktoś powiedzieć jak to poprawić, ja już nie mam koncepcji ( wyskakuje mi taki błąd Parse error: parse error, unexpected T_ELSE in c:\program files\easyphp1-7\www\praca\logowanie.php on line 52 ). chodzi o to żeby sprawdzić czy zmienna test jest ustawiona na "tak" czy na "nie", Jesli na tak to wyswietlic komunikat "Nie można 2 razy rozwiązywać testu" i zakonczyc skrypt a jesli na nie to ustwic ją na "tak" i przejsc dalej.
Kod:
  1. <?php
  2. include ('header.inc');
  3.  
  4. if (isset ($_POST['submit'])) {
  5. require_once('./polacz_z_baza.php');
  6.  
  7.  
  8. $wiadomosc = NULL;
  9.  
  10. if (empty($_POST['uzytkownik'])) {
  11. $u=false;
  12. $wiadomosc.='<p>Wprowadź nazwę użytkownika</p>';
  13. } else {
  14.  
  15.  $u=($_POST['uzytkownik']);
  16. }
  17.  
  18. if (empty($_POST['haslo'])) {
  19. $p=false;
  20. $wiadomosc.='<p>Wprowadź hasło</p>';
  21. } else {
  22. $p=($_POST['haslo']);
  23. }
  24.  
  25. if ($u && $p) {//Nazwa użytkownika i hasło są podane
  26.  
  27.  
  28.  
  29.  
  30. $zapytanie = &#092;"SELECT nr, uzytkownik, test FROM uzytkownicy WHERE uzytkownik = '$u' AND haslo = '$p'\";
  31. $wynik = mysql_query ($zapytanie);
  32. $wiersz = mysql_fetch_array ($wynik);
  33.  
  34. if ($wiersz) {
  35. //Rejestruję sesję i przekierowuję użytkownika do egzaminu.
  36.  
  37.  
  38. $_SESSION['uzytkownik'] =$wiersz[1];
  39. $_SESSION['nr'] =$wiersz[0];
  40. $test = $wiersz[3];
  41.  
  42.  
  43.  
  44.  if ($test = tak) {
  45.  print 'Nie można 2 razy rozwiązywać testu '; //jesli test juz byl rozwiazywany
  46.  } else {
  47.  //jesli nie byl rozwiazywany - poczatek
  48. /* po pierwszym zalogowaniu ustalam wartość pola logicznego w bazie na tak,
  49.  aby zapobiec ponownemu rozwiązywaniu testu przez danego użytkownika */
  50. mysql_query(&#092;"UPDATE uzytkownicy SET test = 'tak' WHERE uzytkownik = '$u'\");
  51. } else {
  52.  
  53. $wiadomosc ='<p>Błedny login lub hasło</p>';
  54. }
  55. } else {
  56. $wiadomosc.='<p>Spróbuj ponownie.</p>';
  57. }
  58. }
  59. if (isset($wiadomosc)) {
  60. echo '<font color =\"red\">', $wiadomosc , '</font>';
  61. }
  62.  
  63.  
  64. $_SESSION['data']= date('Y-m-j H:i:s');
  65.  //jesli nie byl - koniec
  66. ?>
hmmm
ladnie napisany kod - czytelnie :P
korzystasz czasem z jakiejs ksiazki? bo jedna mi nachodzi na mysl ...

na pierwszy rzut oka brakuje mi kilku domkniec nawiasow klamrowych.
nie wczytuje sie w kod, ale albo nie domknales else dla if ($test = tak) albo zamiast drugiego else powinienes wstawic elseif

posprawdzaj domkniecia.
ennics
  1. <?php
  2.  
  3. //...
  4. if ($test = &#092;"tak\") {
  5. //..
  6.  
  7. ?>

?
artur81
@ hmmm :A zgadza się, poczytna książeczka tongue.gif Swoją drogą podomykane mam wszystkie if'y, sprawdzalem, tak mysle ze jak nie dojde jak to zrobic to bede musial dac przed tą strona jeszcze jedną i tam sprawdzic ten warunek. Pod górę, ale trudno... tongue.gif
hmmm
to policz :P

chodzi mi o ta czesc kodu:
  1. <?php
  2.  
  3. if ($test = tak) {
  4.  print 'Nie można 2 razy rozwiązywać testu '; //jesli test juz byl rozwiazywany
  5.  } else {
  6.  //jesli nie byl rozwiazywany - poczatek
  7. /* po pierwszym zalogowaniu ustalam wartość pola logicznego w bazie na tak,
  8.  aby zapobiec ponownemu rozwiązywaniu testu przez danego użytkownika */
  9. mysql_query(&#092;"UPDATE uzytkownicy SET test = 'tak' WHERE uzytkownik = '$u'\");
  10. header (&#092;"Location: http://localhost/praca/egzamin.php\");
  11. } else {
  12.  
  13. ?>
po header nie domknales nawiasu ... ;)
artur81
Teraz to już przegiąłem na maxa ( zmiany w kodzie- sam się już pogubiłem), aha i tak nawiasem mówiąc mogłbu któryś z moderatorów usunąc tego posta questionmark.gif Proponuję taki układ: ja poczytam manuala, a Wy uznajcie że nie było tematu tongue.gif
Sorki za zajęcie czasu.
hmmm
wyrzuca blad, bo wychodzi cos takiego
  1. <?php
  2.  
  3. if (warunek) {
  4. //wykonaj1
  5. } else {
  6. //wykonaj2
  7. } else {
  8. //wykonaj3
  9. }
  10.  
  11. ?>
a przeciez else moze byc tylko jedno ...
wstaw domkniecie nawiasu i sprawdz, a jezeli tego domkniecia tam nie powinno byc, bo zamien srodkowe else na elseif
ennics
nie czytasz dokładnie postów,
primo
  1. <?php
  2.  
  3. if ($test = tak) {
  4.  
  5. ?>

tak nie może być !
'tak' jest ciągiem i musi być zapisany w podwójnym apostrofie ""
po drugie jak już pisał hmm
  1. <?php
  2.  
  3.  
  4.             } else {
  5.  
  6.                     $wiadomosc ='<p>Błedny login lub hasło</p>';
  7.                     }
  8.             mysql_close();
  9.             } else { // --------------- jeśli robisz else może być tylko ostatnie, jeśli
  10. // masz kilka tego typu warunków musi być else if
  11.                     $wiadomosc.='<p>Spróbuj ponownie.</p>';
  12.                     }
  13.             } // --------------- ta klamra jest nie potrzebna
  14.             if (isset($wiadomosc)) {
  15.  
  16. ?>
hmmm
@ennics co do primo to sie zgodze, a do drugiej uwagi tylko po czesci, bo tamta klamra, przy ktorej napisales komentarz w kodzie, ze jest niepotrzebna, w rzeczywistosci jest potrzebna ;)
ennics
muszę przyznać Ci rację, jakby to powiedzieć... przeliczyłem się :roll2:
artur81
Dziękuję jeszcze raz za pomoc , ale po moich przeróbkach kod już wcale nie przypomina tego który jest na górze, na dzisiaj to ja już podziękuję, jutro przeanalizuje kod jeszcze raz, uwzględnie Wasze poprawki i ewentualnie się odezwę ... Sorki za zajęcie czasu tongue.gif
Puciek
ennics: jeszcze jedno, niekoniecznie w podwojnym apostrofie, duzo lepiej umiescic w pojedynczym ' '
hmmm
twoj kod, z trzema poprawkami:
1. domkniecie nawiasu
2. == zamiast =
3. warunek powinien byc w apostrofie: 'tak'
nie wiem, czy gdzies jeszcze sa bledy :P

  1. <?php
  2. include ('header.inc');
  3.  
  4. if (isset ($_POST['submit'])) {
  5. require_once('./polacz_z_baza.php');
  6.  
  7.  
  8. $wiadomosc = NULL;
  9.  
  10. if (empty($_POST['uzytkownik'])) {
  11. $u=false;
  12. $wiadomosc.='<p>Wprowadź nazwę użytkownika</p>';
  13. } else {
  14.  
  15.  $u=($_POST['uzytkownik']);
  16. }
  17.  
  18. if (empty($_POST['haslo'])) {
  19. $p=false;
  20. $wiadomosc.='<p>Wprowadź hasło</p>';
  21. } else {
  22. $p=($_POST['haslo']);
  23. }
  24.  
  25. if ($u && $p) {//Nazwa użytkownika i hasło są podane
  26.  
  27.  
  28.  
  29.  
  30. $zapytanie = &#092;"SELECT nr, uzytkownik, test FROM uzytkownicy WHERE uzytkownik = '$u' AND haslo = '$p'\";
  31. $wynik = mysql_query ($zapytanie);
  32. $wiersz = mysql_fetch_array ($wynik);
  33.  
  34. if ($wiersz) {
  35. //Rejestruję sesję i przekierowuję użytkownika do egzaminu.
  36.  
  37.  
  38. $_SESSION['uzytkownik'] =$wiersz[1];
  39. $_SESSION['nr'] =$wiersz[0];
  40. $test = $wiersz[3];
  41.  
  42.  
  43.  
  44.  if ($test == 'tak') {
  45.  print 'Nie można 2 razy rozwiązywać testu '; //jesli test juz byl rozwiazywany
  46.  } else {
  47.  //jesli nie byl rozwiazywany - poczatek
  48. /* po pierwszym zalogowaniu ustalam wartość pola logicznego w bazie na tak,
  49.  aby zapobiec ponownemu rozwiązywaniu testu przez danego użytkownika */
  50. mysql_query(&#092;"UPDATE uzytkownicy SET test = 'tak' WHERE uzytkownik = '$u'\");
  51.  }
  52. } else {
  53.  
  54. $wiadomosc ='<p>Błedny login lub hasło</p>';
  55. }
  56. } else {
  57. $wiadomosc.='<p>Spróbuj ponownie.</p>';
  58. }
  59. }
  60. if (isset($wiadomosc)) {
  61. echo '<font color =\"red\">', $wiadomosc , '</font>';
  62. }
  63.  
  64.  
  65. $_SESSION['data']= date('Y-m-j H:i:s');
  66.  //jesli nie byl - koniec
  67. ?>
dr_bonzo
A teraz spojrzcie na ten sposob kodowania, widac gdzier sie ktore if i else zaczynaja i widac od razu bledy
  1. <?php
  2. include ('header.inc');
  3.  
  4. if (isset ($_POST['submit']))
  5. {
  6.     require_once('./polacz_z_baza.php');
  7.     $wiadomosc = NULL;
  8.  
  9.     if (empty($_POST['uzytkownik']))
  10.     {
  11.         $u=false;
  12.         $wiadomosc.='<p>Wprowadź nazwę użytkownika</p>';
  13.     }
  14.     else
  15.     {
  16.        $u=($_POST['uzytkownik']);
  17.     }
  18.  
  19.     if (empty($_POST['haslo']))
  20.     {
  21.         $p=false;
  22.         $wiadomosc.='<p>Wprowadź hasło</p>';
  23.     }
  24.     else
  25.     {
  26.         $p=($_POST['haslo']);
  27.     }
  28.  
  29.     if ($u && $p)
  30.     {
  31.         //Nazwa użytkownika i hasło są podane
  32.  
  33.         $zapytanie = &#092;"SELECT nr, uzytkownik, test  FROM uzytkownicy WHERE uzytkownik = '$u' AND haslo = '$p'\";
  34.         $wynik = mysql_query ($zapytanie);
  35.         $wiersz = mysql_fetch_array ($wynik);
  36.  
  37.         if ($wiersz)
  38.         {
  39.             //Rejestruję sesję i przekierowuję użytkownika do egzaminu.
  40.  
  41.             $_SESSION['uzytkownik'] =$wiersz[1];
  42.             $_SESSION['nr'] =$wiersz[0];
  43.             $test = $wiersz[3];
  44.  
  45.  
  46.  
  47.             if ($test = tak)
  48.             {
  49.                 print 'Nie można 2 razy rozwiązywać testu ';    //jesli test juz byl rozwiazywany
  50.             }
  51.             else
  52.             {
  53.                 //jesli nie byl rozwiazywany -  poczatek
  54.                 /* po pierwszym zalogowaniu ustalam wartość pola logicznego w bazie na tak,
  55.                 aby zapobiec ponownemu rozwiązywaniu testu przez danego użytkown
  56. ka */
  57.                 mysql_query(&#092;"UPDATE uzytkownicy SET test = 'tak' WHERE uzytkownik = '$u'\");
  58.                 // FIXED
  59.                 // header (\"Location: http://localhost/praca/egzamin.php\");
  60.                 header (&#092;"Location: http://localhost/praca/egzamin.php\");
  61.             }
  62.             else
  63.             {
  64.                 // BLAD!!!
  65.                 $wiadomosc ='<p>Błedny login lub hasło</p>';
  66.             }
  67.             
  68.             mysql_close();
  69.         } // EDIT: o jeden tab mniej
  70.         else
  71.         {
  72.             $wiadomosc.='<p>Spróbuj ponownie.</p>';
  73.         }
  74.    
  75.     }
  76.     
  77.     if (isset($wiadomosc))
  78.     {
  79.         echo '<font color =\"red\">', $wiadomosc , '</font>';
  80.     }
  81.  
  82.  
  83.     $_SESSION['data']= date('Y-m-j H:i:s');
  84.        //jesli nie byl -  koniec
  85.        
  86.    // BLAD!!! -- brakuje ostatniej zamykacej klamry
  87. ?>
hmmm
piszac w kodzie na samym dole komentarz
  1. <?php
  2. // BLAD!!! -- brakuje ostatniej zamykacej klamry
  3.  
  4. ?>
ktos moze pomyslec, ze to akurat tam ja trzeba wstawic ...

a co do czytelnosci ... to zaczal dobrze, zle skonczyl :P
jak dla mnie zapis:
  1. <?php
  2. if (warunek)
  3. {
  4. //wykonaj1
  5. }
  6. else
  7. {
  8. //wykonaj2
  9. }
  10.  
  11. ?>
jest malo czytelny ... chyba kwestia przyzwyczajenia.
dr_bonzo
Cytat(hmmm @ 2005-02-01 20:18:26)
piszac w kodzie na samym dole komentarz
  1. <?php
  2. // BLAD!!! -- brakuje ostatniej zamykacej klamry
  3.  
  4. ?>
ktos moze pomyslec, ze to akurat tam ja trzeba wstawic ...

No bo tam jej brakuje, tylko nie wstawilem jej bo nie sprawdzalem logiki programu, byc moze miala by byc przed $_SESSION...

Cytat
a co do czytelnosci ... to zaczal dobrze, zle skonczyl tongue.gif

Ja? On?
hmmm
hehe. co do czytelnosci to on - @artur81 ;)

a na logike, to domkniecia brakuje tam gdzie je dostawilem - na moja logike.
no ale moge sie mylic :P
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.