Скриптът за получаване на 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
Покажете ни пълния код, който съхранява данни в Db   -  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
@Ash това няма да стане! Трябва да съхраните действителния резултат от извикването на функцията в базата данни   -  person Pekka    schedule 27.12.2011
comment
защо не съхраните самото IP, а не целия низ?   -  person sdot257    schedule 27.12.2011


Отговори (2)


Когато извлечете текста от DB и го изведете на клиента, той просто ще бъде НАПИСАН, а не ИЗПЪЛНЕН - така че

$_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