0

現在、フォームに入力されたクエリを格納する関数があります。入力とともにフォームを送信するユーザーの 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();
        }
 }

}

ただし、現在は入力された「テキスト」のみを保存し、IP のデータベースに NULL を追加するだけです。IP 行の MYSQL は unsigned INT 11 として設定されています。問題を解決するためのアイデアはありますか?

4

3 に答える 3

1

long 値を返す関数にエラーがあります。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;
}
于 2012-12-04T05:34:29.773 に答える
0

文字列を使用してIPをデータベースに保存します

于 2012-12-04T05:32:18.560 に答える
0

別の可能なオプション:

function userIP(){
  $ip = $_SERVER['REMOTE_ADDR'];     
  if( !$ip )
    return false;
  if( !empty( $_SERVER['HTTP_CLIENT_IP'] ) )
    $ip = $_SERVER['HTTP_CLIENT_IP'];
  if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  return sprintf( '%u' , ip2long( $ip ) );
}

PHP マニュアルをip2long()読んだ後、一部のシステムで大きな整数を処理する方法について興味深いことがわかりました。

于 2012-12-04T06:04:52.293 に答える