2014-12-22 17 views
-2

Я кодирую страницу входа/регистрации. Я хочу защитить форму от инъекций sql, используя mysqli_real_escape_string(). Если я использую его, функция возвращает NULL.Почему mysqli_real_escape_string() возвращает NULL?

И я не знаю, почему ... Я искал, и я обнаружил, что, возможно, я не подключен к базе данных, но с тех пор я могу запросить его.

Это код, который я использую для подключения к базе данных (db.php):

<?php 
$con = mysqli_connect("localhost","user","pass","database"); 

// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
?> 

Код, который возвращает NULL:

include("includes/db.php"); 
function escapeInput($data) { 
    $data = trim($data); 
    $data = htmlspecialchars($data); 
    $data = stripslashes($data); 
    $data = mysqli_real_escape_string($con, $data); 
    return $data; 
} 
if (isset($_SESSION['username'])){ 
    header("Location: home.php"); 
} 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    if($_POST['action'] == 'login') 
    { 
    $username = escapeInput($_POST['username']); 
    $password = escapeInput($_POST['password']); 
    var_dump($username); 
    $password = sha1($password, true); 
    $login = "SELECT COUNT(*) FROM users WHERE username = '$username' AND password = '$password'"; 
    $result = mysqli_query($con,$login); 
    $user = mysqli_fetch_array($result, MYSQLI_NUM); 
    if($user[0]) { 
     echo '<div class="alert alert-success" role="alert">Successfuly logged in.</div>'; 
     // Store Session Data 
     $_SESSION['username'] = $username; // Initializing Session with value of PHP Variable 
     header("Location: home.php"); 
     die();      
    } 
    else echo '<div class="alert alert-danger" role="alert">Incorrect username and/or password.</div>'; 
    } 
} 
+0

Вы можете добавить код с 'mysqli_real_escape_string()', который возвращает 'NULL' – gellu

+1

Вы передаете соединение DB с этой функцией в качестве первого параметра? Если вы не были связаны, вы увидите «echo» Не удалось подключиться к MySQL: ». mysqli_connect_error(); '- Показать другой код. –

+0

Если у вас нет ошибок в mysqli_connect_errno(); он не будет показывать никаких ошибок. –

ответ

0

В действительности, если вы хотите закодировать страницу входа в систему в эти дни, вы не должны использовать устаревший код. Вы должны посмотреть на PDO. Я сделал прыжок, и сначала это казалось страшным, но это была одна из лучших вещей, которые я когда-либо делал. Это так просто.

$Qry = $db->prepare("SELECT COUNT(username) FROM users WHERE username = :User AND password = Pass"); 
$Qry->execute(array(':User'=>$username, ':Pass'=>$password)); 

Затем вы можете использовать

$Qry->rowCount(); 

Вы должны изменить строку подключения, но это гораздо более безопасным и будущее дружественных

Prepared Statements

0

Попробуйте это:

$data = mysqli_escape_string($con, $data);

Вам необходимо передать объект подключения в качестве первого параметра.

+1

Он по-прежнему возвращает NULL – DanyBv

+0

У меня есть симпатичный случай. Мой код отлично работает в режиме fpm, но возвращает 'NULL' в режиме cli. – DUzun

0

mysqli_real_escape_string() требует два параметра:

  1. Ресурс связи (созданный по телефону mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);)
  2. Строка.

г mysqli_real_escape_string() всегда возвращает null, когда первый параметр null. Поэтому убедитесь, что вы создали объект соединения и что вы еще не закрыли его с помощью mysqli_close().

Смежные вопросы