我目前有一个函数可以存储已输入表单的查询。我正在尝试保存提交表单的用户的 IP 地址以及输入内容。
目前的功能是:
function userIP(){
$ip = $_SERVER['REMOTE_ADDR'];
if($ip){
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$ipis = ip2long($ip);
}
return $ip;
}
return false;
}
public function __construct( $data = array() ) {
if( isset( $data['text'] ) ) $this->text = stripslashes( strip_tags( $data['text'] ) );
if( isset( $data['ipis'] ) ) $this->ipis = stripslashes( strip_tags( $data['ipis'] ) );
}
public function storeFormValues( $params ) {
$this->__construct( $params );
}
public function store() {
$correct = false;
try {
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "INSERT INTO tbl(content, ip) VALUES(:text, :ipis)";
$stmt = $con->prepare( $sql );
$stmt->bindValue( "text", $this->text, PDO::PARAM_STR );
$stmt->bindValue( "ipis", $this->ipis, PDO::PARAM_STR );
$stmt->execute();
return "Added";
}catch( PDOException $e ) {
return $e->getMessage();
}
}
}
然而,它目前仅存储输入的“文本”,并且仅将 NULL 添加到 IP 数据库中。 IP 行的 MYSQL 设置为无符号 INT 11。 关于解决这个问题有什么想法吗?
最佳答案
您的函数返回长整型值时出错。您已将 return 语句置于 elseif 条件中。此外,您将按原样返回实际的 $ip
值。
function userIP(){
$ip = $_SERVER['REMOTE_ADDR'];
if($ip){
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
$ipis = ip2long($ip);
return $ipis;
}
return false;
}
关于php - 存储获取和存储IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696628/