Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dlaczego ta pętla (for) nie działa?, Po prostu nic nie robi...
Ripper
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 16.06.2008

Ostrzeżenie: (0%)
-----


Witam,

Tworzę skrypt i mam takie pytanko, otóż mam taką pętlę for:
  1. <?php
  2. $wolne_id = 1;
  3. for ($sprawdzane_id = 1; $wolne_id = 0; ++$sprawdzane_id) {
  4. $sprawdz_w_bazie = dbquery("SELECT 1 FROM ".$db_prefix."users WHERE id='".$sprawdzane_id."'");
  5. $wolne_id = dbrows($sprawdz_w_bazie);
  6. }
  7. ?>


Kod ma sprawdzać ile jest wyników w bazie danych (tabeli ...users) o danym id i zapisywać je do zmiennej $wolne_id, jeżeli nie będzie żadnego wyniku to $wolne_id = 0 i skrypt powinien się zatrzymać, a ja powinienem otrzymać i zmienną $wolne_id (która mi się nie przyda) i zmienną $sprawdzane_id kiedy $wolne_id wynosi 0 (będzie to id nowego usera rejestrującego się na stronie). Mógłbym równie dobrze zrobić, żeby liczyło userów i dodawalo usera o id wyższym niż jest, ale wtedy dublowaly by się id po usunięciu kogoś. funkcja dbquery i dbrows jest dobra gdyż używałem jej wiele razy wcześniej i działała (ma na celu to co w nazwie ;P), baza danych też jest odpowiednio przedstawiona... Co może być źle, aby znajdywało mi id, którego nie ma jeszcze w tabeli coś_users?
Go to the top of the page
+Quote Post
nithajasz
post
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Chłopie konstrukcja pętli for się kłania.

  1. <?php
  2. for ( incjacja licznika; warunek dla licznika; operacje na liczniku){
  3. //kod
  4. }
  5. ?>


Tak swoją drogą co Ty kombinujesz? Bo nie bardzo rozumiem..

Ten post edytował nithajasz 16.06.2008, 17:10:26
Go to the top of the page
+Quote Post
nevt
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


  1. <?php
  2. //zamiast
  3. $wolne_id = 0
  4. //daj
  5. $wolne_id == 0
  6. ?>
przecież to ma być porównanie a nie podstawienie...
Go to the top of the page
+Quote Post
Ripper
post
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 16.06.2008

Ostrzeżenie: (0%)
-----


@nithajasz - wiem z czego składa się pętla for, ale i tak dzięki za przypomnienie...
@nevt - wiem, zauważyłem to po napisaniu posta ale coś mi po tym komp zawiesił, reset i zapomnialem poprawić (oprócz tego, że mam "==" poróbowałem też != 1 (bo oprócz 0 może być tylko 1) i nic ...

pętla ma jak już mówiłem wybierać najmniejsze nieużyte id, czyli:
- Pobierać ilośc wyników z id równym X
- Liczyć ilość wyników
- Jeżeli ilość wyników nie równa się 0, zwiększyć X o jeden i powtórzyć pętlę (już ze zwiększonym X - czyli ID).

pętla ma po prostu zdobywać najmniejszy wolny id, który nie został użyty w bazi danych, dla nowego usera, który będzie się rejestrował. Poprawiłem w/w błędy i dalej nie może nic znaleźć, mógłby mi ktoś napisać od nowa taką pętlę? Jeśli chodzi o bazy danych to pole z id mam tak:
Baza: baza_test
tabela: bt_users
pole: id

najlepiej gdybyście zamiast całych regułek podstawili do kodu od razu z funkcjami dbquery i dbrows (użycie:
$zapytanie = dbquery("_ZAPYTANIE_"); np. $zapytanie = dbquery("SELECT nazwisko FROM personaila WHERE imie='Jan');
$licz = dbrows($zmienna_z_zapytania); np. $licz = dbrows($zapytanie);
coś takiego)

Z góry dziękuję i mam nadzieję, że pomożecie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

PS. Dobrze by było, gdyby zmienną odpowiadającą za id w pętli przy którym zwraca wynik $wolne_id zero, było zapisane do jakieś zmiennej tak, abym mógł go potem użyć w dalszej części pliku/lub po zaincludowaniu

Ten post edytował Ripper 16.06.2008, 18:22:41
Go to the top of the page
+Quote Post
pyro
post
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


  1. <?php
  2. for ($sprawdzane_id = 1; $wolne_id = 0; ++$sprawdzane_id) 
  3. ?>


Spójrz na to... Po pierwsze dałeś znak przypisania a nie porównania, powinno być ==...

Pętla for działa tak, że dopóki ine natknie się na wartość false to się wykonuje (czyli jak jest wartośc true), u ciebie to wygląda tak, że od razu masz wartość false bo $wolne id == 1, a ty dajesz warunek że musi mieć wartość 0, dlatewgo ma wartość false i nic nie robi, kumasz czacze?
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #6





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


petla powinna wygladac tak
  1. <?php
  2. for($i = 0; $i < 100; $i++;){
  3. //instrukcje
  4. }
  5. ?>

Nie rozumiem twojej petli i jej zmiennych
Go to the top of the page
+Quote Post
Ripper
post
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 16.06.2008

Ostrzeżenie: (0%)
-----


@pyro o == i = już wyjaśnione - w skrypcie mam == a nawet miałęm != więc też powinno działać (no i <= też miałem raz)
Czego nie wiedziałem, to że działa, aż nie napotka wartości false, a myślałem, że true :/ Spróbuje i odp.

@Mlodycomapny dzięki za ogólny zarys pętli for (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
tomeksobczak
post
Post #8





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


do Twojego zastosowania to chyba bardziej pasuje while a nie for
Go to the top of the page
+Quote Post
nevt
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


a nie powinno jeszcze być:
  1. <?php
  2. // zamiast
  3. $wolne_id = dbrows($sprawdz_w_bazie);
  4. // coś w stylu
  5. $wolne_id = count(dbrows($sprawdz_w_bazie));
  6. //albo
  7. $wolne_id = dbrows($sprawdz_w_bazie)[0][0];
  8. ?>

(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Ripper
post
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 16.06.2008

Ostrzeżenie: (0%)
-----


Nie ;P Jak już pisałem te funkcje dbrows i dbquery (jak i inne) robią po prostu wszystko za mnie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) podają gotową liczbę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Kod już mi działa i znajduje (dodałem echo i widać co i jak) - teraz podam przykład:
Zarejestrowani są 2 userzy o id 1 i 2, po echo widać:
Id: 1 - Tak
Id: 2 - Tak
Id 3 - Nie

(Nie/Tak przez if zrobiłem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ) i teraz powinno być $sprawdzane_id jako 3 a zapisuje się tak jakby po następnym dopiero locie for i dodaje o jedno (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) poradziłem sobie odejmując zaraz za pętlą te id o 1 i wszystko śmiga. Temat do zamknięcia - bardzo dziękuję za pomoc - szczególnie @pyro - Leci "Pomógł" ;D Innym, którzy pomogli także ;D
Go to the top of the page
+Quote Post
nithajasz
post
Post #11





Grupa: Zarejestrowani
Postów: 230
Pomógł: 27
Dołączył: 27.05.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat
pętla ma po prostu zdobywać najmniejszy wolny id, który nie został użyty w bazi danych, dla nowego usera, który będzie się rejestrował.


Moim zdaniem to jest złe rozwiązanie. Chyba, że w bazie przetrzymujesz jedynie userów i nic z nimi nie wiążesz, np jakiś komentarzy czy postów (lub przez nick co też mi się nigdy nie podobało). Ale to tylko taka moja mała uwaga.
Go to the top of the page
+Quote Post
Ripper
post
Post #12





Grupa: Zarejestrowani
Postów: 16
Pomógł: 1
Dołączył: 16.06.2008

Ostrzeżenie: (0%)
-----


Po prostu robie sobie dla testów "Jak uda mi sie" własnego prostego cms'a - na razie zaczynam od rejestracji i logowania gdyż to będzie potrzebne mi potem - logowanie mam a przy rejestracji pętla ma wykrywać najmniejsze wolne ID - wolne czyli przypisane do żadnego usera. Dlaczego tak zrobiłem, a nie policzyć ile mam userów i dodać 1 do nich? Bo gdybym miał 20 userów, usunął tego z id powiedzmy 10, ktoś by się zarejestrował to były by 2 osoby z id 20 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) rozumiesz? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Pozdro, temat można zamknąć
Go to the top of the page
+Quote Post
Shili
post
Post #13





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


A nie lepiej zrobić AUTO_INCREMENT? I nic nie musisz sam liczyć.
Go to the top of the page
+Quote Post
tomeksobczak
post
Post #14





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


a słyszałeś o auto_increment albo jeżeli już musisz to robić ręcznie to max() ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:51