2016-12-09 1 views
0

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

<? 
$sno = 0; 
$query = "SELECT date,ac_no,ip,country FROM visitors where $mainfilter order by ac_no,date desc limit 0,$maximumips;"; 

$result = db_query($query,"&nbsp;"); 
while($line=db_fetch_array($result)) 
{ 

$country = ""; 
$updatestatus = ""; 
$ip = $line[ip]; 
$sno = $sno + 1; 

if($updateip=="Yes") 
{ 
    $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip)); 
    if($ip_data && $ip_data->geoplugin_countryName != null) 
    { 
     $country = $ip_data->geoplugin_countryName; 
    } 

    if($country!="") 
    { 
     $q_det = "update visitors set country='$country' where ip='$line[ip]'"; 
     db_exec($q_det); 

     $q_det = "update ips set country='$country' where ip='$line[ip]'"; 
     db_exec($q_det); 
     $updatestatus = "Yes - External"; 
    } else { 
     $updatestatus = "No Trace"; 
    } 
    sleep($waitseconds);   
} 

echo "$sno | $line[date] | $line[ac_no] | $ip | $country | $updatestatus";?><br><? 
} 
?> 

Проблема следующая команда $ ip = $ line [ip];

В CPanel ERRORLOG он говорит: «Использование неопределенной константы ф - предполагается,„ф“в/дома /»

Однако, когда я использую «эхо $ ф» он печатает IP, это означает, что IP хранится в этом но с другой стороны он дает выше упоминание ошибки в cpanel.

Раньше я использовал переменную $ line [ip], чтобы получить название страны в следующей команде, и она отлично работает, но внезапно она прекратилась.

 $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$line[ip])); 

Тогда я думал хранить IP в переменной $ ip, а затем использовать там, но все равно это не работает.

Пожалуйста, помогите мне узнать, почему ошибка cpanel givers и скрипт stopd, хотя он работает нормально, а также данные хранятся в переменной $ ip, которая показывает, когда используется «echo $ ip».

Спасибо за помощь

ответ

2

Вшита ключ массива в кавычки '' будет исправить. Без кавычек PHP предполагает, что это CONSTANT и, следовательно, выдает ошибку.

Также измените имя переменной в запросах UPDATE.

$q_det = "update visitors set country='$country' where ip='$ip'"; 
$q_det = "update ips set country='$country' where ip='$ip'"; 
+0

его запрос часть по-прежнему не так, он не может просто добавьте один qoute вокруг ip внутри, исправьте запрос, пожалуйста, –

+0

Сделано. Спасибо, что указали на это :) – Samir

+0

yep его сделанная надежда полностью +1 –

1

Попробуйте изменить $ip = $line[ip] к $ip = $line['ip'] используя ip без кавычек PHP обрабатывает его, как в constant

и зафиксировать ваши запросы

$q_det = "update visitors set country='$country' where ip=$ip"; 
db_exec($q_det); 

$q_det = "update ips set country='$country' where ip=$ip"; 
db_exec($q_det); 
+0

его часть запроса по-прежнему неправа, он не может просто добавить один qoute вокруг ip там, исправить запрос, пожалуйста, –

+0

Готово. Я думаю, что и я, и Самир предположили, что он использовал переменную вместо '$ line [ip]', потому что он сказал: «Тогда я решил сохранить IP в переменной $ ip, а затем использовать там, но все равно это не работает». – Moonblaze

+0

это прекрасно, ваш ответ прямо сейчас –