Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Jednorazowe wyświetlanie rekordu z bazy danych MySQL..., Skrypt na jednorazowe i po kolei wyświetlanie rekordów z bazy danych
modern-web
post
Post #1





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Witam. Potrzebuję pomocy! Nie wiem jaki skrypt PHP jest w stanie wyświetlić po kolei rekordy z bazy danych. Może wytlumacze to inaczej... W bazie danych zawarte są 16 znakowe kody, które wpisywane są tam przeze mnie. Każdy kod przyporzadkowany ma numer ID. Chce by kody te były wyswietlane TYLKO RAZ i po kolei według przyporzadkowanych numerów ID. Proszę o szybką odpowiedz (IMG:style_emoticons/default/winksmiley.jpg)
Z góry dziękuje za pomoc.
Pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ddiceman
post
Post #2





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


Jesli kiedys bedziesz sie zajmowal wspolbieznoscia, to zorientujesz sie, ze to, co Ci napisano, to stek bzdur. Dlaczego? Bo strony internetowe sa systemami wielodostepnymi - wiele osob moze (i robi to) korzystac z nich jednoczesnie.
Skad masz pewnosc, ze miedzy sprawdzeniem, ostatniego wolnego kodu a oznaczeniem go, jako uzywany nikt inny nie sprawdzi ostatniego wolnego kodu? W ten sposob (przez krotka chwile, to prawda) dwie osoby dostana ten sam kod (bo w chwili sprawdzania dla obu byl wolny) i obie poprawia go na zajety.
Tak naprawde powinienes oznaczac kod jako uzywany, jeszcze nim go uzyjesz. Jak?

Np. zamiast flagi used dodaj identyfikator sesji uzytkownika kodu:
  1. CREATE TABLE IF NOT EXISTS `token` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `token` varchar(16) NOT NULL,
  4. `used_by` varchar(32) NULL DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM;


I teraz - rezerwacja tokena to najpierw update:
  1. $query = 'UPDATE token SET used_by = "'.session_id().'" ORDER BY id DESC LIMIT 1;';
  2. mysql_query($query);

W tym momencie token jest zarezerwowany i NIKT na pewno go wiecej nie zajmie. Blokowanie ostatniego jest operacja atomowa na poziomie bazy danych, wiec nie ma mozliwosci zablokowania tego samego rekordu.
Dalej pobieramy (tak, dopiero teraz, nie wczesniej!) ostatni zarezerwowany przez nas token (bo dawno dawno temu, ktos mogl miec taki sam identyfikator sesji).
  1. $query = 'SELECT token FROM token WHERE used_by = "'.session_id().'" ORDER BY id DESC LIMIT 1;';
  2. mysql_query($query);


Czepiam sie, bo tylko milisekundy miedzy jednym i drugim? Moze, ale kody jednorazowe stosuje sie raczej w systemach "wysokiego" bezpieczenstwa i taka rada moze Cie uchronic przed pozniejszymi problemami. Poza tym - ucz sie dobrych nawykow.
Go to the top of the page
+Quote Post

Posty w temacie
- modern-web   [PHP][MySQL] Jednorazowe wyświetlanie rekordu z bazy danych MySQL...   15.03.2010, 17:21:39
- - Kszyhuu   Żeby wyświetlane były po kolei, wystarczy użyć ord...   15.03.2010, 18:02:21
- - modern-web   Widzę ze ktos to rozumie. Przyznam ze jestem w tym...   15.03.2010, 18:16:58
- - masahuku   SELECT kod FROM kody ORDER BY id ASC No chyba że...   15.03.2010, 19:54:23
- - modern-web   Ujmę to tak... O bazach znam wystarczająco dużo......   15.03.2010, 21:03:48
- - thek   Ustaw więc flagi. 0 - nie wylosowany, 1 - wylosowa...   15.03.2010, 21:45:24
- - modern-web   No dobrze. Wszyscy wiecie o co mi chodzi ale ja je...   15.03.2010, 21:57:33
- - jaslanin   Jeżeli chodzi Ci żeby to było w 1 zapytaniu to się...   15.03.2010, 22:40:41
- - modern-web   O! O to mi chodziło. Ale jakiego skryptu użyć ...   15.03.2010, 23:46:45
- - thek   To ja nieco rozszerzę informację od jaslanina. Na ...   15.03.2010, 23:48:18
- - modern-web   Ok... Udało mi się zrobić większość. Działa! A...   16.03.2010, 12:39:55
- - ddiceman   Jesli kiedys bedziesz sie zajmowal wspolbieznoscia...   16.03.2010, 13:00:43
- - thek   Musisz przechwycić moment, w którym skrypt sprawdz...   16.03.2010, 13:12:43
- - ddiceman   Hm. Czy kiedykolwiek pisales cos PHP z wykorzystan...   16.03.2010, 13:25:54
- - thek   @Ddiceman: Zwróć uwagę na moją sugestię o dodatkow...   16.03.2010, 13:30:48
- - modern-web   Może omówię do czego mają służyć te 16-znakowe kod...   16.03.2010, 13:44:26
- - ddiceman   Roznica interpretacji thek - Ty zalozyles, ze jest...   16.03.2010, 13:47:55
- - thek   Wiedza od autora na PW była dość ogólna z wczoraj ...   16.03.2010, 14:06:21
- - ddiceman   A skad zalozenie, ze to sluzy do kupowania czegoko...   16.03.2010, 14:12:59
- - masahuku   Nie zrozumiałem do końca pytania... . Jakby mnie k...   16.03.2010, 20:39:06
- - modern-web   [PHP] pobierz, plaintext <?php include('co...   16.03.2010, 20:49:44
- - thek   W logice. Zapytanie nie rozróżnia kodu już wykorzy...   16.03.2010, 21:24:25
- - modern-web   No ok... dopisałem wartość dla used_by = 0 (bo 0 m...   17.03.2010, 12:31:31


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 07:42