Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Problem z PhpMyAdmin
zelazne_oko
post 21.12.2008, 15:32:30
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.12.2008

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


Witam, mam nastepujacy problem:

Posiadam na stronie formularz do rejestracji nowych uzytkownikow, kazdy uzytkownik powinien dostawac inny numer UID.
Cytat
$d1=mysql_num_rows(mysql_query("SELECT uid FROM users"))+1;
Niestety nie zawsze tak sie dzieje. Raz dzial prawidlowo, a raz nadaje numer juz istniejacy, wiec mam dwoch uzytkownikow o takim samym numerze.

Ustawielm przez phpMyAdmin'a zeby pole UID bylo UNIQUE oraz auto_increment. Niestety kiedy tak zrobie po wypelnieniu formularza rejestracyjnego pojawia sie blad:
Cytat
Duplicate entry '6' for key 1


Kiedy pole UID jako dzialanie ma ustawione PODSTAWOWY z atrybutem auto_increment dzieje sie tam samo.

Kiedy pole UID jest indexem z auto_increment jedynym powtarzajacym sie numerem jest numer najwyzszy, kolejne numery już sa dodawane prawidlowo.

Dlaczego tak sie dzieje?
Go to the top of the page
+Quote Post
piotrooo89
post 21.12.2008, 15:38:38
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




wyłącz auto_incerment. i możesz tworzyć losową liczbę za pomocą rand. i później sprawdzać czy liczba istnieje w bazie jeśli tak ponawiasz losowanie jeśli nie dodajesz... ja bym coś w tym rodzaju wykombinował.


--------------------
Go to the top of the page
+Quote Post
pinochet
post 21.12.2008, 15:51:46
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

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


Można to zrobić albo nadając polu uid auto incerement można to zrobić np zapytaniem:
  1. ALTER TABLE `jakas_tabela` CHANGE `uid` `uid` INTEGER NOT NULL AUTO_INCREMENT

lub za pomocą interfejsu phpmyadmin

Można też zrobić transakcję bo wyobraź sobie taką sytuację:
jeden user robi select
drugi user robi select
liczba wierszy jest ta sama
teraz pierwszy dodaje rekord
drugi otrzymuje błąd.

BTW zamiast: $d1=mysql_num_rows(mysql_query("SELECT uid FROM users"))+1;
zrob:
  1. <?php
  2. list($d1)=mysql_fetch_row(mysql_query("SELECT COUNT(*)+1 FROM users"));
  3. ?>
Go to the top of the page
+Quote Post
dr_bonzo
post 21.12.2008, 16:11:46
Post #4





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

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


Ustaw klucz glowny (lub chociaz UNIQUE) do tego auto increment, zablokuj dostep do bazy, wyedytuj wartosc autoincrement w TAble > Operations w phpMyAdmini na najwieksza wartosc UID + 1 i zapisz. Od tej pory powinno ci dzialac.
A userow dodajesz INSERT INTO users ( name, email ) VALUES ( 'bob', 'bob@example.com' ) ; // czyli pomijasz kolumne UID.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
zelazne_oko
post 21.12.2008, 23:02:39
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.12.2008

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


@Piochet

Z count jest o tyle problem ze niekotre rekordy kasowalem, najwyzszy numer uid jest wiekszy niz ilosc wszystkich rekordow.

--edit--


Teraz dziela:

Cytat
list($d1)=mysql_fetch_row(mysql_query("SELECT MAX(uid)+1 FROM users"));




Dzieki wszystkim za pomoc.

Ten post edytował zelazne_oko 22.12.2008, 14:27:44
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 21.05.2024 - 23:48