Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO] [PDO] Funkcja do sprawdzania
Forum PHP.pl > Forum > PHP
oskarszlempo
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ć.
gitbejbe
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.