2013-03-04 2 views
-1

Итак, я создал простую форму входа в индексный файл, а php находится на внешней странице, но при попытке входа в систему я получаю следующее сообщение.PHP Неустранимая ошибка: вызов функции-члена real_escape_string()

(PHP Фатальная ошибка: Вызов функции члена real_escape_string() на не-объект в \ PDC3 \ сайтов \ с \ cupboard2stomach.com \ public_html \ PHP \ login.php в строке 26)

Здесь это форма Войти

<?php if (isset($error)): ?> 
      <p class="error"><?php echo $error; ?></p> 
      <?php endif; ?> 
       <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
        <input type="text" id="username" name="username" /><br /> 
        <label for="password">Password</label> 
        <input type="password" id="password" name="password" /><br /> 

        <input type="submit" value="Login" class="Login"/> 
       </form> 

Это внешний скрипт Войти

<?php 
$link = mysqli_connect("10.168.1.57", "cupboard_1256", "######", "cupboard_recipe"); 

if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 
// If the user is already logged in then redirect them to homepage 
if (isset($_SESSION['user_id'])) 
{ 

    exit(); 

} 

include 'PasswordHash.php'; 



$hasher = new PasswordHash(8, FALSE); 

if (!empty($_POST)) 
{ 
    // Again, never trust user input! 
    $user = $sql->real_escape_string($_POST['username']); 

    $query = "SELECT id, password, username, UNIX_TIMESTAMP(created) AS salt 
       FROM users 
       WHERE username = '{$user}'"; 
    $user = $sql->query($query)->fetch_object(); 

    /** 
    * Check that the query returned a result (otherwise user doesn't exist) 
    * and that provided password is correct. 
    */ 
    if ($user && $user->password == $hasher->CheckPassword($_POST['password'], $user->password)) 
    { 
     /** 
     * Set cookies here if/as needed. 
     * Set session data as needed. DO NOT store user's password in 
     * cookies or sessions! 
     * Redirect the user if/as required. 
     */ 
     session_regenerate_id(); 
     $_SESSION['user_id']  = $user->id; 
     $_SESSION['username']  = $user->username; 
     $_SESSION['authenticated'] = TRUE; 
     $_SESSION['signature']  = md5($user->id . $_SERVER['HTTP_USER_AGENT'] . $user->salt); 
     header('Location:../index.php'); 

    } 
    /** 
    * Don't provide specific details as to whether username or password was 
    * incorrect. If an attacker knows they've found a valid username, you've 
    * just made their life easier. 
    */ 
    else 
    { 
     $error = "Login failed."; 
    } 
} 
?> 
+0

Где указано $ sql ?; и научитесь использовать подготовленные инструкции с MySQLi, поэтому вам не нужно бежать –

+1

, где вы создали экземпляр '$ sql'? – dnagirl

+0

@MarkBaker - Я не вижу никаких функций mysql_xxx в вопросе. – SDC

ответ

4

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

Возможно, вы имели в виду $link->real_escape_string()?