Ben MySQL ve PHP ile ilgili bir sorun var

3 Cevap php

Ben bir sorun var, bu benim kod:

   $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!!!","");
  }

Komik yeterince bu kod çalışır, ama ben hayır ben bu konuda yanlış yola gitti. PHP ve MySQL ile yeni, bu yüzden lütfen yardım. Ben de mesela result4->free(); verileri kaydetmek tüm değişken için çalıştı ve ben aldım bu hata: Fatal error: Call to a member function free() on a non-object in...

3 Cevap

Kendinizi tekrarlamayın. Zaten mysqli nesne yapılmış, bu yüzden yeniden. Örneğin:

$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...");

Bu daha sonra değiştirmek için, kodunuzu daha okunaklı ve kolay hale getirecek.

mysqli::query() sadece başarılı bir sorgudan sonra bir sonuç nesne döndürür.

Sen bir çek inşa etmek gerekir:

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

kullanarak hata mesajı almalısınız

echo $db->error;

From PHP Manual: mysqli::query returns TRUE on success or FALSE on failure. For SELECT, SHOW, DESCRIBE or EXPLAIN mysqli_query() will return a result object.

Yani bunu test etmelisiniz:


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

Btw. it is VERY DANGEROUS not to escape variables like $eml and $pass - if a user type as $pass something like: bleh' OR 1 = 1 OR password = 'bleh, then the whole query will look like:

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

ve kullanıcı doyurmaya get logged without knowing the password!

Bu nedenle kullanmanız gerekir:

mysql_real_escape_string($eml)
ve $pass için aynı.

Veya daha da iyisi: kullanmak statement preparing and parameters binding - bkz: http://pl2.php.net/manual/en/mysqli.prepare.php