2012-01-16 3 views
0

Я посмотрел на предыдущие неопределенные вопросы об ошибках, чтобы узнать, могу ли я найти помощь по моему вопросу, но я не могу исправить это для своей проблемы. Так что, когда я пытаюсь войти в системе пользователя, я получаю сообщение об ошибке, которое говорит Undefined индекс: Нет уверены, почему Im получает это сообщение на моей странице login.phpОшибка входа в Php - Примечание: Неопределенный индекс:

У меня есть база данных и таблица с именем пользователей с данными, вставленные

это то, что я использую для подключения к базе данных

conn.php

<?php 
    session_start(); 
    $dbhost = "127.0.0.1"; // my database 
    $dbname = "fxdme"; 
    $dbuser = "root"; 
    $dbpass = ""; 

    $mysqli = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die("MySQL Error: " .  mysqli_error("Cant Connect")); 

    ?> 

Войти сценарий

login.php

<?php include 'template/header.php';?> 

<form action="login.php" method="POST"> 
    User Name: <input type="text" name="username" /> 
    Password: <input type="password" name="password"/> 
    <input class="submit" name="submit" type="submit" value="Log In"/> 
</form>  


<?php 

$result=$mysqli->query('SELECT * FROM users WHERE username = "' . 
$_POST['username'] . '" AND password = "' . $_POST['password'] . '"'); 

//set session user 
$row = $result->fetch_assoc(); 
$_SESSION['user_id'] = $row['id']; 

if ($_SESSION['user_id']) {  
    echo "You are logged in, $session_username. <a href='logout.php'>Log out</a>"; } 
else { 
    echo " cant log in"; 
} 
?> 

// Главная страница

Мой индекс страницы index.php

//in the template header is where Im calling my conn file 
<?php include 'template/header.php'; ?> 

<?php 
if (isset($_GET['invalid'])) {   
    echo "<tr><td colspan='2' align='right'>Invalid login.</td></tr>";  
} 
?> 

Im пытается получить Исправлена ​​ошибка, поэтому я не беспокоюсь о SQL инъекций в данный момент. Я просто хочу быть в состоянии войти и беспокоиться о других вещах позже.

+1

вы проверить, если есть POST на странице перед запрашивая дб? ex: (if (isset ($ _ POST ["login"]))) – amd

+0

какой индекс не определен? –

+0

Опубликовать копию точной ошибки. – JRSofty

ответ

4

Вы найдете, что $_POST["username"] вернет недопустимый индекс, если имя пользователя не указано в переменных post.

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

Так что перед выпиской запроса

$username=(isset($_POST) && isset($_POST["username"]) ? $_POST["username"] : ""; 
$password=(isset($_POST) && isset($_POST["password"]) ? $_POST["password"] : ""; 

затем использовать $ имени пользователя и $ пароль в вашем запросе. Вы могли бы превратить предыдущие утверждения в вызов функции, проходящий в имени переменной для проверки.

function getPostVar($name) { 
    return (isset($_POST) && isset($_POST[$name]) ? $_POST[$name] : ""; 
} 

$username=getPostVar("username"); 
$password=getPostVar("password"); 

Очевидно, что ваш код созрел для инъекции SQL с именем пользователя в ' union select * from users --

+0

... и выглядит OP хранит неуправляемые пароли. +1 –

+2

На боковой ноте нет необходимости проверять, установлен ли массив $ _POST. Он всегда будет установлен, если кто-то не отключится ($ _ POST). В этом случае проверка isset ($ _ POST ['key']) вернет false без предупреждения. – iBiryukov

+0

Не был на 100% уверен, что если isset (массив (ключ)) будет предупреждать или нет, и просто поставить безопасную версию безопасности, если кто-то использовал эту функцию для других массивов. –

0

Существует нет ничего в коде, чтобы сделать строку запроса в URL для выборки по $_GET. Как у вас есть индекс, когда у вас ничего нет?

Для того, что вы сказали, вы должны использовать header('location:index.php?invalid=1');, если пользователь не может войти в систему.

+0

Хотя это ошибка, из-за использования isset это не будет конкретная ошибка, о которой сообщается –

-1

Возможно, это не проблема для вас, но у меня была такая же ошибка при преобразовании в mysqli, и моя инструкция fetch выглядела так же, как ваша.

попробуйте изменить.

$row = $result->fetch_assoc(); 

в

$row = $result->fetch_array(MYSQLI_ASSOC)); 
Смежные вопросы