Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PDO] [PDO] Funkcja do sprawdzania
oskarszlempo
post 5.06.2019, 02:40:23
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.06.2019

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


Cześć,

programowaniem zajmuje się bardzo amatorsko i nie wszystko jest dla mnie zrozumiałe.

Chciałbym utworzyć skrypt, który dodaje do bazy danych wiersz z dwoma wartościami - z stringiem i unikalnym ciągiem znaków, ale chciałbym aby skrypt najpierw sprawdził czy w bazie istnieje już taki ciąg i jeśli istnieje to wygenerował nowy i znowu sprawdził i tak w kółko dopóki nie wygeneruje się wolny, a jeżeli znajdzie już wolny ciąg to dopiero wtedy dodał wiersz do bazy.

Budowa bazy danych:
id | string | hash

Do generowania "hasza" używam takiej funkcji:
  1. function generateHash() {
  2.  
  3. $str_result = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_';
  4.  
  5. return substr(str_shuffle($str_result), 0, mt_rand(4, 7));
  6.  
  7. }


No i nie wiem w jaki sposób powinna wyglądać funkcja sprawdzająca czy w bazie istnieje już taki hash.

Myślałem, aby zrobić to w taki sposób:
  1. $stmt = $db->prepare('SELECT hash FROM tabela WHERE hash = :hash');
  2. $stmt->bindValue(':hash', $generatedHash, PDO::PARAM_STR);
  3. $stmt->execute();
  4.  
  5. $stmt = $stmt->fetch(PDO::FETCH_ASSOC);
  6.  
  7. if (!$stmt) {
  8.  
  9. // hash nie istnieje i można dodać
  10.  
  11. } else {
  12.  
  13. // hash istnieje i trzeba wygenerować nowy
  14.  
  15. }


No i tu pojawiają się schodki. Jak to zrobić, aby skrypt wygenerował nowy ciąg znaków z w/w funkcji i znowu sprawdził, czy taki ciąg już istnieje.

Mam nadzieję, że w miarę to zrozumiale napisałem i otrzymam odpowiedź na to w jaki sposób to zrobić.
Go to the top of the page
+Quote Post
gitbejbe
post 5.06.2019, 18:00:07
Post #2





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

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


sam warunek nie wystarczy bo musisz sprawdzać do skutku aż uzyskasz niepowtarzalny hash. Tak więc musisz zrobić wszystko w pętli DO WHILE gdzie warunkiem zakańczającym pętle będzie oczekiwany wynik zapytania z bazy. Pamiętaj aby się nie zapętlić, ewentualne błędy powinny również przerywać pętle.
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: 29.03.2024 - 16:58