inomi13
22.09.2020, 08:30:34
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.
$result = $connect->query("SELECT * FROM `persons` where name = "Jan Kowalski" and confirm = '1'");
if (!$result) throw new Exception($connect->error);
$how_name = $result->num_rows;
if($how_name>0)
{
$all_ok=false;
$_SESSION['e_name']=" Konto o takim imieniu i nazwisku potwierdziło już rejestrację";
}
nospor
22.09.2020, 09:06:30
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
22.09.2020, 09:12:07
to był błąd przy kopiowaniu na forum, wiem że musi być w takiej formie
$result = $connect->query("SELECT * FROM `persons` where name = 'Jan Kowalski' and confirm = '1'");
natomiast nadal nie rozwiązuje to mojego problemu.
nospor
22.09.2020, 09:24:15
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
22.09.2020, 09:33:29
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
22.09.2020, 09:44:04
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
22.09.2020, 09:52:10
ale wtedy w tym drugim przypadku drugi Kowalski powie "do chrzanu taki serwis, spadam stad"

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
22.09.2020, 10:13:07
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
22.09.2020, 10:18:03
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
22.09.2020, 10:31:06
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
22.09.2020, 10:49:57
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
22.09.2020, 10:56:56
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ę.
$result = $connect->query("SELECT * FROM `persons` where name = "Jan Kowalski" and confirm = '1'");
nospor
22.09.2020, 11:16:24
No to zamien
and confirm = '1'
na
and confirm = 0
i jak bedzie choc jeden taki jeden rekord to pozwoli na potwierdzenie rejestracji.
ufo1990
22.09.2020, 11:19:07
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
22.09.2020, 11:54:28
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
23.09.2020, 08:48:40
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.
$result= $connect->query("SELECT * FROM persons WHERE name='Jan kowalski' and confirm='0'");
$how_name = $result->num_rows;
if($how_name>0)
{
$all_OK=false;
$_SESSION['e_name']="Potwierdzono przybycie na ślub!";
}
trueblue
23.09.2020, 09:03:39
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
23.09.2020, 09:31:18
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
23.09.2020, 09:35:12
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.