我可以登录我的localhost,但无法登录网站

时间:2017-08-03 19:50:55

标签: php mysql mysqli pdo

我尽我所能。我不断收到查询错误,例如:mysql_query(): A link to the server could not be established。但是,在我的网站上,我可以使用mysqli而不是mysql查看我上传到我的数据库的所有内容。所以我正在考虑注册/登录系统,我需要改变它。以下是适用于本地主机的代码:

connection.php:

<?php
$connect_error = "Sorry, there are some connection issues! Check back shortly!";
mysqli_connect("localhost", "root", "", "lr") or die($connect_error);
mysqli_select_db("lr");
?>

int.php:

    <?php
session_start();
//error_reporting(0);


require("connect.php");
require("general.php");
require("users.php");



$errors = array();
?>

users.php:

    <?php

function change_password($user_id, $password){
    $user_id = (int)$user_id;
    $password = md5($password);

    mysql_query("UPDATE `users` SET `password` = '$password' WHERE `user_id` = $user_id");
}

function register_user($register_data){
    array_walk($register_data, 'array_sanitize');
    $register_data['password'] = md5($register_data['password']);

    $fields = '`' . implode('`, `', array_keys($register_data)) . '`';
    $data = '\'' . implode('\', \'', $register_data) . '\'';

    mysql_query("INSERT INTO `users` ($fields) VALUES ($data)");
}

function user_count(){
    return mysql_result (mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `active` = 1"), 0);
}

function user_data($user_id){
    $data = array();
    $user_id = (int)$user_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_get_args > 1){
        unset($func_get_args[0]);

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = mysql_fetch_assoc(mysqli_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));

        return $data;
    }
}


function logged_in(){
    return (isset($_SESSION['user_id'])) ? true :  false;
}

function user_exists($username) {
    $username = sanitize($username);
  return (mysql_result( mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` ='$username' "), 0) == 1) ? true : false;
}

function email_exists($email) {
    $email = sanitize($email);
  return (mysql_result( mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `email` ='$email' "), 0) == 1) ? true : false;
}

function user_active($username) {
    $username = sanitize($username);
return (mysql_result( mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` ='$username' AND `active` = 1 "), 0) == 1) ? true : false;
}

function user_id_from_username ($username) {
        $username = sanitize ($username);
        return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id');
}

function login($username, $password){
        $user_id = user_id_from_username($username);

        $username = sanitize($username);
        $password = md5($password);

        return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username`='$username' AND `password`='$password'"), 0)==1) ? $user_id : false;
}

?>

现在注意mysql而不是mysqli中的所有内容。

general.php:

    <?php


function array_sanitize(&$item){
    $item = mysql_real_escape_string($item);
}

function sanitize($data){
    return mysql_real_escape_string($data);
}

function output_errors($errors){
    $output = array();
    foreach($errors as $error){
        $output[] =  $error; 
    }
    return implode('', $output);
}
?>

的login.php:

    <?php
    ob_start();
    include("connect.php");
    include("int.php");

if(empty($_POST) === false){
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (empty($username) === true || empty($password) ===  true){
        $errors[] = '<div class="error-notice">
                     <div class="oaerror warning">
                     <strong>Oops!</strong>
                     You need to enter a username and a passsword!
                     </div></div>';
    }   else if(user_exists($username) === false){
        $errors[] = '<div class="error-notice">
                     <div class="oaerror info">
                     <strong>Hmm.</strong>
                     Username not found. Have you registered first?
                     </div></div>';
    }   else if(user_active($username) === false){
        $errors[] = '<div class="error-notice">
                     <div class="oaerror warning">
                     <strong>Oops!</strong>
                     Your account is not activated! Be sure to check your mail!
                     </div></div>';
    }   else{

        if (strlen($password) > 32){
            $errors[] ='<div class="error-notice">
                        <div class="oaerror warning">
                        <strong>Oops!</strong>
                        Your password is too long!
                        </div></div>';
        }

        $login = login($username, $password);
        if($login === false){
            $errors[] ='<div class="error-notice">
                        <div class="oaerror danger">
                        <strong>Uh oh!</strong>
                        Your Username/Password is incorrect!
                        </div></div>';
        } else{
            // set the user sesssion
            $_SESSION['user_id'] = $login;
            // redirect user to home
            header("Location: index.php");
            ob_end_flush();
            exit();
        }
    }
} else{
}
echo output_errors($errors);        

    if (logged_in() === true){
        header("Location: index.php");
        exit();
    }else{
    }

?>

就像我之前说的那样,我可以查看我上传到网站的所有内容,例如图片。这是代码,实际上有效:

$db = mysqli_connect("hostgator.com", "", "password", "photos");
        $sql = "SELECT * FROM images ORDER BY id DESC";
        $result = mysqli_query($db, $sql);
        while ($row = mysqli_fetch_array($result)) {
            echo "<a href='uploads/".$row['image']."' data-caption='".$row['text']."'> ";
                echo "<img  id='img_div' title='".$row['image']."' alt='".$row['image']."'  src='uploads/".$row['image']."'/>";
                //echo "<p id='img_div'>".$row['desc']."</p>";
                echo "</a>";
                echo'';

请注意,我使用的是mysqli_query,而不是mysql_query,它可以解决问题。无论如何我可以正确登录我的网站,因为我能够登录本地主机?这与mysql_querys有关吗?我只是不理解我的错误。

  

不推荐使用:mysql_real_escape_string():不推荐使用mysql扩展,将来会删除它:使用mysqli或PDO   而是在第9行的/home3/user/public_html/general.php中

     

警告:mysql_real_escape_string():访问被拒绝用户'用户'@'localhost'(使用密码:否)   第9行/home3/user/public_html/general.php

     

警告:mysql_real_escape_string():无法在第9行的/home3/user/public_html/general.php中建立指向服务器的链接

     

警告:mysql_result()要求参数1为资源,第48行/home3/user/public_html/users.php中给出布尔值

如果有更多信息,您只需要询问。

1 个答案:

答案 0 :(得分:0)

我认为这个问题是由于你的服务器上的php版本。 php从PHP 7.0.0中删除了mysql

您有两个选项

  1. 降级您的php版本
  2. 使用mydqli或PDO更新您的代码