Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Bez powtarzania znaków
Forum PHP.pl > Forum > Przedszkole
qazwsx1
Cześć.
Mam skrypt który losuje ciąg znaków, jak mam zrobić aby jak będzie losował żeby sprawdził czy taki ciąg znaków jest w bazie, a jeśli go nie będzie to go doda
Kaayl
Po wylosowaniu wykonujesz zabytanie do tabeli/kolumny w ktorej trzymasz wyniki z losowania (mozesz uzyc w tym celu zapytania SELECT). Jezeli ilosc wynikow jest <1 to wykonujest INSERT do bazy z wylosowanym ciagiem znakow. I po sprawie,
qazwsx1
Czekaj bo ja nie rozumiem do końca... za dobry w PHP nie jestem biggrin.gif
Mam:
  1. for ($i=0; $i<5; $i++)
  2. {
  3. $kod .= $tabela[rand()%(strlen($tabela))];
  4. }

i jak to z tego zrobić? biggrin.gif
Kaayl
Na przyklad tak:


for ($i=0; $i<5; $i++)
{
$kod .= $tabela[rand()%(strlen($tabela))];

}
$zapytanie = "SELECT * from nazwa_tabeli_z_kodami WHERE nazwa_kolumny_z_kodami='$kod' ";

$result = mysql_query ($zapytanie);
$dane = mysql_fetch_array($result, MYSQL_ASSOC);
if(mysql_num_rows($result) < 1){

$dodaj_kod = "INSERT into nazwa_tabeli_z_kodami (nazwa_kolumny_z_kodami) values ('".$kod'."') ";
$wynik = mysql_query($dodaj_kod);
} else {
echo 'W bazie istnieje już taki kod!';
}


Kod napisany z reki i bez sprawdzenia.
Zalozylem ze zrobiles juz sobie polaczenie z baza i masz strukture tabel i ustalona autoinkrementacje dla dodawanych nowych rekordow w tabeli.
qazwsx1
Dobra, nie wiem czy dobrze przeczytałem, ale nie chodzi mi o to aby wywaliło komunikat że już taki istnieje, a żeby poszukało nowego i znowu spróbowało.

nikt nie pomoże?
piotrooo89
proszę nie podbijać, inaczej zamknę.
maviozo
Osobiście do czegoś takiego stosuję try {} catch (PDOException $e){} i sprawdzam, czy kod błędu odpowiada błędowi zwracanemu w przypadku istniejącego klucza głównego. Oczywiście to zadziała pod warunkiem, że ta kolumna, którą zamierzasz porównywać, ma flagę UNIQUE. Wystarczy sprytnie zastosować rekurencję i sprawa załatwiona. Dzięki temu, najczęściej wykonane zostanie maksymalnie jedno zapytanie, w sytuacji powtórki dwa. Sytuacja, w której maszyna dwa razy wylosuje istniejący ciąg znaków pod rząd, jest raczej znikoma.
qazwsx1
Cytat(maviozo @ 7.01.2012, 20:52:41 ) *
Sytuacja, w której maszyna dwa razy wylosuje istniejący ciąg znaków pod rząd, jest raczej znikoma.

Tylko jeśli w bazie będzie kilkaset rekordów to już jest większe prawdopodobieństwo tego
maviozo
Klikaset rekordów, przy losowych 10 znakach? Do tego osobiście użyłbym na przykład substr(md5(microtime()),10);
Pewnie, że może się powtórzyć, ale przy dwóch powtórkach, to tylko 2 zapytania, zawsze o jedno mniej, niż zestaw select,insert.
qazwsx1
O ilość nie mam się co martwić bo mam Duże małe i cyfry a kod ma 6 znaków więc chcę z tym to jakoś rozwiązać...
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.