[PHP] Skrypt Sprawdzający

http://wklej.org/id/384913/

$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ść.

W pierwszym wierszu users pozostaw bez pojedynczych cudzysłowów.

W ostatnim wierszu konstrukcja językowa echo chyba nie wymaga (), gdyż nie jest funkcją.

$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]

Nadal Nie działa.

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.

Ok, a można jakoś zgrupować te funkcje sprawdzające? Żeby było bardziej przejrzyście?

<?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]
<?

         $connect=mysql_connect("mysql.cba.pl", "omegaforce", "killer565" );

         mysql_select_db("omegaforce_c0_pl");          

          if($_POST['Nick'] && $_POST['Pass'] && $_POST['Repeat'] && $_POST['mail'])  

          {

           $ok=false;

           $pass=$_POST['Pass'];

           $login=$_POST['Nick'];

           $password=strtr($pass , "#!@$%^&*()-=_+{}][\":;'><,.?`~/*\||" , "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

           $login2=strtr($login , "#!@$%^&*()-=_+{}][\":;'><,.?`~/*\||" , "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

           if($pass!=$password || $login!=$login2)

            echo('');       


           elseif($_POST['Pass'] != $_POST['Repeat'])

             echo('');


           elseif(!($_POST['Nick'] || $_POST['Pass'] || $_POST['Repeat'] || $_POST['mail']))

            echo('');  


           elseif

           {

            $sql = "SELECT * FROM 'users' WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'";

             if ($result = mysql_query($sql))

              echo '';

           }

           else $ok=true;


           if ($ok==true)

            { 

             $Pass=$_POST['Pass'];

             $md5= md5($Pass);

             $sql2="INSERT INTO `users` (`login`, `pass`, `mail`, `kasa`, `sila`, `zrecznosc`, `celnosc`, `refleks`, `top`, `arena` ,`bron`, `rekawice`, `helm`, `buty`, `kamizelka`, `tarcza`, `lvl`) VALUES ('".$_POST['Nick']."', '$md5', '".$_POST['mail']."', '1000', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1')";

             $query= mysql_query($sql2);

             echo('');

            }

           }

          }

         echo('');

         echo(' ');

         echo('');

         echo('');

         echo('');

         echo('');

         echo('');

         echo('');

         echo('');

         echo('');

      ?>[/code]

Wiem że roi się od blędów ale czy to dobry pomysł jest?

W 37 linijce masz niepotrzebny nawias. Nie musisz stosować zmiennej “$ok=true;”, sprzeczność mozesz zakończyć die;.

http://wklej.org/id/385251/

Oprócz Twojego błędu jeszcze nie dałem warunku w jednej instrukcji elseif().

Nadal nie działa ta weryfikacja czy użytkownik już istnieje, ale jest bardziej uporządkowane.

$sql = "SELECT * FROM users WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'";

Poprawne zapytanie Na przyszłość dodawaj

if ($result = mysql_query($sql)or sqlerr( __FILE__ , __LINE__ ))

wtedy wiesz jak masz bląd w skaładni. //EDIT

$res = sql_query("SELECT * FROM users WHERE login='".$_POST['Nick']."' OR mail='".$_POST['mail']."'");

$arr = mysql_fetch_assoc($res);


             if ($arr > 0) {

              echo '';

			  }[/code]

To powinno działać.

http://wklej.org/id/385262/

Kur** nadal nie działa :(.

Tak, wiem, zajmę się od razu jak to zadziała.

http://wklej.org/id/385270/

nadal masz niezły bajzel w tym kodzie

  1. [*: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:

http://php.net.pl/manual/pl/function.mysql-query.php

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.

Racja - mój błąd. Taki skrót myślowy :smiley:

Zresztą już to kiedyś tłumaczyłem kolejne-pytania-skrypt-sprawdzajacy-t408166.html

http://wklej.org/id/385301/

cayman3_11 , nie rozumiem, o co ci chodzi z tym:

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.

To była tylko sugestia, możesz to zrobić inaczej.

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’]