Как получить IP-адрес из HTML-формы с помощью PHP? - PullRequest
0 голосов
/ 27 июня 2018

На данный момент я пытаюсь получить IP-адрес пользователя, который использует контактную форму на веб-сайте, и отправить его в firebase вместе с другой информацией. Для HTML и PHP я использовал точный код из этого урока: http://www.danielpinero.com/how-to-add-ip-address-html-form.

Вот код пожарной базы:

    // 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 при нажатии на кнопку отправить в моей форме: enter image description here

Вместо этого я бы хотел, чтобы отображался фактический 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>

1 Ответ

0 голосов
/ 27 июня 2018

Первая проблема заключается в том, что вы пропустили точку с запятой около 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>
...