使用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;
}
?>
在PHP(7+),您必须use mysqli
instead的新版本。大体上,您可以将每个mysql_*
函数更改为mysqli_*
并使其工作。例如,mysql_connect();
将变得mysqli_connect();
等
这并不那么简单,因为mysql_ *和mysqli_ *函数之间的一些参数不同。 – Jeff
谢谢。现在它可以工作,但我得到了一些警告'警告: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();
}
如果你正在使用PHP 7,那么你可以使用的mysql_connect,请尝试使用PDO或mysqli的像MySQL已被弃用,并且从PHP 7 – Exprator
删除检查php版本使用phpinfo()方法。如果您的PHP版本> = 7,则使用PDO或mysqli – Prasad
您使用哪个php版本?因为函数mysql_connect()已从5.5及以上版本弃用 – Seltjoek