$sql= "SELECT * FROM 'users' WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'";
$var= mysql_query(mysql_fetch_assoc($sql));
if ($var['login'] || $var['mail'])
echo('');
[/code]
Gdzieś jest błąd w zapytaniu lecz nie mogę go znaleść.
$sql= "SELECT * FROM users WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'";
$var= mysql_query(mysql_fetch_assoc($sql));
if ($var['login'] || $var['mail'])
echo '';[/code]
Najpierw musisz wykonać zapytanie, potem wydobyć wynik:
$sql = "SELECT * FROM 'users' WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'";
if ($result = mysql_query($sql))
{
while ($row = mysql_fetch_assoc($result))
{
if ($row['login'] || $row['mail'])
{
echo '';
break;
}
}
}
else
{
// Dalsze instrukcje
}[/code]
Wcześniej musisz sprawdzić, czy zmienne $_POST danych logowania są poprawne i nie są czasem puste. Poza tym echo() nie jest funkcją jak wpomniał si@tk@rz, ale nawiasy zupełnie nie przeszkadzają :).
PS
W zasadzie wystarczy sprawdzić zmienna $result:
[code]$sql = “SELECT * FROM ‘users’ WHERE login=’”.$_POST[‘Nick’]."’ OR mail=’".$_POST[‘mail’]."’"; if ($result = mysql_query($sql)) { echo ‘Użytkownik o tym nicku lub mailu już istnieje.’; } else { // Dalsze instrukcje }
ale sprawdź dokładnie, bo piszę z głowy, a już późno jest i nie mam ochoty już na nic :? .
Jeśli zrobię tak jak w Twoim 2 listingu to czy jeśli dane w formularzu będą puste to też wykona wynik? Kiedyś tak zrobiłem i jak formularz był pusty to wyskoczyło mi ze zmiennej jakiejś tam już nie pamiętam nazwy wartość “Resource id #2” coś takiego.
Najpierw sprawdź dane i w przypadku pustego lub niepoprawnego maila, czy też pustego nicka wyślij użytkownikowi stosowny komunikat. Dopiero po sprawdzeniu poprawności danych wyślij zapytanie do bazy danych.
<?PHP
// ZMienne nick i mail
$nick = $_POST['Nick'];
$mail = $_POST['mail'];
// Funkcja sprawdzajaca
if ($nick == empty OR $mail == empty)
{
die('Pusty nick lub e-mail.');
}
// Zapytanie
$sql = "SELECT * FROM 'users' WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'";
if ($result = mysql_query($sql))
{
echo '';
}
else
{
// Dalsze instrukcje
}
?>[/code]
[*:mfiyrdqb]W linii 47. jeżeli, którykolwiek element $_POST z podanych nie będzie pusty albo niezdefiniowany to warunek nie będzie spełniony, a chyba nie o to chodziło
@cayman. Co do SQL Injection, to wspomniałem, żeby sprawdzić poprawność przysyłanych zmiennych $_POST, więc mam nadzieję, że Ry4n370z zrozumiał o czym napisałem. Powyższy kod to tylko fragment, a nie całość skryptu, więc nie zawiera zabezpieczeń o które Ry4n370z sam się powinien zatroszczyć :). W każdym razie jego skrypt w ogóle mi się nie podoba, napisałbym to inaczej ;].
Poza tym źle piszesz, warunek sprawdzający nie zawsze będzie prawdziwy:
Ale masz rację, wystarczy ‘mysql_num_rows()’ w tym przypadku :). Nie zda egzaminu przy ‘mysql_unbuffered_query()’, którą to funkcję ja stosuję, dlatego nie pomyślałem :D.
Ponieważ według mnie jest dobrze. Skrypt sprawdza czy mail i nick jest wpisany po czym pobiera dane na ich podstawie i następna instrukcja if sprawdza, czy coś pobrało z bazy danych. Jeśli coś ściągnęło pokazuje komunikat.
Chodziło mi o to, że warunek w 17. linii został już sprawdzony w 4. Ten w 17. w tej sytuacji będzie zawsze prawdziwy, więc jest zbędny. Dodatkowo z jego powodu nigdy nie wykona się $ok=true; (24.)
Zamiast niego w elseif może być warunek z linii 20. oczywiście poprzedzony $res = mysql_query(“SELECT * FROM users WHERE login=”.$_POST[‘Nick]."’ OR mail=’".$_POST[‘mail’]."’"); (musi być przed linią 11. albo wcześniej)
albo zmodyfikowany tak by wszystko było w jednej linii elseif (mysql_num_rows(mysql_query(“SELECT * FROM users WHERE login=”.$_POST[‘Nick]."’ OR mail=’".$_POST[‘mail’]."’")))
ps. wielkość liter ma znaczenie, więc $_POST[‘nick’] != $_POST[‘Nick’]