mysql_query nie zwraca true.
mysql_query zwraca zasób, albo false.
if (zasób)
przejdzie, czyli if (mysql_query('zapytanie'))
- ZAWSZE przejdzie, jeżeli tylko zapytanie jest poprawne składniowo itp.
Generalnie z tego co widzę to nie bierz się za bazy danych jak nie rozumiesz składni samego języka.
Zasób ogólnie jest akurat bliżej nieokreślony, ale dostęp do danych z zasobu masz poprzez odpowiednie funkcje. W przypadku zapytań SELECT w MySQL zasób zawiera wiersze (czyli pojedynczy zestaw danych), które pasują do zapytania. Czyli np. listę e-maili dodanych do bazy w ostatnim tygodniu (jak ułożysz zapytanie odpowiednie). Te wiersze pobierasz POJEDYNCZO przy pomocy mysql_fetch_assoc()
Twój kod powinien mniej więcej wyglądać tak:
// coś przeciw SQL Injection
$sQuery = "SELECT COUNT(*) as cnt FROM newsletters WHERE email='$email'"; // pobiera ilość wierszy pasujących do warunku where i zapisuje je pod kluczem `cnt`
$rResource = mysql_query($sQuery);
if (!$rResource) { die(mysql_error()); } // jeżeli rResource jest false, czyli zapytanie się nie powiodło - przerwij działanie skryptu
$aRow = mysql_fetch_assoc($rResource);
if ($aRow['cnt']>0) {
echo 'email jest w bazie danych';
}
else {
echo 'emaila nie ma';
}
O dziurze - Używasz $_POST['email'] w zapytaniu.
Zapytanie wygląda tak (zamiast $_POST['email'] dla ułatwienia piszę $zmienna):
SELECT * FROM tabela WHERE email = '$zmienna';
Jeżeli użytkownik prześle Ci np. znak średnika, to Twoje zapytanie będzie wyglądać:
SELECT * FROM tabela WHERE email = `;
I skrypt się wysypie.
Może też wysłać: ' OR 1=1 --
Zapytanie będzie wyglądać:
SELECT * FROM tabela WHERE email = '' OR 1=1 --'
Takie zapytanie zawsze się powiedzie. Tutaj pewnie nie ma to dużego znaczenia, ale w przypadku logowania do panelu administracyjnego np. można takim sposobem zalogować się jako admin bez hasła!
Jak się przed tym zabezpieczać? Teoretycznie poprzez mysql_real_escape_string() [googluj]. Ale musisz pamiętać o magic_quotes [googluj], które czasem jest włączone na serwerach - czasem nie. Czyli dodatkowe warunki i sprawdzanie. W praktyce powinieneś używać biblioteki do MySQL, najlepiej dla Ciebie - PDO [googluj]. Tylko, że to są obiekty. O obiektach nie możesz mieć pojęcia, skoro nie wiesz jak działa if
.
Ale generalnie to tak: książki Ci tu pisać nie będę. Nie rozumiesz podstaw, nie rozumiesz jak działa if, robisz kiepskie wcięcia uniemożliwiające płynny odczyt (przez człowieka) Twojego kodu, nie umiesz albo nie chcesz korzystać z Google (pisałem, żebyś poczytał o SQL Injection), nie umiesz korzystać z dokumentacji (tam masz przykłady jak korzystać z funkcji do MySQL, tam też znajdziesz czym jest Zasób) --- dlatego zamiast za forum, weź się za książkę. Postaraj się zrozumieć ją. Nie przeskakuj rozdziałów. Przykłady przepisuj, nie kopiuj i nie odpalaj i nie zapominaj o nich - to nie tak działa!
Co potrzebujesz:
DUŻO cierpliwości
Trochę samodzielności
Dużo chęci
Google
Dobrej książki