簡體   English   中英

如何使用PHP從HTML表單獲取IP地址?

[英]How to get IP address from HTML form using PHP?

目前,我正在嘗試接收使用網站上聯系表格的用戶的IP地址,並將其與其他信息一起發送到Firebase。 對於HTML和PHP,我使用了本教程中的確切代碼: http : //www.danielpinero.com/how-to-add-ip-address-html-form

這是firebase代碼:

    // Initialize Firebase (ADD YOUR OWN DATA)
var config = {
    apiKey: "XXXXXXXXXXXXXXXXXXXXXXXXX",
    authDomain: "XXXXXXXXXXXXXXXXXXXXXXXX",
    databaseURL: "XXXXXXXXXXXXXXXXXXXX",
    projectId: "XXXXXXXXXXXXXXXXX",
    storageBucket: "XXXXXXXXXXXXXXXXX",
    messagingSenderId: "XXXXXXXXXXXX"
  };
  firebase.initializeApp(config);

// Reference messages collection
var messagesRef = firebase.database().ref('messages');

// Listen for form submit
el = document.getElementById('contactForm')
if(el){
  el.addEventListener('submit', submitForm);
}

// Submit form
function submitForm(e){
  e.preventDefault();

  // Get values
  var name = getInputVal('name');
  var email = getInputVal('email');
  var message = getInputVal('msg');
  var ip = getInputVal('ip')

  // Save message
  saveMessage(name, email, message, ip);

  // Clear form
  document.getElementById('contactForm').reset();
}

// Function to get get form values
function getInputVal(id){
  return document.getElementById(id).value;
}

// Save message to firebase
function saveMessage(name, email, message, ip){
  var newMessageRef = messagesRef.push();
  newMessageRef.set({
    name: name,
    email:email,
    message:message,
    ip:ip
  });
}

這是我在表單上單擊“提交”時從firebase收到的即時消息: 在此處輸入圖片說明

取而代之的是,我希望顯示用戶的實際IP。 我是PHP的新手。 如果有人可以幫助我,那就太好了。

編輯(index.php):

<form id="contactForm" method="post" class="cta">
                <div class="col gtr-uniform gtr-50">
                    <div class="col-8 col-12-xsmall inputs"><input type="text" name="name" id="name" placeholder="Name" /></div>
                    <div class="col-8 col-12-xsmall inputs"><input type="email" name="email" id="email" placeholder="Email Address" /></div>
                    <div class="col-8 col-12-xsmall inputs"><textarea id="msg" rows="4" cols="50" placeholder="Message"></textarea></div>
                    <input id="ip" type="hidden" name="ip" value="<?=$ip;?>">
                    <div class="col-4 col-12-xsmall"><input type="submit" value="Get Started" class="fit primary" /></div>
                </div>
            </form>

第一個問題是您在var ip = getInputVal('ip')附近缺少分號

第二個問題是將<input id="ip" type="hidden" name="ip" value="<?=$ip;?>">更改為<input id="ip" type="hidden" name="ip" value="<?php echo $ip;?>">使用此命令可獲得更好的客戶端IP結果:

<?php
function get_client_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
    $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
    $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
    $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
    $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
    $ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
    $ipaddress = $_SERVER['REMOTE_ADDR'];
else
    $ipaddress = 'UNKNOWN';
return $ipaddress;
} 
$ip = get_client_ip();
?>

現在,對於js變量,您可以通過多種方式填充它:

<script>var ip = "<?php echo $ip;?>"; </script>

或者,您可以將其填充為隱藏輸入的值,然后通過js獲取該值:

<script>var ip = document.getElementById('inputID').value; </script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM