Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Помощь по php, mysqli "mysqli_fetch_assoc() expects parameter"

#1 RSST

RSST
  • Пользователь
  • 8 сообщений
  • Репутация: 0
0

Отправлено 20 Июнь 2013 - 19:11

Здравствуйте пишу потихоньку движок на mysqli часто сталкиваюсь с ошибкой такой как

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given

можете помочь исправить этот файл
заранее спасибо

Прикрепленные файлы

  • Прикрепленный файл  user.zip   1,29К   Количество загрузок: 78

 

 

  • 0

#2 RSST

RSST
    Topic Starter
  • Пользователь
  • 8 сообщений
  • Репутация: 0

Отправлено 20 Июнь 2013 - 20:07

werd_34, поможешь ?
  • 0

#3 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 20 Июнь 2013 - 23:03

ну так сам подумай, переведи ошибку
но суть вот в чем. если представить, что у тебя такая конструкция
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)) {
}
то твоя ошибка будет в случае, если mysqli_query не вернет результат запроса.

проверяй данные вот так

if ($result = mysqli_query($link, $query)) {
  while ($row = mysqli_fetch_assoc($result)) {
  }
}

P. S. Читай оф. документацию и будет тебе счастье
http://php.net/manua...fetch-assoc.php
  • 0

#4 RSST

RSST
    Topic Starter
  • Пользователь
  • 8 сообщений
  • Репутация: 0

Отправлено 21 Июнь 2013 - 00:05

часть кода вся проблема в 5 запросах

if (isset($_GET['login']) && isset($_GET['password']))
{
# Проверяем существование аккавунта с этими данными
if (mysqli_result(mysqli_query($db,"SELECT COUNT(*) FROM `users` WHERE `login` = '". input($_GET['login']) ."' AND `password` = '". encrypt(input($_GET['password'])) ."' LIMIT 1"), 0) == 1)
{
# Массив с данными пользователя
$user = mysqli_fetch_assoc(mysqli_query($db,"SELECT * FROM `users` WHERE `login` = '". input($_GET['login']) ."' AND `password` = '". encrypt(input($_GET['password'])) ."' LIMIT 1"));
# Создаем ID в сессии
$_SESSION['user_id'] = $user['id'];
# Записываем дату последнего посещения
mysqli_query($db,"UPDATE `users` SET `date_last_entry` = '". time() ."' WHERE `id` = '$user[id]' LIMIT 1");
// проверка наличия настроек
if (mysqli_result(mysqli_query($db,"SELECT COUNT(*) FROM `user_settings` WHERE `user_id` = '$user[id]'"), 0) == 0) mysqli_query("INSERT INTO `user_settings` SET `user_id` = '$user[id]'");
# Массив с настройками
$settings = mysqli_fetch_assoc(mysqli_query($db,"SELECT * FROM `user_settings` WHERE `user_id` = '$user[id]' LIMIT 1"));
}
else $err .= 'Неверный логин или пароль<br />';
}

isvetlichniy, читал и примеров нету нормальных
  • 0

#5 html-ka

html-ka
  • Пользователь
  • 455 сообщений
  • Репутация: 82

Отправлено 21 Июнь 2013 - 00:53

ошибка на все 5 запросов, указанных выше?
это что за конструкция такая input()?
зачем кавычки в запросе?
я бы не липил все в одну строку, а разделил бы на несколько с возможной проверкой результата
  • 0

#6 RSST

RSST
    Topic Starter
  • Пользователь
  • 8 сообщений
  • Репутация: 0

Отправлено 21 Июнь 2013 - 03:45

функция input

function input($var)
{
global $db; //переменная подключения к базе
return mysqli_real_escape_string($db, trim($var));
}

если не трудно можешь показать пример на моем коде то есть что разделить и как лучше сделать
  • 0

#7 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 21 Июнь 2013 - 08:48

Например можно вот так сделать.
Все сразу ясно и понятно становится.
if(isset($_GET['login']) && isset($_GET['password'])){
 
  // inject
  $login = input($_GET['login']);
  $password = encrypt(input($_GET['password']));
 
  # Проверяем существование аккавунта с этими данными
  $sql = "SELECT COUNT(*) FROM `users` WHERE `login` = '$login' AND `password` = '$password' LIMIT 1";
  $query = mysqli_query($db, $sql);
 
  if(mysqli_result($query, 0) == 1){
  
   # Массив с данными пользователя
   $sql = "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password' LIMIT 1";
   $query = mysqli_query($db, $sql);
   $user = mysqli_fetch_assoc($query);
  
   # Создаем ID в сессии
   $_SESSION['user_id'] = $user['id'];
   $id = $user['id'];
  
   # Записываем дату последнего посещения
   $last_time = time();
   $sql = "UPDATE `users` SET `date_last_entry` = '$last_time' WHERE `id` = '$id' LIMIT 1";
   $query = mysqli_query($db, $sql);
  
   // проверка наличия настроек
   $sql = "SELECT COUNT(*) FROM `user_settings` WHERE `user_id` = '$id'";
   $query = mysqli_query($db, $sql);
   if (mysqli_result($query, 0) == 0){
    $ins = mysqli_query("INSERT INTO `user_settings` SET `user_id` = '$id'");
   }
  
   # Массив с настройками
   $sql = "SELECT * FROM `user_settings` WHERE `user_id` = '$id' LIMIT 1";
   $query = mysqli_query($db, $sql);
   $settings = mysqli_fetch_assoc($query);
  }
  else $err .= 'Неверный логин или пароль<br />';
}

  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#8 RSST

RSST
    Topic Starter
  • Пользователь
  • 8 сообщений
  • Репутация: 0

Отправлено 21 Июнь 2013 - 12:59

Спасибо попробую :)
  • 0

#9 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 21 Июнь 2013 - 15:57

А что пробовать? Я твой скрипт переписал в читаемый вид, а так он выполняет все то, что и раньше выполнял.
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#10 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 21 Июнь 2013 - 17:51

if(mysqli_result($query, 0) == 1)


достаточно просто вот так if(mysqli_result($query, 0))
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru