Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Generowanie unikalnego ciągu znaków, I Sprawdzanie w MySQL czy istnieje
aleks365
post
Post #1





Grupa: Zarejestrowani
Postów: 134
Pomógł: 1
Dołączył: 26.02.2012

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


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
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
alegorn
post
Post #3





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


uniqid() ?


Go to the top of the page
+Quote Post
aleks365
post
Post #4





Grupa: Zarejestrowani
Postów: 134
Pomógł: 1
Dołączył: 26.02.2012

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


Wielkie dzięki myślę że już sobie poradzę
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 Aktualny czas: 21.08.2025 - 08:14