Задать вопрос
@Gorthaur

Как обновить несколько записей в MySQL с помощью PHP?

Добрый вечер. Продолжаю крутить свою админку, возник следующий затык - есть скрипт, который получает данные с главной страницы GETом и пингует и парсит хэдер страницы по полученному адресу, тем самым показывая, доступен адрес или нет. Я хочу перенести этот функционал в отдельный скрипт и запускать его по cron-у, дабы он автоматически пинговал все площадки и записывал их состояние в БД. Вот здесь собственно и затык - как одному скрипту взять весь массив айпишников, каждый проверить, и обновить запись по каждому айпишнику в БД? Селектом выбираю поля Id(уникальный идентификатор), IP (собственно адрес) и State(имеет значения 0, 1, 2 или пока пустой(площадка ни разу не проверялась)).
Ниже код первой части, что смог скомпилить из всего что знаю.
<?php
 // Коннектимся к БД
include 'connect.php';
 // подключаемся к базе данных
    mysql_select_db($db_name, $connect_to_db)
    or die("Could not select DB: " . mysql_error());
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET 'utf8'");
    mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
 $qr_result = mysql_query("select `Id`, `IP`, `State` from `table4`")
    or die(mysql_error());
//объявляем переменные
$data = mysql_fetch_array($qr_result);
$ip=$data['IP'];
if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',$ip)) {echo "Sorry, wrong request"; exit;}//проверка на правильность записи
preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',"$ip", $matches);//удаление порта, если есть
$ip2=$matches[0];

$ch = curl_init( $ip );
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_NOBODY => 1
);
curl_setopt_array( $ch, $options );
curl_exec($ch);
$http = curl_getinfo($ch);
curl_close($ch);
exec("ping -c 1 -w 10 $ip2",$output, $status);


IT`S ALIVE!!!
Я не ожидал что заработает с первого раза(исключая пару косяков в виде забытой скобочки или знака вопроса в последней строке кода), но заработало!
<?php
 // Коннектимся к БД
include 'connect.php';
 // подключаемся к базе данных
    mysql_select_db($db_name, $connect_to_db)
    or die("Could not select DB: " . mysql_error());
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER SET 'utf8'");
    mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
 $qr_result = mysql_query("select `Id`, `IP`, `State` from `table4`")
    or die(mysql_error());
//объявляем переменные
while ($data = mysql_fetch_array($qr_result)){
$ip=$data['IP'];
$id=$data['Id'];
$state=$data['State']}
if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',$ip)) {echo "Sorry, wrong request"; exit;}//проверка на правильность записи
preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',"$ip", $matches);//удаление порта, если есть
$ip2=$matches[0];

$ch = curl_init( $ip );
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_NOBODY => 1
);
curl_setopt_array( $ch, $options );
curl_exec($ch);
$http = curl_getinfo($ch);
curl_close($ch);
exec("ping -c 1 -w 10 $ip2",$output, $status);
if ($http['http_code']=="200" and $status==0)
{$state="0";}
elseif ($http['http_code']=="200" and $status!=0)
{$state="0";}
elseif ($http['http_code']!="200" and $status==0)
{$state="1";}
else
{$state="2";}
mysql_query("UPDATE `table4` SET `State` =$state WHERE `Id` =$id");
};
?>
  • Вопрос задан
  • 314 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
php.net/manual/ru/function.mysql-query.php

в твоем случае это будет выглядеть как то так:
...
$qr_result = mysql_query("select `Id`, `IP`, `State` from `table4`")
    or die(mysql_error());

while ($data = mysql_fetch_array($qr_result)) {
//объявляем переменные
$ip=$data['IP'];
if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',$ip)) {echo "Sorry, wrong request"; exit;}//проверка на правильность записи
preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',"$ip", $matches);//удаление порта, если есть
$ip2=$matches[0];

...
};


Как то так.

Сейчас прибегут и скажут - mysql_query не используй. Ну собственно это в начале документации написано
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы