【发布时间】:2014-03-20 16:21:58
【问题描述】:
当我的 PHP 表单被提交时,我试图获取最终用户的 IP 地址并将其与记录一起插入到数据库表中。
我的表单发布到另一个 php 页面。:
<form name="contact_form" method="post" action="http://x.com/promotions/boston_mailer.php">
<table border="0"> ...etc...
我设置我的 boston_mailer.php 来获取 IP 地址:
$ipaddress = $_SERVER['REMOTE_ADDR'];
$sql = "INSERT INTO
ucm_signup
( fname, lname, email, phone, iama, buyfrom, ipaddress )
VALUES
( '$_POST[fname]', '$_POST[lname]', '$_POST[mail]', '$_POST[phone]',
'$_POST[iama]', '$_POST[buyfrom]', '$_SERVER[$ipaddress]')";
我的数据库表 (phpMyAdmin) 有一个名为“ipaddress”的列,并设置为 VARCHAR,大小为 30。
当我提交表单时,IP 地址为零。 “”。我错过了什么?我需要在我的 form.php 页面中添加一些内容吗?谢谢
【问题讨论】:
-
您可能还需要考虑将您的 IP 地址存储为十进制值 (geektools.com/geektools-cgi/ipconv.cgi)
-
我猜这会产生很多
Use of undefined constant fname类型的通知?它看起来也容易受到 SQL 注入的影响——将变量插入到查询中并不是最好的主意,当它们没有被清理时更糟。顺便说一句 -$_SERVER['REMOTE_ADDR']对于唯一识别访问者(路由器、代理、负载平衡系统......)并不完全可靠 -
@CD001 我实际上不知道在哪里可以找到错误。我将研究将变量插入到查询中,你有什么其他的参考建议吗?
-
使用 PHP 执行 SQL 的最佳选择是使用 PDO 和绑定参数或绑定值(如果您不使用存储过程的响应更新参数):@987654322 @ - 从不信任来自用户空间的输入数据:| mysqli 也支持绑定参数:uk.php.net/manual/en/mysqli-stmt.bind-param.php
-
绑定值和绑定参数对 SQL 注入都是安全的——您可以在创建语句时选择使用哪个;这与仅仅构建一个 SQL 字符串并将其扔到数据库服务器不同,您构建一个 Statement 对象,将参数(或值)绑定到它然后执行它:完整的 PDO 手册在这里uk1.php.net/pdo。绑定参数和值之间的主要区别在于,参数是通过引用传递的变量,因此它们可以通过 SQL 服务器的响应进行更新......值只是值,它们进入并且不会返回。