使用PHP创建登录页面:致命错误:未捕获错误:调用未定义函数mysql_connect()

问题描述:

我使用PHP,HTML和JavaScript创建登录页面。我创建了一个MySQL数据库myDB和一个包含可以访问该平台的用户的表platform_admins。 但是,一旦我点击登录按钮,我得到这个错误:使用PHP创建登录页面:致命错误:未捕获错误:调用未定义函数mysql_connect()

Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /opt/lampp/htdocs/WebPlatform/include/DatabaseConector.php:28 Stack trace: #0 /opt/lampp/htdocs/WebPlatform/include/DatabaseConector.php(57): DatabaseConector::ConectToDatabase() #1 /opt/lampp/htdocs/WebPlatform/include/User.php(40): DatabaseConector::ExecuteQuery('SELECT id FROM ...') #2 /opt/lampp/htdocs/WebPlatform/login.php(14): User::checkLogin('user', '1a1dc91c907325c...') #3 /opt/lampp/htdocs/WebPlatform/pages.php(22): include('/opt/lampp/htdo...') #4 /opt/lampp/htdocs/WebPlatform/index.php(8): include('/opt/lampp/htdo...') #5 {main} thrown in /opt/lampp/htdocs/WebPlatform/include/DatabaseConector.php on line 28

错误说,功能mysql_connect()是不确定的,但是据我了解这是一个built-in function in PHP。我无法弄清楚如何解决这个错误。

UPDATE:

我代替所有mysql_*通过mysqli_*,现在我得到这些警告。看来我无法连接到数据库:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /opt/lampp/htdocs/WebPlatform/include/User.php on line 42 Warning: session_destroy(): Trying to destroy uninitialized session in /opt/lampp/htdocs/WebPlatform/login.php on line 30

的login.php

<?php 
    @session_start(); 
    $error = 0; 
    if (isset($_POST["user"]) && isset($_POST["pass"])) { 

     include_once 'include/User.php'; 

     $user = $_POST['user']; 
     $pass = $_POST['pass']; 

     $error = 0; 

     $user = User::checkLogin($user, md5($pass)); 

     if(!is_object($user) && $user == 0){ 
      $error = 1; 
      session_destroy(); 
     } 

     if($error == 0){ 
      $_SESSION['loged'] = 1; 
      $login = TRUE; 
      $_SESSION['userid'] = $user->id; 
      $_SESSION['username'] = $user->name." ".$user->surename; 
      header("Location: index.php?pagina=1"); 
     } 
     else{ 
      $error = 1; 
      session_destroy(); 
     } 
    } 
?> 
<div class="form_login"> 

    <form action="index.php?pagina=0" method="POST"> 
     <div class="form_login_line"> 
      <div class="form_login_txt"> 
       Username: 
      </div> 
      <div class="form_login_input"> 
       <input type="text" name="user" size="15" value="user"/> 
      </div> 
     </div> 
     <div class="form_login_line"> 
      <div class="form_login_txt"> 
       Password: 
      </div> 
      <div class="form_login_input"> 
       <input type="password" name="pass" id="pass" size="15" value="pass"/> 
      </div> 
     </div> 
     <div class="form_login_line"> 
      <div class="form_login_submit"> 
       <input id="input_login_error" type="button" value="Login" onclick="submitForm()"/> 
      </div> 
     </div> 
    </form> 

    <div id="login_error">The username or password are incorrect or don't have access permissions.</div> 

</div> 
<?php if($error == 1): ?> 
    <script>$("#login_error").show();</script> 
<?php endif;?> 
<script> 
    page_name("Login"); 

    function submitForm(){ 
     //$("#pass").val(sha1($("#pass").val())); 
     $('form').prepend('<input type="submit" id="submit5548" style="display: none"/>'); 
     $("#submit5548").click(); 
    } 
</script> 

user.php的

<?php 
    if (!function_exists("my_autoload")) 
    { 
     function my_autoload($class_name) {  
      require_once "include/$class_name.php"; 
     } 
    } 
    spl_autoload_register('my_autoload'); 

    class User { 
     public $username; 
     public $name; 
     public $surename; 
     public $email; 
     public $id; 

     function __construct($id = -1) { 
      if($id != -1) { 
       $query = "SELECT * FROM platform_admins WHERE id = $id"; 
       $res = DatabaseConector::ExecuteQuery($query); 
       while($row = mysql_fetch_array($res)){ 
        $this->id = $row['id']; 
        $this->username = $row['username']; 
        $this->name = $row['name']; 
        $this->surname = $row['surename']; 
        $this->email = $row['email']; 
       } 
      } 
     } 

     /** 
     * 
     * Check the users exist into Database. 
     * @param unknown_type $user User 
     * @param unknown_type $pass Encrypted Password 
     * @return User object or 0 if don't exist 
     */ 
     static function checkLogin($user, $pass){ 
      $query = "SELECT id FROM platform_admins WHERE username LIKE '$user' AND pass LIKE '$pass'"; 
      $res = DatabaseConector::ExecuteQuery($query); 
      $return = 0; 
      while ($row = mysql_fetch_array($res)){ 
       $return = new User($row['id']); 
      } 
      return $return; 
     } 

     public function serialize(){ 
      return Tools::SerializeAndEncode($this); 
     } 

    } 

?> 

DatabaseConector.php

<?php 
    if (!function_exists("__autoload")) 
    { 
     function __autoload($class_name){ 
      require_once 'include/'. $class_name . '.php'; 
     } 
    } 

    /** 
    * 
    * Connector to Database 
    * 
    */ 
    class DatabaseConector { 

     /** 
     * 
     * Connect to database 
     * @return Conection 
     */ 
     private static function ConectToDatabase(){ 
      $dbhost = Config::$DBhost; 
      $dbname = Config::$DBname; 
      $dbuser = Config::$DBuser; 
      $dbpass = Config::$DBpass; 
      $db = new DatabaseConector(); 
      $con = @mysql_connect($dbhost,$dbuser,$dbpass); 
      @mysql_select_db($dbname,$con); 
      if(mysql_errno($con)) 
      { 
       Firelog::showError("Error to BDD conect: ".mysql_error($con)); 
      } 
      return $con; 
     } 

     /** 
     * 
     * Diconect to databae 
     * @param unknown_type $con Connection 
     */ 
     private static function DisconectDatabase($con){ 
      @mysql_close($con); 
     } 

     /** 
     * 
     * Execute query in bdd 
     * @param unknown_type $query String with query 
     * @return Result of the execute query 
     */ 
     public static function ExecuteQuery($query){ 
      if($query == ""){ 
       Firelog::showError("The query is empty"); 
       return null; 
      } 
      $con = DatabaseConector::ConectToDatabase(); 

      if(Tools::startsWith($query, "INSERT") || Tools::startsWith($query, "UPDATE") || Tools::startsWith($query, "DELETE")) 
       Firelog::showWarn(" -- [QUERY]: ".$query); 
      else 
       Firelog::showLog(" -- [QUERY]: ".$query); 

      $res = @mysql_query($query,$con); 
      if(mysql_errno($con)) 
      { 
       Firelog::showError("Error to BDD conect: ".mysql_error($con)); 
      } 
      DatabaseConector::DisconectDatabase($con); 
      return $res; 
     } 



    } 

connect_db.php

<?php 

    $urldb = "localhost"; 
    $namedb = "myDB"; 
    $userdb = "root"; 
    $passdb = "123"; 


    function connectDB() 
    { 
     global $urldb, $namedb, $userdb, $passdb; 
     $condb = mysql_connect($urldb, $userdb, $passdb); 
     mysql_select_db($namedb, $condb); 
     return $condb; 
    } 


    function closeDB($condb) 
    { 
     mysql_close($condb); 
    } 


    function ejecutar_query($sql) 
    { 
     $condb = connectDB(); 
     $res = mysql_query($sql); 
     closeDB($condb); 
     return $res; 
    } 


    function ejecutar_query_id($sql) 
    { 
     $condb = connectDB(); 
     mysql_query($sql); 
     $id = mysql_insert_id($condb); 
     closeDB($condb); 
     return $id; 
    } 

?> 
+3

如果你正在使用PHP 7,那么你可以使用的mysql_connect,请尝试使用PDO或mysqli的像MySQL已被弃用,并且从PHP 7 – Exprator

+0

删除检查php版本使用phpinfo()方法。如果您的PHP版本> = 7,则使用PDO或mysqli – Prasad

+0

您使用哪个php版本?因为函数mysql_connect()已从5.5及以上版本弃用 – Seltjoek

在PHP(7+),您必须use mysqli instead的新版本。大体上,您可以将每个mysql_*函数更改为mysqli_*并使其工作。例如,mysql_connect();将变得mysqli_connect();

+1

这并不那么简单,因为mysql_ *和mysqli_ *函数之间的一些参数不同。 – Jeff

+0

谢谢。现在它可以工作,但我得到了一些警告'警告:mysqli_fetch_array()期望参数1是/ opt/lampp/htdocs/WebPlatform/include/User中给出的mysqli_result,null。php 42行 警告:session_destroy():尝试销毁第30行中的/opt/lampp/htdocs/WebPlatform/login.php中的未初始化会话 – Dinosaurius

This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.

正如在php manual所提到的,所提到的扩展已被弃用。

我解决了这样的警告问题:

 if(session_status() === PHP_SESSION_ACTIVE) { 
      session_unset(); 
      session_destroy(); 
     }