Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Generowanie unikalnego ciągu znaków
Forum PHP.pl > Forum > PHP
aleks365
Witam

Napisałem skrypt do generowania id zdjęcia które będzie wywoływane w GET żeby je wyświetlić ale do rzeczy

Skrypt generuje losowy ciąg znaków i chciałem żeby po wygenerowaniu sprawdzał czy on istnieje w Bazie danych jeśli nie istnieje to żeby dodało nasz losowy key a jeśli istnieje to żeby powtórzył generowanie i wygenerował nowy key
Zrobiłem już sprawdzanie czy key istnieje w bazie ale nie mam pojęcia jak zrobić że jak key istnieje w bazie to żeby wygenerowało nowy i każdy key był unikalny bo one będą przypisywane do Hostingu zdjęć to musi być skrypt pewny i żeby się nie powtórzył nigdy

O to mój skrypt
  1. <?php
  2. define('HOST', 'localhost');
  3. define('USER', 'root');
  4. define('PASS', 'all');
  5. define('NAME', 'losowanie_id');
  6. define('SET', 'SET NAMES utf8');
  7.  
  8. $connection = @mysql_connect(HOST, USER, PASS) or die('Nie mozna polaczyc z baza danych');
  9. $database = @mysql_select_db(NAME) or die('Nie mozna wybrac bazy danych');
  10. $setname = @mysql_query(SET) or die('Nie mozna ustawic kodowania bazy danych');
  11.  
  12.  
  13.  
  14. function random_string_mysql($length,$length2) {
  15.  
  16.  
  17. // Losowanie znakow
  18. //$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  19.  
  20. $chars = 'ZX';
  21.  
  22. $rand = rand($length,$length2);
  23.  
  24. for($i=0;$i<$rand;$i++) {
  25. $rand_str .= $chars[rand()%(strlen($chars))];
  26. }
  27. // Koniec Losowanie znakow
  28.  
  29. echo '<br>Wylosowany key '.$rand_str.'<br>';
  30.  
  31.  
  32. // Sprawdzanie czy istnieje key
  33. $result5 = mysql_query("SELECT * FROM random WHERE los='".$rand_str."'");
  34. if(mysql_num_rows($result5) >0) {
  35. echo '<br>Istnieje ten key';
  36. }
  37. else {
  38. echo '<br>Nie istnieje ten key';
  39. }
  40. // Koniec Sprawdzanie czy istnieje key
  41.  
  42. }
  43.  
  44.  
  45. random_string_mysql(1,2);
  46.  
  47.  
  48. mysql_close($connection);
  49. ?>


PS: Jeśli wyskoczy "Istnieje ten key" to żeby był losowany drugi inny nawet jak 5 razy pod rząd będzie taki co istnieje w bazie żeby losowało go do momentu aż skrypt wyświetli że key nie istnieje w bazie

PS2: Czy takie rozwiązanie jest dobre nie obciąży serwera w dużym stopniu?

PS3: Jeśli ktoś ma gotowy skrypt też bym bardzo prosił smile.gif

Dzięki z góry wink.gif
Sephirus
ad. PS 1 - Wystarczy to zapętlić aż do znalezienia unikalnego klucza

ad. PS 2 - Takie rozwiązanie jest bardzo "nie dobre" smile.gif Jeśli już chcesz się bawić powinieneś stworzyć jakiś algorytm który będzie generował coś unikalnego na podstawie danych obrazka.

ad. PS 3 - gotowe skrypty są a nawet funkcje (o ile nie zależy Ci na utrzymaniu konkretnej długości). Wystarczyło by w tym miejscu dać jakieś MD5 lub SHA1 z ID obrazka po wrzuceniu do bazy (ID jest unikalne więc coś zrobione z ID też będzie). Pamiętaj tu jedynie o SALT.

Jeśli chcesz się pobawić możesz też zerknąć na to
alegorn
uniqid() ?


aleks365
Wielkie dzięki myślę że już sobie poradzę
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.