Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (4) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не пишет значения в базу
TriSTaR  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 41681
На форуме: 1 год, 5 месяцев, 17 дней
Карма:




Помогите пожалуйста я уже запарился, к тому же завтра отчёт перед начальством
Пишу/отлаживаю скрипт, который смог бы пропинговать все ip адреса, находящиеся в столбце
ip_address

user posted image

и по состоянии компьютера (включен ли он или выключен) писал отчёт в строку status. Т.е. если компьютер находится онлайн, в столбец "status" писать значение 1, а если оффлайн - 0

user posted image

А вот скрипт:
<?php
$link = mysqli_connect("192.168.10.56", "test", "test", "test");

if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}

echo "Работает: Подключение с базой данных имеется!" . PHP_EOL;
echo "Информация о хосте: " . mysqli_get_host_info($link) . PHP_EOL;

// берем из таблицы список ip адресов
$result = mysqli_query($link, "SELECT ip_address FROM devices");
if ($result) { // если список есть
$ok = $bad = Array(); // в этих массивах будем хранить списки адресов
после проверки
while ($row = mysqli_fetch_assoc($result)) { // прокручиваемся через
него по одному
exec("ping -c 1 " . $row["ip_address"], $output, $execResult); //
пингуем адрес
if ($execResult == 0) { // в зависимости от результатов пинга
заносим адрес в массив
$ok[] = $row["ip_address"];
} else {
$bad[] = $row["ip_address"];
}
}

echo $bad;
// если есть OK адреса - обновлем все сразу одним запросом
if (Count($ok)) {
mysqli_query($link, "UPDATE 'test'.'devices' SET `status`='1'
WHERE `ip_address` IN ('"
.implode("', '", $ok)."')");
}
// если есть BAD адреса - обновлем все сразу одним запросом
if (Count($bad)) {
mysqli_query($link, "UPDATE 'test'.'devices' SET `status`='0'
WHERE `ip_address` IN ('"
.implode("', '", $bad)."')");
}
}

?>

Где что не так?

Это сообщение отредактировал TriSTaR - 23.12.2015 - 08:43
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5557
Пользователь №: 35718
На форуме: 4 года, 2 месяца, 4 дня
Карма: 170




Смотрите внимательно на запрос, смотрите до тех пор пока не поймёте в чём проблема.
А лучше сотрите его и напишите заново руками, а не копипастом.
И еще учитесь выводить ошибки MySQL в целях отладки скрипта.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8832
Пользователь №: 26630
На форуме: 5 лет, 10 месяцев, 22 дня
Карма: 598




Цитата (TriSTaR @ 23.12.2015 - 07:41)
mysqli_query($link, "UPDATE 'test'.'devices' SET `status`='1'
WHERE `ip_address` IN ('".implode("', '", $ok)."')");

кавычки не те в названии таблицы
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TriSTaR  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 41681
На форуме: 1 год, 5 месяцев, 17 дней
Карма:




Valick
killer8080
Боже мой заработала, столько трудился иская эту ошибку... СПАСИБО ВАМ ОГРОМНОЕ
Валик, это мой скрипт (созданный мной), просто я тама сделал такие коменты для того чтобы показать нашим администратором... Но теперь всегда буду учтить про откладки
Спасибо киллер, Кавычек ` такими поставил и всё заработала...

Это сообщение отредактировал TriSTaR - 23.12.2015 - 10:05
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8832
Пользователь №: 26630
На форуме: 5 лет, 10 месяцев, 22 дня
Карма: 598




TriSTaR
вообще такие задачи нужно распараллеливать, иначе очень долго может идти сканирование, особенно если половина хостов не доступна. Скрипт будет выжидать таймаут на каждом пинге.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5557
Пользователь №: 35718
На форуме: 4 года, 2 месяца, 4 дня
Карма: 170




TriSTaR, да дело не в этом, просто когда сам найдёшь свою ошибку, это гораздо эффективнее.
и еще оформляйте текст запроса в отдельную переменную (всегда можно вывести сам запрос в браузер и посмотреть что на самом деле вы посылаете на сервер) и используйте конструкцию or die() на этапе отладки
if (Count($ok)) {
mysqli_query($link, "UPDATE 'test'.'devices' SET `status`='1'
WHERE `ip_address` IN ('"
.implode("', '", $ok)."')");
}

if (Count($ok)) {
$query = "UPDATE 'test'.'devices' SET `status`='1'
WHERE `ip_address` IN ('"
.implode("', '", $ok)."')";
// echo $query;
mysqli_query($link,$query) or die(mysqli_error($link));
}


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26059
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 10 дней
Карма: 727

Не курю:
1 год, 3 месяца, 26 дней


Цитата
просто я тама сделал

ты тута такого не наделай.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TriSTaR  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 41681
На форуме: 1 год, 5 месяцев, 17 дней
Карма:




killer8080
Да, я это понимаю... Я думал через КРОН буду его каждые 3 мин. открывать (задачу поставить хотел), а то чтобы узнать ответ онлайн или нет, сделал проверку такую: Если ответ в базе ровна на 1 ( if ($value->status == 1) ) то выводи картинку ОНЛАЙН, если он отключен выводить картинку Оффлайн

Это сообщение отредактировал TriSTaR - 23.12.2015 - 14:52
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TriSTaR  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 41681
На форуме: 1 год, 5 месяцев, 17 дней
Карма:




а как вообще можно через какое то время, страница ожила и обновляла столбец?
Ну кроме мета тега РЕФРЕШ?
мета тег рефреш, по сути он обновляет через какой то промежуток времени и только страницу которое открыта на браузере...

Это сообщение отредактировал TriSTaR - 23.12.2015 - 14:58
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1399
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 25 дней
Карма: 79




ajax тебе поможет.
делаешь запрос через промежуток времени и обновляешь статус каждого компа.
или удаляешь ofline и прибавляешь online.

P.S. ещё бы вместе со статусом хранить когда был последний раз включен/выключен.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2020
Пользователь №: 36605
На форуме: 3 года, 11 месяцев, 8 дней
Карма: 112




а вдруг у пользователя


iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Kusss
А как сделать? когда в последний раз включен был компьютер, а когда выключился? Если не трудно можете скрипт дать? Пожалуйста
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TriSTaR  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 29
Пользователь №: 41681
На форуме: 1 год, 5 месяцев, 17 дней
Карма:




Kusss
Да, если можно узнать когда комп. последний раз включён был, то вы не могли бы дать скрипт?
А АЯКС может включить файл автоматический, когда он не активен?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8832
Пользователь №: 26630
На форуме: 5 лет, 10 месяцев, 22 дня
Карма: 598




TriSTaR
зачем вообще пинговать каждый ip по отдельности, не проще сканировать nmap -ом сразу всю подсеть?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1399
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 25 дней
Карма: 79




TriSTaR

(Учитываем что айпишников у тебя не так много).
заводишь отдельную таблицу (devices_history): ip, status, date

Вытаскиваешь все пары (ip - статус). Если статус изменился пишешь в таблицу новый статус и текущее время.
INSERT INTO 
`devices_history`
SET
`ip` = '".$ip."',
`status` = ".(int)$status.",
`date` = NOW()

при выводе делаешь такой запрос.
SELECT 
d.*, (
SELECT
timediff(now(), `date`)
FROM
`devices_history`
WHERE
`ip` = d.`ip` AND
`status` = d.`status`
ORDER BY
`date` DESC
LIMIT
0,1
) AS date
FROM
`devices` AS d

Он выводит длительность текущего статуса.

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

Это сообщение отредактировал Kusss - 24.12.2015 - 15:49
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (4) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса