Skocz do zawartości

Sprawdzenie, aby php nie dodało duplikatu do bazy


jarekcda

Rekomendowane odpowiedzi

Mam problem ze sprawdzeniem, aby php nie dodało duplikatu do bazy.

Skrypt php generuje kod i wpisuje go do bazy za pomocą funkcji

$kod .= $tabelka[rand()%(strlen($tabelka))];

Dodany kod nie może być taki sam, jak istniejące kody w bazie.

Próbowałem to sprawdzać za pomocą funkcji do .. while , ale coś nie wychodzi:

do {

 

// funkcja generująca kod

 

$zapytanie4=mysql_query ("SELECT id FROM m_kody WHERE  d_kod='$kod' ")
$cyfra_spr = mysql_num_rows($zapytanie4);

}
while($cyfra_spr==0);

 

Funkcja po znalezieniu takiego samego kodu w bazie powinna wrócić i wygenerować nowy, a tak się nie dzieje

Dodaj własny artykuł na naszym blogu   https://bazafirmy.pl/blog/      , https://katalogifirm.com.pl/blog/ , https://dzialka.bazafirmy.pl/

Odnośnik do komentarza
Udostępnij na innych stronach

Masz "odwrócony" warunek pętli.
Jeśli $cyfra_spr jest 0 to znaczy, że w bazie jest 0 kodów takich jak wygenerowany, i wtedy pętla powinna być przerywana.
Pętla powinna się wykonywać dopóki $cyfra_spr jest różna od zera.

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązań tego problemu może być wiele.

Przykładowo kolumna "d_kod" powinna być kluczem głównym lub z indeksem unique

Wtedy wstawiasz nowe kody do zadanej ilości INSERT ... ON DUPLICATE KEY UPDATE

Pseudokod:

int iledodackodow = 1000;
bool wykonuj = true;

while(wykonuj)
{
	var losowykod = GenerujKod();
	BazaDanychWstawkod(losowykod);
	int ilekodow = BazaDanychGetIleKodow();
	if(ilekodow == iledodackodow)
	{
		wykonuj = false;
	}
}

Lub druga wersja z zamiast ignore / update zapytaniem select:

int iledodackodow = 1000;
bool wykonuj = true;

while(wykonuj)
{
	var losowykod = GenerujKod();
	if(BazaDanychCzyJestJuzKod(losowykod) == false)
	{
		BazaDanychWstawkod(losowykod);
	}
	int ilekodow = BazaDanychGetIleKodow();
	if(ilekodow == iledodackodow)
	{
		wykonuj = false;
	}
}

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Domyślam się, że chcesz ich dodać więcej na raz.

 

Jeżeli przyjmujesz, że dodajesz 100 kodów i ani jednego mniej to rozwiązanie na poziomie bazy się nie sprawdzi (co nie oznacza, że nie warto by dodać UNIQUE na kolumnę).

Albo generujesz kody tak aby w naturalny sposób nigdy się nie powtórzyły (są różne ciekawe metody) ale najprościej będzie pobrać wszystkie kody w bazie, generować kody w pętli sprawdzając każdorazowo za pomocą in_array czy taki kod już istnieje dzięki czemu unikniesz każdorazowo zapytania do bazy. Dla 100% pewności sprawdzaj też czy kod też nie jest w tworzonej właśnie liście, mało prawdopodobne

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności