Скрипт для получения IP адреса посетителя не работает

Я вручную сохраняю приведенную ниже строку в базе данных mysql, используя php myadmin.

<div>IP address : '<?php echo $_SERVER['REMOTE_ADDR']?>'</div>

Он обновляется, поскольку я подтвердил, что он находится в базе данных. Моя php-страница извлекает это из базы данных и обновляет html.

Вывод, который я получаю, -
IP address :

Я не эксперт в php. Также я не могу написать ‹?php echo $_SERVER['REMOTE_ADDR']?› прямо на мою php-страницу. Пожалуйста, помогите и скажите мне, где не так.


person Ashwin    schedule 27.12.2011    source источник
comment
Покажите нам полный код, который сохраняет данные в БД   -  person Sergio Tulentsev    schedule 27.12.2011
comment
Я правильно понимаю, вы храните <div>IP address : '<?php echo $_SERVER['REMOTE_ADDR']?>'</div> в своей базе данных?   -  person Matmarbon    schedule 27.12.2011
comment
изменил вопрос. Пожалуйста, обратитесь к этому. Я не использую запросы на вставку.   -  person Ashwin    schedule 27.12.2011
comment
Если вы знаете, что он хранится правильно, можете ли вы показать нам, как вы его отображаете?   -  person jprofitt    schedule 27.12.2011
comment
@Эш, это не сработает! Вам необходимо сохранить фактический результат вызова функции в базе данных   -  person Pekka    schedule 27.12.2011
comment
почему бы не сохранить сам IP, а не всю строку?   -  person sdot257    schedule 27.12.2011


Ответы (2)


Когда вы извлекаете текст из БД и выводите его клиенту, он будет просто ЗАПИСАН, а не ВЫПОЛНЕН - так что

$_SERVER['REMOTE_ADDR']

никогда не будет заменен реальным IP-адресом.

Решением было бы хранить

<div>IP address : '%s'</div> 

в вашей БД, позже извлеките ее и

echo sprintf($txtfromdb,$_SERVER['REMOTE_ADDR'])

вашему клиенту.

person Eugen Rieck    schedule 27.12.2011
comment
Или просто printf (echo sprintf немного избыточен). - person Niklas Lindblad; 27.12.2011
comment
В принципе, я исправляюсь. Что у меня было в моем (подсознательном) уме с eth sprintf(), так это то, что вы можете захотеть использовать результат в каком-то анализе шаблона или подобном, а не напрямую бросать его клиенту. - person Eugen Rieck; 27.12.2011

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

Если вы хотите, чтобы текущий IP-адрес клиентов отображался, вы можете (как и для каждого исполняемого php-контента) оценить его.

ob_start();
eval( $the_table_content );
$the_content = ob_get_clean();

Теперь ваш правильный контент хранится в $the_content и может быть выведен, например, echo $the_content

Но если вы хотите только вывести его, вам не нужен приведенный выше код, и вы можете попробовать просто eval( $the_table_content ) вместо echo $the_table_content

Как правило, лучшим решением является Eugen Riecks, но в некоторых случаях это самое быстрое и простое решение.

person Matmarbon    schedule 27.12.2011