Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] sprawdzanie czy dana liczna jest parzysta
Forum PHP.pl > Forum > Przedszkole
rola
Witam
Jak sprawdzić czy liczba zapisana w zmiennej jest parzysta czy nie? Podejrzewam że chodzi o resztę z dzielenia itd., hmm.. ma moze poprostu sprawdzić czy reszta z dzielenia jest równa czy różna od zera... questionmark.gif
nospor
  1. <?php
  2. if ($liczba % 2 == 0) echo 'parzysta';
  3. ?>
Dukov
Akurat posiłkowałem się tym postem, bo dopiero się uczę php, napisałem coś takiego
  1. if ($result = mysqli_query($db_lnk, $query)){
  2.  
  3. while ($row = mysqli_fetch_array($result)) {
  4. $i++;
  5.  
  6. if ($i % 2 == 0){
  7. echo "<div id=".$i." class=webcontainel><h4>".$row['title']."</h4></div>";
  8. }
  9.  
  10. else {
  11.  
  12. echo "<div id=".$i." class=webcontainer><h4>".$row['title']."</h4></div>";
  13. }
  14.  
  15.  
  16.  
  17.  
  18. }

Wyskakuje taki błąd, linia 16 to oczywiście sprawdzenie parzystości, nie wiem gdzie zrobiłem błąd, z tego co wiem to nic nie stoi na przeszkodzie, żeby warunek umieścić w while, jeśli wyrzucę klamry jest unexpected echo.
Parse error: syntax error, unexpected '{' in /home/dukov/ftp/testphp/pages.php on line 16
nospor
Kazdy { ma miec swoje }
Dukov
No to i while jest w {} potem w {} jest warunek, który też ma swoje {}.
viking
Nawet w tym źle wciętym przez forum kodzie widać 4 otwarcia3 zamknięcia.
Dukov
Bo skopiowałem tylko i wyłącznie pętle.

Tu jest cały kod, nie miałem ostatnio czasu się tym zająć i nadal proszę o pomoc. Pozamykane jest wszystko, z 10 razy to sprawdzałem, bo często zapominam czegoś gdzieś zamknąć, aczkolwiek tu jestem pewien.
  1. <?php
  2. $host = ;
  3. $base = ';
  4. $baseuser = '';
  5. $basepass = '';
  6.  
  7. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  8.  
  9. $query="SELECT * FROM webexamples";
  10.  
  11. if ($result = mysqli_query($db_lnk, $query)){
  12.  
  13. while ($row = mysqli_fetch_array($result)) {
  14. $i++;
  15.  
  16. if ( $i % 2 == 0 ) {
  17. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  18. }
  19.  
  20. else {
  21.  
  22. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  23. }
  24.  
  25.  
  26.  
  27.  
  28. }
  29. echo $i;
  30. }
  31. else
  32. {
  33. echo mysqli_error($db_lnk);
  34. }
  35. }
  36. else
  37. {
  38. echo "do dupy";
  39. }
  40. $db_lnk -> close();
  41.  
  42. ?>
trueblue
Chyba musisz uzbierać na nowe okulary.
Sprawdź linie 2 i 3.
Dukov
I jest jak najbardziej ok, po prostu na szybko kasowałem user i hasło itd. było $login ='login'; $haslo='haslo';, po prostu to wyczyściłem, żeby nie wrzucać tu danych do swojej bazy.

EDIT, jeszcze raz wytłumacze, to działało całkiem fajnie. Problem jest tutaj
  1. while ($row = mysqli_fetch_array($result)) {
  2. $i++;
  3.  
  4. if ( $i % 2 == 0 ) O TUTAJ>>> { <<<
  5. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  6. }
  7.  


Obojętnie co dam po if ( $i % 2 == 0 ) jest cały czas błąd unexpected syntax, obojętnie czy coś dalej skasuje, czy tam wpisze 1 albo przecinek, czy kropke, równie dobrze mogę tam napisać d*pa i wyskakuje błąd unexpected syntax.
Wcześniej to działało, tylko dodałem ten warunek.

  1. if ( $i % 2 == 0 ) {
  2. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  3. }
  4.  
  5. else {
  6.  
  7. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  8. }
i przestało działać. Bardzo mi miło, że chcecie pomóc ale czepiacie się nieistotnych szczegółów, które niedbale skopiowałem. Tłumaczyłem już kilka razy, że problem jest tylko i wytłącznie w tym miejscu, nie zmienię nic, tylko skasuje ten warunek to będzie działać.

  1. <?php
  2. $host = baza;
  3. $base = 'nazwa bazy';
  4. $baseuser = 'login';
  5. $basepass = 'haslo';
  6.  
  7. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  8.  
  9. $query="SELECT * FROM webexamples";
  10.  
  11. if ($result = mysqli_query($db_lnk, $query)){
  12.  
  13. while ($row = mysqli_fetch_array($result)) {
  14. $i++;
  15.  
  16.  
  17. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  18. }
  19. echo $i;
  20. }
  21. else
  22. {
  23. echo mysqli_error($db_lnk);
  24. }
  25. }
  26. else
  27. {
  28. echo "do dupy";
  29. }
  30. $db_lnk -> close();
  31.  
  32. ?>


Tak działa bez zarzutu, już widzicie gdzie jest problem?

EDIT 2

Ten warunek ma na celu dać inne klasy webexamplesl i wexampler, dlatego, że będą na siatce, jedno koło drugiego. A inkrementacja i++ zniknie, bo dodałem w bazie klucz z auto increment, ale będzie tam if ( $_POST['id'] % 2 == 0)
nospor
To moze pokaz w koncu poprawny kod, bo ciagle pokazujesz nam zly i ciagle masz pretensje ze zle miejsca naprawiamy... No wez sie ogarnij troche... Nazwa przedszkole to tylko taka nazwa, to nie jest prawdziwe przedszkole dla 5latkow...
Dukov
Wyżej zedytowałem posta smile.gif Już dokładnie skopiowałem wink.gif
nospor
POkaz caly kod po wstawieniu kodu o parzystosci. Podajesz nam kod kawalkami, tu cos wytniesz, tam cos dodasz.... Pokaz CALY kod
Pyton_000
Poza drobnym błędem braku $i = 0; to cały kod przytoczony jest poprawny.
viking
Nie licząc linii 30 wink.gif
nospor
@viking, ale przeciez wiemy, ze nie o linie 30 chodzi. Znowu czepiamy sie nie tego co trzeba. Chcesz by Dukov sie zdenerwowal? wink.gif
Dukov
Możesz wyjaśnić mi co jest nie tak z linią 30? Linia 30 zamyka
  1. if ($result = mysqli_query($db_lnk, $query)){
  2.  
  3. while ($row = mysqli_fetch_array($result)) {
  4. $i++;
  5.  
  6. if ( $i % 2 == 0 ) {
  7. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  8. }
  9.  
  10. else {
  11.  
  12. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  13. }
  14.  
  15.  
  16.  
  17.  
  18. }
  19. echo $i;
  20. }


Dodałem to $i = 0; i warunek taki sam

http://dukov.pl/portfoliotest/ < kod z warunkiem, który nie działa i wałkujemy od początku, jeszcze raz przytoczę kod

  1. <?php
  2. $host = ;
  3. $base = ';
  4. $baseuser = '';
  5. $basepass = '';
  6.   $i = 0;
  7. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  8.  
  9. $query="SELECT * FROM webexamples";
  10.  
  11. if ($result = mysqli_query($db_lnk, $query)){
  12.  
  13. while ($row = mysqli_fetch_array($result)) {
  14. $i++;
  15.  
  16. if ( $i % 2 == 0 ) {
  17. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  18. }
  19.  
  20. else {
  21.  
  22. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  23. }
  24.  
  25.  
  26.  
  27.  
  28. }
  29. echo $i;
  30. }
  31. else
  32. {
  33. echo mysqli_error($db_lnk);
  34. }
  35. }
  36. else
  37. {
  38. echo "do dupy";
  39. }
  40. $db_lnk -> close();
  41.  
  42. ?>


A tu kod bez warunku, nie ma rekordów w bazie więc nie ma co pobrać aczkolwiek błąd nie wyskakuje i działa http://dukov.pl/testphp/

  1. <?php
  2. $host = '';
  3. $base = '';
  4. $baseuser = '';
  5. $basepass = '';
  6. $i = 0;
  7. if ($db_lnk = mysqli_connect($host, $baseuser, $basepass, $base)){
  8.  
  9. $query="SELECT * FROM webexamples";
  10.  
  11. if ($result = mysqli_query($db_lnk, $query)){
  12.  
  13. while ($row = mysqli_fetch_array($result)) {
  14. $i++;
  15.  
  16.  
  17. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. }
  25. echo $i;
  26. }
  27. else
  28. {
  29. echo mysqli_error($db_lnk);
  30. }
  31. }
  32. else
  33. {
  34. echo "do dupy";
  35. }
  36. $db_lnk -> close();
  37.  
  38. ?>
viking
Co do 30. Musisz zacząć rozróżniac czym jest praca na obiektach, a na funkcjach. Nie utwrzyłeś obiektu wiec ciężko żeby to działało.
W reszcie kodu nie ma błędu. Jakieś includy?
Dukov
@viking, dzięki za odpowiedź możesz mi to lepiej wyjaśnić lub skopiować kod, poprawić błąd i zaznaczyć miejsce gdzie jest nie tak i poprawiłeś - byłbym bardzo wdzięczny. A też jestem ciekaw dlaczego ten bez warunku sprawdzającego czy liczba jest parzysta, czy nie to kod działa? Mimo, że różni się tylko i wyłącznie tym
  1. if ( $i % 2 == 0 ) {
  2. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  3. }
  4.  
  5. else {
  6.  
  7. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  8. }
  9.  


Wyżej nie działający

Niżej działający

  1. echo "<div id=".$i." class=webcontainerl><h4>".$row['title']."</h4></div>";
  2.  


To jest jedyna różnica między kodem działającym i nie, z obiektami, funkcjami itd. nie było żadnej zmiany, nic. Tylko ten warunek.
viking
Z jakiego edytora korzystasz? Dobry ide podświetli źle zamknięte nawiasy.
http://php.net/manual/pl/mysqli.close.php
Cytat
Styl obiektowy
bool mysqli::close ( void )

Styl proceduralny
bool mysqli_close ( mysqli $link )


Używasz 2 zatem nie $db_lnk -> close(); a mysqli_close($db_lnk)
Sam ten kod oddzielnie działa poprawnie więc zapewne gdzieś wcześniej coś źle zamknięte jest.
Dukov
Mam Sublime Text i podświetla, stąd wiem, że wszystkie klamry, nawiasy itd. są zamknięte.
viking
ST może co najwyżej początek i koniec nawiasu podświetlić a nie znaleźć błąd składniowy.
Dukov
Problem rozwiązany!!
... i żaden z Was nie uwierzy co było problemem. Sam w to nie wierzę.
  1.  
  2. if( $i % 2 == 0){
  3.  


Ten wyżej działa, a poniższy nie działa

  1. if($i%2==0)
  2. {


Widzicie już błąd? ;> Cała reszta była jak najbardziej w porządku. Ale dzięki za pomoc tak czy tak, bo jakby nie to, że kopiowałem tutaj kod, coś zmieniałem, coś poprawiłem, znowu zapytałem to pewnie bym sobie dał spokój. Po warunkach, pętlach itd. widocznie nie może być nawet białych znaków. Co mnie teraz zaciekawiło.
viking
Nie robi różnicy parserowi. Musiałeś tam wstawić jakiś znak unicode który wyświetlił się jako puste pole .
Dukov
Właśnie nic nie wstawiałem, kopiowałem, wpisywałem co mi przyszło na myśl. De facto znajomy powiedział, że nie powinno być żadnej przerwy między if i { ale sam stwierdziłem, że nie ma różnicy, a tu proszę. Wszystko umieściłem w jednym miejscu, a jedyne co tam było to przejście do nowego wiersza czyli ENTER, nie wstawiałem tam nic innego i jestem święcie przekonany. Ale mniejsza z tym, teraz działa i w końcu zaczynam być zadowolony, może jednak coś się z tego urodzi smile.gif Dzięki! smile.gif
viking
Znajomy bzdury gada a ty zastosuj się do http://www.php-fig.org/psr/ zwłaszcza coding standards.
Pyton_000
PHP ma głęboko w d... białe znaki czyli spacje i entery...
com
problemem to pewnie jest bom tongue.gif
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.