Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> sprawdzanie w loginów przy rejestracji, Sprawdzanie w pętli wolnego loginu
nordi
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 26.09.2006

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


Witam, pisze właśnie skrypt który autmoatycznie doda klientów z pliku XML, plik już ropzpracowałem i wyciągnałem sobie w pętli wszystkie rekordy, funkcja zapisu danych już działa ale mój problem kryje się w podwójnych loginach, dla przykładu dodając jakiegoś klienta moze się zdarzyć ze w bazie mam już login 'ania' więc sprawdzam zapytaniem

$query="SELECT login FROM users where login='$login'";
$result=mysql_query($query);

...itd

Jeżeli użytwkonik o loginie ania istnieje chciałbym aby dodał on login do bazy o nazwie ania1.

Jednak chodzi mi o taką pętle która bedzie sprawdzac czy ania istnieje jezeli istnieje to sprawdza czy ania1 istnieje jezeli ania1 istnieje sprawdza czy ania2 istnieje jezeli tak to sparwdzania ania3, jezeli wreszcie napotka ze np. ania4 nie ma w bazie dopiero go zapisuje...

Z góry wielkie dzięki
Go to the top of the page
+Quote Post
bendi
post
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


A może zamiast pętli zarzucisz sobie na klucz unikalny na pole login + num (AUTOINCREMENT) i login będzie stanowił połączenie tych dwóch pól - dzięki temu nie będziesz muisał żadnej pętli robić, a kolejne numerki będą się "same" dodawały.

Przykładowy kod:
  1. CREATE TABLE: CREATE TABLE `buu` (
  2. `costam` varchar(200) DEFAULT NULL,
  3. `name` varchar(200) DEFAULT NULL,
  4. `num` int(11) NOT NULL AUTO_INCREMENT,
  5. UNIQUE KEY `name` (`name`,`num`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1


  1. INSERT INTO buu (costam,name) VALUES( 'costam1', 'costam');
  2. INSERT INTO buu (costam,name) VALUES( 'costamjeszcze1', 'costamjeszcze');
  3. INSERT INTO buu (costam,name) VALUES( 'costam2', 'costam');
  4. INSERT INTO buu (costam,name) VALUES( 'costamjeszcze2', 'costamjeszcze');
  5. INSERT INTO buu (costam,name) VALUES( 'costam3', 'costam');
  6. INSERT INTO buu (costam,name) VALUES( 'costamjeszcze3', 'costamjeszcze');


Co nam daje:
Kod
mysql> select * from buu;
+----------------+---------------+-----+
| costam         | name          | num |
+----------------+---------------+-----+
| costam1        | costam        |   1 |
| costam1        | costam        |   2 |
| costam3        | costam        |   3 |
| costamjeszcze1 | costamjeszcze |   1 |
| costamjeszcze2 | costamjeszcze |   2 |
| costamjeszcze3 | costamjeszcze |   3 |
+----------------+---------------+-----+
6 rows in set (0.00 sec)


Później logowanie może wyglądać tak:
  1. SET @login = 'wartosc_z_zewnatrz';SELECT * FROM buu WHERE CONCAT( name, num ) = @login;
Go to the top of the page
+Quote Post
nordi
post
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 26.09.2006

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


Dzięki Bendi za pomoc, to co mi napisaleś działa OK ale ja nie chce zmieniać struktury logowania ani bazy danych, czy wie ktoś moze jak napisać to w pętli? Tak jak opisałem na początku?
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. <?php
  2. //wyciagasz liczbe userow
  3. $ile =mysql_num_rows($query);
  4. for($a = 0; $a <= $ile; $a++){
  5. //zapytanie sprawdza login
  6. //i znow num rows
  7. if($num_rows >0){break;}
  8. else{
  9. $nazwa = "$nazwa $a";
  10. }
  11. ?>


pisane z palca i slabo przemyslane

Ten post edytował skowron-line 15.10.2006, 21:30:02
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Petla ma zlozonosc O(n)
Zeby uzyskac O(1) to doloz dodatkowa tabele w ktorej bedziesz zapisywal nastepna wartosc nicka:

nick (PRIMARY) | next_value

i wykorzystaj ja
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: 23.10.2026 - 11:29