Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sprawdzanie rekordu
Forum PHP.pl > Forum > Przedszkole
iqique
Witam.

Mam tabelę w której zapisywani są uczestnicy eventów. Tabela składa się między innymi z pola id, event_id oraz email. Każdy kolejny uczestnik który się zapisze dostaje wpis z kolejnym id ale też z event_id które się powtarzają. Mój problem polega na tym, że chcę zablokować możliwość rejestracji użytkownikowi, który już raz zarejestrował się w danym evencie. Chcę to robić na podstawie maila. Sprawdzam więc na początku kto jest zalogowany, następnie jego mail. Na tym etapie mam problem. Jak skonstruować zapytanie aby sprawdzić czy user z danym mailem jest już w bazie pod danym event_id?

Grzebałem trochę na forum i w necie i uskrobałem coś takiego:


  1. $rekordy = mysql_query("select email from jos_events_members where event_id='$row->id';");
  2. if(mysql_num_rows($rekordy)==0)
  3. {
  4. $spr=1; //nie istnieje
  5. }
  6. else
  7. {
  8. $spr=2; //istnieje
  9. }


proszę o jakąś podpowiedź
nospor
nie: $rekordy = mysql_query("select email from jos_events_members where event_id='$row->id'");
a: $rekordy = mysql_query("select email from jos_events_members where event_id='{$row->id}'");
Podstawy tekstów. Wypadałoby się z nimi zapoznać:
http://www.php.net/manual/pl/language.types.string.php

Oraz zapoznaj się z tym:
Temat: Jak poprawnie zada pytanie
Też bardzo ciekawe rzeczy dla początkujących
iqique
Rozumiem ten błąd i zapoznałem się też z podanymi przez Ciebie linkami. Jednak ta poprawka niczego nie zmieniła. Proszę o wskazówkę co zrobiłem źle.
nospor
Co zrobiłeś źle to ja ci już poprawiłem.
Jeśli nadal ci nie działa, to zapoznaj się jeszcze raz z tym linkiem:
Temat: Jak poprawnie zada pytanie
I do niego zastosuj. Pojawią się wówczas dodatkowe dane do analizy. Bo przecież z fusów nie oczekujesz od nas wróżenia?
iqique
Zastosowałem się do wskazówek i posprawdzałem zmienne i zapytanie do bazy. Wszystkie są ok. Problem pojawia się na etapie samego porównywania czy email jest w tabeli. Wystarczy że jest tam jakikolwiek i wyświetla, że istnieje.
nospor
No to w takim razie warunek:
event_id='{$row->id}'
jest spełniony. Jeśli więc to ci nie pasuje, to zmień to na taki, jaki ci będzie pasował.
iqique
Jeśli dobrze pojmuje to ten kod sprawdza czy w tabeli w kolumnie email przy konkretnym event_id jest wpis. Ja potrzebuje jednak sprawdzić konkretnie czy w kolumnie posiadającej event_id=10 jest email cos@cos.pl tu mam problem.

btw. Chciałem dodać, że mimo tego, że nie sprecyzowałem pytania to jednak dział przedszkole, a po Twoich odpowiedziach nie bardzo rozumiem czy chcesz mi pomóc czy udowodnić, że jestem idiotą.
nospor
Cytat
a po Twoich odpowiedziach nie bardzo rozumiem czy chcesz mi pomóc czy udowodnić, że jestem idiotą.
Skąd taki wniosek? To, że odsyłam cię do przydatnych linków nie jest oznaką, że traktuję cię jak idiotę a że próbuje ci pomóc. Czy Twoim zdaniem pomoc polega tylko i wyłącznie na dawaniu wszystkiego pod nos?

Cytat
Jeśli więc to ci nie pasuje, to zmień to na taki, jaki ci będzie pasował.
Jeśli zaś czepiasz się tej odpowiedzi to jak ci niby miałem odpowiedziećquestionmark.gif Skoro ci znajduje rekord, znaczy ze warunek jest spełniony - proste. Miałem wywróżyć, że tobie chodzi o coś innego?

Cytat
Ja potrzebuje jednak sprawdzić konkretnie czy w kolumnie posiadającej event_id=10 jest email cos@cos.pl tu mam problem.
Ciężko było tak od razu napisać? Jakbyś napisał to już dawno byś dostał taką odpowiedź:

to dodaj ten drugi warunek do zapytania:
event_id='{$row->id}' and email='cos@cos.pl'

I trochę luzu na przyszłość. Nikt cię tu za idiotę nie uważa.
iqique
Dokładnie wyjaśniłem w pierwszym poście o co mi chodzi. Prosiłem o wskazówki a nie o podanie na tacy. W zasadzie to dostałem:D Dziękuję za odpowiedź. W międzyczasie wymyśliłem inne rozwiązanie. Szkoda, że główkowałem nad tym zamiast poszukać innego rozwiązania biggrin.gif

  1.  
  2. $rekordy = mysql_query("select email from jos_events_members where event_id='$eventid';");
  3. $rec = mysql_fetch_array($rekordy);
  4.  
  5. if (in_array( $email, $rec)) {
  6. echo "jest";
  7. }else {echo 'nie ma';};
  8.  


ps.ja mam sporo luzu, ale czasem na tym forum odnoszę wrażenie, że moglibyście je wyłączyć i napisać na głównej odsyłamy do manuala biggrin.gif

pozdrawiam
nospor
Cytat
Dokładnie wyjaśniłem w pierwszym poście o co mi chodzi.
Wybacz, może nie doczytałem. Skupiłem się na błędzie, który powodował wywalenie się zapytania.

Cytat
ale czasem na tym forum odnoszę wrażenie, że moglibyście je wyłączyć i napisać na głównej odsyłamy do manuala
Forum nie jest od wyjasniania totalnych podstaw. Jak ktoś ma z tym problem, a ty z tym stringiem miałeś, to podajemy mu link, gdzie może się dokształcić. Czemu mamy wyjasniać komuś coś, co jest już wyjaśnione i opisane na przykładach w dokumentacji i dany user powinien w pierwszej kolejności tam zajrzeć.

Cytat
if (in_array( $email, $rec)) {
To jest nieoptymalne. Zrób tak jak ja ci podałem. Nie ma sensu pobierać z bazy rekordów tylko po to by potem w php i tak to wszystko sprawdzać. Lepiej by to baza wykonała pracę za ciebie i zwróciła tylko to co potrzebujesz. Ucz się pisać optymalnie i luz chłopie wink.gif
iqique
Dwa pytania średnio odbiegające od tematu. Co do optymalizacji kodu. Czy jest aż taka różnica czy to się wykona w php czy bezpośrednio w bazie? W zasadzie i tak wykona się na tym samym serwerze. Druga sprawa czy ma sens o tym rozmyślać kiedy zamierzam pobierać z bazy maksymalnie 20-30 wpisów przy zapytaniu?
abort
Widać nigdy nie miałeś do czynienia z sytuacjami, gdy:
- serwer SQL był na innej, DEDYKOWANEJ maszynie
- rąbnąłeś się w zapytaniu i dostałeś tak ze 100 razy więcej danych (100*1=100, 100*20=2000).

Pod rozwagę:
- zapytania SQL w zasadzie mogą być spowolnione tylko przez narzut potrzebny na odczytanie danych z dysku (+lagi na sieci, ale dla localhosta to nie problem)
- najprostszy test: policz posty na dowolnym forum, zarówno w wersji zliczania wprost w zapytaniu SQL, jak i w obróbce danych przez PHP. Jako przykład weź różne fora, z tym włącznie (strona główna forum zeznaje: "Nasi użytkownicy napisali 874 541 postów"). Weź pod uwagę, że dla każdego z tych postów w wersji z liczeniem w PHP musisz przetransferować dane każdego posta, z treścią włącznie. Zaświeciła się czerwona lampka?
iqique
Przepaliła się prawie.
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.