![]() |
![]() ![]() |
![]() |
![]()
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:
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 27 Dołączył: 27.05.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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%) ![]() ![]() |
|
|
|
![]()
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 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 910 Pomógł: 44 Dołączył: 20.02.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
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) |
|
|
![]()
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
|
|
|
![]()
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ć:
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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ąć |
|
|
![]()
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ć.
|
|
|
![]()
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() ?
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:51 |