У меня проблема с mysql и php - PullRequest
0 голосов
/ 06 мая 2010

У меня проблема, это мой код:

   $db = new mysqli("localhost", "root", "", "blah");

$result1 = $db->query("select * from c_register where email = '$eml' and password = '$pass'");

if($result1->fetch_array())

  {

        $auth->createSession();

        $_SESSION['user'] = 'client';

        promptUser("You have successfully logged in!!!","index.php");
  }

$db = new mysqli("localhost", "root", "", "blah");

$result2 = $db->query("select * from b_register where email = '$eml' and password = '$pass'");
  if($result2->fetch_array())

  {

         $auth->createSession();

         $_SESSION['user'] = 'business';

         promptUser("You have successfully logged in!!!","index.php");
  }
$db = new mysqli("localhost", "root", "", "blah");

$result3 = $db->query("select * from g_register where email = '$eml' and password = '$pass'");
  if($result3->fetch_array())

  {

        $auth->createSession();

        $_SESSION['user'] = 'employee';

        promptUser("You have successfully logged in!!!","index.php");
  }

$db = new mysqli("localhost", "root", "", "blah");

$result4 = $db->query("select * from k_register where email = '$eml' and password = '$pass'");
  if($result4->fetch_array())

  {

        $auth->createSession();

        $_SESSION['user'] = 'super';

        promptUser("You have successfully logged in!!!","index.php");
  }
  else

  {

        promptUser("Username/Password do not match.  Please try again!!!","");
  }

Достаточно забавно, этот код работает, но я не знаю, что я поступил неправильно. Я новичок в php и mysql, поэтому, пожалуйста, помогите. Я также попытался, например, result4->free(); для всех переменных, которые сохраняют данные, и я получил эту ошибку: Неустранимая ошибка: вызов функции-члена free () для необъекта в ...

Ответы [ 3 ]

1 голос
/ 06 мая 2010

Не повторяйся. Вы уже создали свой объект mysqli, поэтому используйте его повторно. Например:

$db = new mysqli("localhost", "root", "", "blah");
$result1 = $db->query("select * from c_register...");
$result2 = $db->query("select * from d_register...");
$result3 = $db->query("select * from e_register...");

Это сделает ваш код более разборчивым, и его будет легче изменить позже.

0 голосов
/ 06 мая 2010

Из руководства по PHP: mysqli :: query возвращает TRUE в случае успеха или FALSE в случае неудачи. Для SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query () вернет объект результата.

Итак, вы должны проверить это:


if ($result != false) {
  ...
} else {
  // print error or whatever
}

Btw. ОЧЕНЬ ОПАСНО не экранировать переменные типа $eml и $pass - если пользователь вводит $pass что-то вроде bleh' OR 1 = 1 OR password = 'bleh, тогда весь запрос будет выглядеть так:

select * from b_register where email = 'some@email.com' and password = 'bleh' OR 1 = 1 OR password = 'bleh'

и пользователь войдет в систему, не зная пароля!

Поэтому вы должны использовать:

mysql_real_escape_string($eml)
и то же самое для $pass.

Или еще лучше: используйте подготовку операторов и привязку параметров - см .: http://pl2.php.net/manual/en/mysqli.prepare.php

0 голосов
/ 06 мая 2010

mysqli :: query () возвращает объект результата только после успешного запроса.

Вам необходимо встроить чек:

if(($result1 != false) and ($result1->fetch_array()))  // The same for 2,3,4...

вы должны получить сообщение об ошибке, используя

echo $db->error;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...