Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwa rekordy o tej samej nazwie
Forum PHP.pl > Forum > Przedszkole
inomi13
Posiadam poniższą bazę danych


Mam problem kiedy w bazie danych są dwie osoby o tej samym imieniu i nazwisku. Mam poniższe zapytanie jednak nie spełnia ono swojego zadania.

  1. $result = $connect->query("SELECT * FROM `persons` where name = "Jan Kowalski" and confirm = '1'");
  2.  
  3. if (!$result) throw new Exception($connect->error);
  4.  
  5. $how_name = $result->num_rows;
  6. if($how_name>0)
  7. {
  8. $all_ok=false;
  9. $_SESSION['e_name']=" Konto o takim imieniu i nazwisku potwierdziło już rejestrację";
  10. }
nospor
Trudno zeby spelnialo skoro php pluje PARSE ERROR...

Nie mozesz w " wkladac "

Tak ma byc

$result = $connect->query("SELECT * FROM `persons` where name = 'Jan Kowalski' and confirm = '1'");

przenosze
ufo1990
to był błąd przy kopiowaniu na forum, wiem że musi być w takiej formie
  1. $result = $connect->query("SELECT * FROM `persons` where name = 'Jan Kowalski' and confirm = '1'");
natomiast nadal nie rozwiązuje to mojego problemu.
nospor
No to teraz, jak juz masz poprawny gramatycznie kod php, to w czym dokladnie problem? Co znaczy, ze nie rozwiazuje to twojego problemu? Co sie dzieje nie tak jak powinno?
ufo1990
tak jak napisałem powyżej. Mam w bazie danych dwie osoby o tym samym imieniu i nazwisku. Jeżeli jedna z osób zarejestruje konto to w bazie danych pojawi się w kolumnie confirm "1", natomiast jeżeli druga osoba o takim samym imieniu i nazwisku będzie chciała zarejestrować konto to powyższy kod php zwróci błąd "Konto o takim imieniu i nazwisku potwierdziło już rejestrację".
trueblue
Albo umożliwiaj rejestrację osobom o tym samym imieniu i nazwisku (tak powinno być), albo uniemożliwaj (wtedy nie wpadnie do bazy drugi rekord).
gino
ale wtedy w tym drugim przypadku drugi Kowalski powie "do chrzanu taki serwis, spadam stad" smile.gif Możesz utworzyć w tabeli pole z kluczem złożony np. z nazwiska i id i będziesz wiedział który to Kowalski, bo będzie 1Kowalski, 2Kowalski jak nie masz innych danych typu pesel itd.

gino
ufo1990
ok powyższe sugestie rozwiązują problem, natomiast pracuje nad podobnym projektem w którym ręcznie wprowadzane są do bazy danych imiona i nazwiska osób które będą uczestniczyć w evencie i tam też oczywiście mogą wystąpić osoby o tym samym imieniu i nazwisku. Co w sytuacji jeżeli jedna z osób potwierdzi swoje przybycie ? druga osoba o tym samym imieniu i nazwisku nie będzie mogła tego zrobić ponieważ system zwróci błąd "potwierdziłeś już przybycie". Jak rozwiązać taki przypadek ?
gino
dobrze, ale na takie eventy nie logujesz się danymi imię nazwisko, tak naprawdę może zarejestrować się 1000 Kowalskich i nie może być sytuacji w której Twój kod odrzuci już drugiego. Inna sprawa: co innego jest rejestracja o co innego potwierdzenie rejestracji. Pierwszą robi zazwyczaj klient drugą robi Twój kod po zweryfikowaniu danych. W takim przypadku programowi jest wszystko jedno kto się zarejestrował, ma tylko sprawdzić poprawność danych, klepnąć pole confirm i wysłać klientowi że jest zalogowany. Jeśli ta tabela jest kompletna, to nie ma sposobu rozróżnienia który Kowalski jest który. Nie opisałeś dokładnie co chcesz robić, czy to tylko wycinek tabeli, czy klient podaje więcej danych, jak powiadamiasz osobę o klepnięciu rejestracji. Pobierz chociaż emial.

gino


edit: coś mi komp zaświrował, więc dokończę: a nawet jak zalogują się imieniem i nazwiskiem to system dla rozróżnienia osoby poprosi poprosi o email
ufo1990
też myślałem że dobrym rozwiązaniem było by dorzucić kod, który wprowadzała by dana osoba i to by rozwiązało problem osób o tym samym imieniu i nazwisku. Jednak wytyczne jakie dostałem to że dana osoba ma wejść na stronę wpisać tylko i wyłącznie swoje imię i nazwisko i jeżeli się zgadza to ma otrzymać komunikat że "potwierdzono przybycie". Na ten moment tabela ma kolumny id, name, confirm. Już nawet nie chodzi o to która z osób o tym samym imieniu i nazwisku potwierdziła przybycie tylko każda z osób aby miała taką możliwość.
nospor
No i super, poraz kolejny sie pytam w czym problem. Nie pisz mi prosze po raz kolejny tego co juz pisales tylko napisz co ci nei dziala. Widze ze masz kod, ktore sprawdza istnienie i zapisuje komunikat bledu. Nie masz nic wiecej, czy masz cos wiecej tylko ci nei dziala? To pokaz tez to cos wiecej i napisz konkretnie ktory kawalek nie dziala
ufo1990
Chciałbym tak przerobić poniższe zapytanie aby mimo znalezienia jednego rekordu, który już ma confirm='1"', kolejnej osobie o tym samym imieniu i nazwisku i mającej confirm='0' pozwolił potwierdzić rejestrację.
  1. $result = $connect->query("SELECT * FROM `persons` where name = "Jan Kowalski" and confirm = '1'");
nospor
No to zamien
and confirm = '1'

na
and confirm = 0

i jak bedzie choc jeden taki jeden rekord to pozwoli na potwierdzenie rejestracji.
ufo1990
To nie jest rozwiązanie bo jeżeli ktoś już potwierdzi przybycie to system ponownie go przepuści i w nieskończoność będzie mógł potwierdzać.
trueblue
W nieskończoność nie, w tym przypadku dwukrotnie - raz za siebie, raz za inną osobę.
Wciąż nie dostrzegasz problemu, o którym każdy Ci wspomina?
ufo1990
Przerobiłem zapytanie według waszych sugestii i nadal to nie działa tak jak chce, ponieważ jeżeli jeden z Janów Kowalskich ma ustawione confirm='0' a drugi confirm ='1' to zapytanie zadziała w w przypadku tego pierwszego.
  1. $result= $connect->query("SELECT * FROM persons WHERE name='Jan kowalski' and confirm='0'");
  2. $how_name = $result->num_rows;
  3. if($how_name>0)
  4. {
  5. $all_OK=false;
  6. $_SESSION['e_name']="Potwierdzono przybycie na ślub!";
  7. }

trueblue
Przecież tu nie chodzi o zapytanie, tylko o błąd logiczny.
Musisz dodać inny identyfikator, bo nie rozróżnisz dwóch Kowalskich. Jeden może potwierdzić, a dwóch przyjdzie z informacją, że obydwaj potwierdzili. Jak udowodnisz, który z nich mówi prawdę?
Dopóki nie dodasz unikalnego identyfikatora (mail, numer telefonu, pesel), to możesz nadal głowić się nad zapytaniem.
gino
Cytat
Jednak wytyczne jakie dostałem to że dana osoba ma wejść na stronę wpisać tylko i wyłącznie swoje imię i nazwisko i jeżeli się zgadza to ma otrzymać komunikat że "potwierdzono przybycie".

Więc pozostaje Ci się modlić aby nie zaszła sytuacja o dwóch osobach o takich samych personaliach albo przekonać tego kto Ci to zlecił do dołożenia pola np. mailowego. Już pisałem o tym parę postów wyżej.

gino
trueblue
Generuj unikalny kod dla użytkownika w czasie rejestracji (np. Q4AMU) i wyświetl na ekranie. Kiedy będzie chciał potwierdzić rejestrację, poproś o ten kod.
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.