2013-04-23 3 views
0

У меня есть простая таблица базы данных «учетные записи» с 3 записями: «пользователь», «пропуск» и «идентификатор». Идентификатор является целым числом.mysqli_fetch_array() ничего не получает

Я пытаюсь получить идентификатор из таблицы и сохранить его в $ _SESSION ['id'], но мне не повезло.

Вот код:

session_start(); 

// Checks to see if the input account is valid 
$result = mysqli_query($con,"SELECT * FROM accounts 
WHERE user='$_POST[user]' 
AND pass='$_POST[pass]'"); 

//Check to see if account exists 
if(!mysqli_fetch_array($result)) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $id = mysqli_fetch_array($result); 
    $_SESSION['id'] = $id['ID']; 
    echo $_SESSION['id']; 
    } 

//header('Location: index1.php/'); 

?> 

Ничто не выходит из эхо $ _SESSION [ 'ID']. Я попытался выполнить echo $ id ['ID'], и он тоже не работает.

На моей странице index1.php мне удается получить информацию с одним и тем же битом кода, за исключением того, что $ result не использует предложения WHERE и AND для оператора select.

+0

Что вы получаете, когда считаете возвращенные строки? mysqli_num_rows ($ result) – dgig

+5

Прежде чем делать что-либо еще, прочитайте [SQL injection bugs] (http://bobby-tables.com/) и воспользуйтесь функцией mysqli [SQL placeholders] (http://bobby-tables.com/php). То, что вы делаете здесь, демонстрирует безрассудно вредные привычки и вызовет у вас серьезные проблемы. Вы ** не можете ** помещать данные '$ _POST' в запрос без экранирования. – tadman

+0

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

ответ

1

Вы на самом деле выборки первые две строки (каждый вызов mysqli_fetch_array() получает вам одну строку результата), который, вероятно, не то, что вы хотеть. Просто получать один раз и повторно использовать результат:

// ... 

//Check to see if account exists 
$row = mysqli_fetch_array($result); 
if(!$row) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $_SESSION['id'] = $row['ID']; 
    echo $_SESSION['id']; 
    } 
// ... 

Как уже упоминалось в комментариях, код широко открыт для инъекций SQL. Прочитайте подготовленные заявления, чтобы предотвратить это или дезинформировать свои переменные вручную (что не рекомендуется!).

+0

Очень ценится. Я не знал, что вы не можете получить данные дважды. Это отвечает на другие вопросы, которые у меня были с этим кодом. –

1

Кажется, что вы извлекаете данные дважды: один раз в операторе if и один раз в else. Рассмотрите возможность использования этого:

//Check to see if account exists 
if($id!=mysqli_fetch_array($result)) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $_SESSION['id'] = $id['ID']; 
    echo $_SESSION['id']; 
    } 

Или это:

//Check to see if account exists 
if(!$result) 
    { 
    $_SESSION['loggedin'] = false; 
    } 
else 
    { 
    $_SESSION['loggedin'] = true; 
    $_SESSION['user'] = $_POST['user']; 
    $id = mysqli_fetch_array($result); 
    $_SESSION['id'] = $id['ID']; 
    echo $_SESSION['id']; 
    } 
Смежные вопросы