Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Błąd w skrypcie
Forum PHP.pl > Forum > Przedszkole
Gość
Witam!
Piszę skrypt i mam błąd i kombinuje chyba z 2 godziny i nic nie wymyśliłem, coś jest pewnie z instrukcjami warunkowymi.
Nie mogę doszukać się błędu. Oczywiście wiem, że forum nie słuzy do poprawiania składni ale będę bardzo wdzięczny.
Pozdrawiam



Błąd jest na linii 146 czyli pod koniec, tak jakby brakowało jednego } ale nie wiem. Z góry dziękuję
  1. <?php
  2. require_once "funkcje.php";
  3. pol_mysql();
  4. echo '<center>';
  5.  
  6. if ($_SESSION['user']) {
  7.  
  8. include "tabelaleft.php";
  9.  
  10. echo '<td width="550" height="700"><center><b>';
  11.  
  12. $pokazl = "SELECT bron, tarcza, czar, lvl, nbron, ntarcza, nczar, zloto, profesja, xy 
    FROM users WHERE login = '"
    . $_SESSION['user'] ."'";
  13. $wykonaj = mysql_query($pokazl);
  14. while($wiersz = mysql_fetch_array($wykonaj))
  15. {
  16. $bron = $wiersz['bron'];
  17. $tarcza = $wiersz['tarcza'];
  18. $czar = $wiersz['czar'];
  19. $nbron = $wiersz['nbron'];
  20. $ntarcza = $wiersz['ntarcza'];
  21. $nczar = $wiersz['nczar'];
  22. $zloto = $wiersz['zloto'];
  23. $profesja = $wiersz['profesja'];
  24. $lvl = $wiersz['lvl'];
  25. $xy = $wiersz['xy'];
  26. }
  27.  
  28. if ($profesja != 'Mag') { echo '<b><center>Tylko dla magów</b></center>'; } else {
  29.  
  30. echo 'Kupując broń bez sprzedania starej, stracisz takową nie dostając za nią nic!<br>_____________________________________<br><br>';
  31.  
  32.  
  33. if ($xy == 1 || $xy == 3) {
  34.  
  35. if ($nbron != 'Drewniana różdżka') {
  36.  
  37. if (!empty($_POST['drewnianarozdzka'])) {
  38. if ($zloto >= 200) {
  39. mysql_query("UPDATE users SET bron = 5 WHERE login = '". $_SESSION['user'] ."'");
  40. mysql_query("UPDATE users SET nbron = 'Drewniana różdżka' WHERE login = '". $_SESSION['user'] ."'");
  41. mysql_query("UPDATE users SET zloto = $zloto-200 WHERE login = '". $_SESSION['user'] ."'");
  42. echo 'Zakupiono przedmiot!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">';
  43. } else { echo 'Nie masz pieniędzy na zakup przedmiotu!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">'; }
  44. } else {
  45. echo '
  46. <form action="wkostury.php" method="POST">
  47. <INPUT TYPE="hidden" name="drewnianarozdzka" value="1">
  48. DREWNIANA RÓŻDŻKA<br>200zł, ATAK: 5 <input type="image" src="buttons/kup.png" border="0">
  49. </form>';
  50. }
  51. }
  52. }
  53.  
  54. if ($nbron != 'Różdżka') {
  55. if (!empty($_POST['rozdzka'])) {
  56. if ($zloto >= 500) {
  57. mysql_query("UPDATE users SET bron = 13 WHERE login = '". $_SESSION['user'] ."'");
  58. mysql_query("UPDATE users SET nbron = 'Różdżka' WHERE login = '". $_SESSION['user'] ."'");
  59. mysql_query("UPDATE users SET zloto = $zloto-500 WHERE login = '". $_SESSION['user'] ."'");
  60. echo 'Zakupiono przedmiot!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">';
  61. } else { echo 'Nie masz pieniędzy na zakup przedmiotu!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">'; }
  62. } else {
  63. echo '
  64. <form action="wkostury.php" method="POST">
  65. <INPUT TYPE="hidden" name="rozdzka" value="1">
  66. RÓŻDŻKA<br>500zł, ATAK: 13 <input type="image" src="buttons/kup.png" border="0">
  67. </form>';
  68. }
  69. }
  70. }
  71.  
  72. if ($nbron != 'Kościana różdżka') {
  73.  
  74. if ($lvl >= 4) {
  75.  
  76. if (!empty($_POST['koscianarozdzka'])) {
  77. if ($zloto >= 2000) {
  78. mysql_query("UPDATE users SET bron = 30 WHERE login = '". $_SESSION['user'] ."'");
  79. mysql_query("UPDATE users SET nbron = 'Kościana różdżka' WHERE login = '". $_SESSION['user'] ."'");
  80. mysql_query("UPDATE users SET zloto = $zloto-2000 WHERE login = '". $_SESSION['user'] ."'");
  81. echo 'Zakupiono przedmiot!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">';
  82. } else { echo 'Nie masz pieniędzy na zakup przedmiotu!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">'; }
  83. } else {
  84. echo '
  85. <form action="wkostury.php" method="POST">
  86. <INPUT TYPE="hidden" name="koscianarozdzka" value="1">
  87. KOŚCIANA RÓŻDŻKA<br>2000zł, ATAK: 30 <input type="image" src="buttons/kup.png" border="0">
  88. </form>';
  89. }
  90. }
  91. }
  92.  
  93.  
  94. if ($nbron != 'Różdżka Ildara') {
  95. if ($lvl >= 7) {
  96.  
  97. if (!empty($_POST['rozdzkaildara'])) {
  98. if ($zloto >= 4500) {
  99. mysql_query("UPDATE users SET bron = 80 WHERE login = '". $_SESSION['user'] ."'");
  100. mysql_query("UPDATE users SET nbron = 'Różdżka Ildara' WHERE login = '". $_SESSION['user'] ."'");
  101. mysql_query("UPDATE users SET zloto = $zloto-4500 WHERE login = '". $_SESSION['user'] ."'");
  102. echo 'Zakupiono przedmiot!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">';
  103. } else { echo 'Nie masz pieniędzy na zakup przedmiotu!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">'; }
  104. } else {
  105. echo '
  106. <form action="wkostury.php" method="POST">
  107. <INPUT TYPE="hidden" name="rozdzkaildara" value="1">
  108. RÓŻDŻKA ILDARA<br>4500zł, ATAK: 80 <input type="image" src="buttons/kup.png" border="0">
  109. </form>';
  110. }
  111. }
  112. }
  113.  
  114. if ($nbron != 'Eukanos') {
  115. if ($lvl >= 10) {
  116.  
  117. if (!empty($_POST['eukanos'])) {
  118. if ($zloto >= 7000) {
  119. mysql_query("UPDATE users SET bron = 150 WHERE login = '". $_SESSION['user'] ."'");
  120. mysql_query("UPDATE users SET nbron = 'Eukanos' WHERE login = '". $_SESSION['user'] ."'");
  121. mysql_query("UPDATE users SET zloto = $zloto-7000 WHERE login = '". $_SESSION['user'] ."'");
  122. echo 'Zakupiono przedmiot!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">';
  123. } else { echo 'Nie masz pieniędzy na zakup przedmiotu!<META HTTP-EQUIV="Refresh" CONTENT="1;URL=wkostury.php">'; }
  124. } else {
  125. echo '
  126. <form action="wkostury.php" method="POST">
  127. <INPUT TYPE="hidden" name="eukanos" value="1">
  128. EUKANOS<br>7000zł, ATAK: 150 <input type="image" src="buttons/kup.png" border="0">
  129. </form>';
  130. }
  131. }
  132. }
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139. }
  140.  
  141.  
  142.  
  143. echo '<br><br>_____________________________________<br>';
  144.  
  145. } else { echo '<b>BŁĄD!'; }
  146.  
  147. include "tabelaright.php";
  148.  
  149. } else {
  150. echo "Wróć i zaloguj się!";
  151. }
  152.  
  153. ?>
Hazel
Proponuję zedytować kod, zrobić wcięcia i przestrzegać miłej konwencji nawiasów klamrowych typu
  1. <?php
  2. if()
  3. {
  4. }
  5. ?>


zamiast

  1. <?php
  2. if() {
  3. }
  4. ?>


Wprawdzie obie konwencje są zalecane, prawidłowe i równie popularne, ale, nie tylko moim zdaniem, pierwsza, choć zajmuje więcej linii, jest znacznie łatwiejsza do odczytania - ja ją stosuję i nie mam problemów z nawiasami klamrowymi, wszystko jest czytelne i przejrzyste, nawet przy bardzo dużych i rozbudowanych w pętle oraz instrukcje warunkowe plikach.

Skopiowałem sobie do edytora ten Twój kod i po usunięciu wierszy dołączających pliki też mi w tej samej linii wyskakuje błąd, dlatego myślę, że to nawiasy klamrowe - nie widzę innego błędu składni czy parsowania w pobliżu tamtego miejsca...

Jeszcze jedna uwaga - pętlę while z linii 15-27 (zajmuje 13 linijek) można zastąpić następującym blokiem:

  1. <?php
  2. while ($wiersz = mysql_fetch_array($wykonaj))
  3. {
  4. extract($wiersz);
  5. }
  6. ?>


Nieco łatwiej i krócej, nieprawdaż?
Funkcja extract() tworzy zmienne o wartościach takich jak klucze tablicy. Ma tam parę wyjątków - nie zawsze działa prawidłowo w tej formie, domyślnie nadpisuje istniejące zmienne itp., ale większość jej niedoskonałości można zniwelować przez podanie jej opcjonalnych parametrów (które w tym przypadku nie są ani trochę potrzebne). Chcesz to zajrzyj do dokumentacji, bo nie chce mi się opisywać czegoś, o co nie pytałeś. Tak tylko mówię, żebyś zoptymalizował trochę kod (a raczej go skrócił tongue.gif) (zreszta, można to samo zrobić pętlą foreach lub dowolną inną, tyle że to już jest zaimplementowane... w każdym razie nie należy zajmować 13 linii kodu tam, gdzie potrzeba 4 (w przypadku extract()) lub 5 (w przypadku foreach)). A jak zrobisz coś z tymi nawiasami klamrowymi, to sam będziesz wiedział, gdzie jest błąd (a jak nie to pisz).

edit: A tak w ogóle to prawdopodobnie nie potrzeba tam
  1. <?php
  2. while ($wiersz = mysql_fetch_array($wykonaj))
  3. ?>
wystarczy tylko
  1. <?php
  2. $wiersz = mysql_fetch_array($wykonaj)
  3. ?>

No chyba że chcesz, żeby wartościami zmiennych były dane pobrane z ostatniego odczytanego rekordu tablicy, a nie z pierwszego...
Bo robiąc pętlę tak jakby chcesz, żeby te zmienne posiadały tyle wartości, ile jest rekordów w bazie danych, a to przecież nie tablice, tylko zwyczajne zmienne skalarne tongue.gif Stąd wnioskuję, że liczba wierszy wyniku MySQL $wykonaj jest równa 1, w przeciwnym przypadku kod działa Ci błędnie. A jeśli wiersz jest jeden, to nie potrzebujesz pętli.
kresh
od linii 140:
  1. <?php
  2. } // to zamyka warunek z 7 linii: if ($_SESSION['user']) {
  3.  
  4.  
  5.  
  6. echo '<br><br>_____________________________________<br>';
  7.  
  8. } else { echo '<b>BŁĄD!'; }
  9.  
  10. include "tabelaright.php";
  11.  
  12. } else {
  13. echo "Wróć i zaloguj się!";
  14. }
  15. ?>


Tak jak napisał Hazel powinieneś się zaprzyjaźnić z Tabulatorem smile.gif
Mnie pomaga też notepad++ który podświetla pary klamr - otwierającą i zamykającą
Gość
Wielkie dzięki za odpowiedź, że się tak rozpisaliście biggrin.gif

P.S.

Po poprawieniu błędu przerobie ten kod na bardziej czytelniejszy jak napisaliście.

Kresh, napisałeś:
} // to zamyka warunek z 7 linii: if ($_SESSION['user']) {

o co chodzi?
Po if ($_SESSION['user']) mam jeszcze sprawdzenie profesji i potem XY, więc te 2 instrukcje trzeba chyba zamknąć przed zakonczeniem $_SESSION['user']. Nie jestem jakimś zawodowcem i nie zbyt wiem jak to zrobić winksmiley.jpg z góry dzięki
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.