Enregistrer IP dans la bdd

Résolu
Bonjour,
Je tente d'enregistré l'Ip des visiteurs de mon site mais je galère un peu...
J'ai réussi à copier l'adresse IP mais comment l'envoyer sur ma BDD?

Voici le code que j'ai utilisé pour récupérer l'adresse IP et l'écrire sur la page (durant les tests):
<?php
    /**
     * Récupérer la véritable adresse IP d'un visiteur
     */
    function get_ip() {
    	// IP si internet partagé
    	if (isset($_SERVER['HTTP_CLIENT_IP'])) {
    		return $_SERVER['HTTP_CLIENT_IP'];
    	}
    	// IP derrière un proxy
    	elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    		return $_SERVER['HTTP_X_FORWARDED_FOR'];
    	}
    	// Sinon : IP normale
    	else {
    		return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
    	}
    }
    ?>
          <?php
    // Afficher l'adresse IP
    echo 'Adresse IP du visiteur : '.get_ip();
    ?>


Merci d'avance pour les éclaircissement :)

Configuration: Windows / Firefox 64.0

4 réponses

Résumé de la discussion

L'objectif est d'enregistrer l'adresse IP des visiteurs dans une base de données via PHP/PDO et de déterminer quand l'enregistrer, lors de l'inscription ou de la connexion. Plusieurs réponses suggèrent d'ajouter une colonne adresse_ip dans la table users et de créer update_IP() pour mettre à jour l'IP obtenue par get_ip() lors de la connexion. Des échanges évoquent l'enregistrement éventuel à l'inscription plutôt qu'à chaque connexion, et la nécessité de choisir entre stocker une IP unique ou un historique, tout en évoquant les obligations RGPD. En cas d'enregistrement, il convient aussi d'assurer la sécurisation des données et de prévoir le droit à la suppression ainsi que la conservation limitée, conformément aux bonnes pratiques et à la réglementation.

Bobot (l’IA à votre service)
  1. Contributeur
    bonjour, as-tu créé ta base de données et la table pour y enregistrer les adresses?
    as-tu de l'expérience dans l'utilisation de bases de données à partir de PHP?
    recherche-tu des exercices dans ce domaine?
    ne serait-il pas préférable de d'abord finaliser ceci?
    0
    1. J'ai une base de donnée crée où il y a déjà quelques users et mots de passe. J'ai ajouté un colonne pour les IP.
      Je suis novice mais j'ai déjà crée une ou deux bdd pour les clients. La bdd où je veux enregistrer l'IP a été faites par un professionnel.
      Je cherche juste à savoir s'il y a un code à mettre pour enregistrer les adresses ip dans ma bdd. Il y a t'il un code à mettre?

      Mon sujet précédent est 'résolu'... En raison du peu de temps que je possède pour réaliser le tout, j'ai du changer d'option et j'ai sécurisé le tout autrement. Je vais donc le mettre ''résolu''.
      0
  2. Modérateur
    Bonjour,

    Tout dépend... soit tu utilises PDO soit mysqli pour établir la connexion entre ton script PHP et la BDD
    https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

    Puis ensuite, une requête SQL de type INSERT si c'est pour ajouter une ligne dans la table .. ou UPDATE si c'est pour la mettre à jour....

    0
    1. Bonjour,
      J'utilise PDO pour le connexion... J'ai déjà une page de connexion, une page qui se connecte à ma bdd (qui sont liées) ainsi que la bdd qui va 'avec'.

      Sur ma page de connexion, j'ai réussi à obtenir l'adresse ip et la voir sur ma page (echo). Mais je bloque là.

      En effet les autres informations (pseudo et mot de passe) doivent être complétées dans un formulaire et puis envoyées. Est-il possible de mettre un autre champ mais qu'il soit automatiquement rempli avec l'IP de la personne pour que cela soit envoyé en même temps que les autres informations (quand il clique sur le bouton envoyé)?

      J'espère avoir été clair sinon je reprendrai :) Sinon je pourrais aussi vous mettre mes codes...

      Merci à vous.
      0
    2. Contributeur
      @Gui4671si je comprends bien, ton code php est déjà capable d'enregistrer des informations dans la base de données. il serait alors capable de faire cela pour toutes les informations qu'il connait. le fait que ces informations viennent d'un formulaire ou pas n'a pas d'importance.
      à quel moment veux-tu enregistrer l'adresse IP dans la base de données, dans quelle page?
      0
    3. Voilà c'est bien ça...
      Je souhaite l'enregistrer quand il se connecte à mon site. Ils doivent valider leur pseudo et mdp en cliquant sur un bouton, je pensais donc l'enregistrer quand il clique sur le bouton mais je ne sais pas si cela est possible et si oui comment?

      Merci à toi. :)
      0
    4. Modérateur
      @Gui4671Ben dans ton code php pour la connexion, tu ajoutes une requête pour inserer l'IP...
      Je ne vois pas où est le souci...

      Si tu n'y arrives pas.. donnes nous ton code php de connexion
      0
    5. Contributeur
      @Gui4671donc le code php devrait simplement faire INSERT ou UPDATE au bon moment.
      0
  3. Vers la ligne 140 où j'ai déjà commencé... Mais qu'est ce que cela change?

    J'avais mis l'adresse ip dans add_users pour l'enregistrer quand ils s'inscrivent. Mais avec cela j'aurais peut être pu l'avoir juste lors de la création du compte et non pas à chaque connexion...
    Donc je dois créer une nouvelle fonction (update_IP) de ce genre là?

        function update_IP($dbh, $username, $adresse_ip) {
            try {
                $stmt = $dbh->prepare("UPDATE users SET adresse_ip=:adresse_ip WHERE username=:username");
                $stmt->bindParam(':username', $username);
                $stmt->bindParam(':adresse_ip', $adresse_ip);
                $stmt->execute();
                return true;
            } catch(Exception $e) {
                return false;
            }
        }
    ?>
    0
    1. Contributeur
      cela correspond à ma suggestion.
      0
    2. Modérateur
      Déjà.. tout dépend de ce que tu veux faire.
      Ne garder qu'une seule IP (la dernière utilisée) de chaque utilisateur
      Ou bien pouvoir stocker toutes les IP (un historique) ?

      A noter qu'avec la RGPD... tu as des obligations à suivre concernant le stockage d'informations telles que les adresses IP ...
      0
    3. @jordane45Je pense garder seulement la dernière IP utilisée.

      J'ai été mis au courant du RGPD mais j'évite la plupart car c'est dans le cadre d'une association. Mais je respecte au mieux afin de m'y habituer pour mes futurs projets :)
      0
    4. Modérateur
      @Gui4671

      Je pense garder seulement la dernière IP utilisée.

      Donc oui.. ta fonction update devrait suffire


      J'ai été mis au courant du RGPD mais j'évite la plupart car c'est dans le cadre d'une association

      Dans les faits...Ca ne change rien.
      0
    5. @jordane45Ok par contre je ne comprends pas comment envoyer l'adresse IP (fonction get_ip) de ma page 'connexion.php') à ma fonction update_ip... Saurais-tu m'éclairer? Cela doit être tout bête mais sur le champs je ne vois pas la solution.
      0
  4. Modérateur
    Y'aurait pas mal de choses à dire sur ton code...
    concernant le md5 par exemple .... ( à la place, désormais on utilise password_hash et password_verify )

    Mais bon.. concernant ta question actuelle :
     function update_IP($dbh, $username) {
            try {
                $stmt = $dbh->prepare("UPDATE users SET adresse_ip=:adresse_ip WHERE username=:username");
                $stmt->bindParam(':username', $username);
                $stmt->bindParam(':adresse_ip', get_ip());
                $stmt->execute();
                return true;
            } catch(Exception $e) {
                return false;
            }
        }
    
    0
    1. J'ai mis le code que tu m'as mis. Je n'ai aucune erreur mais toujours aucune adresse IP dans ma bdd...
      0
    2. Contributeur
      @Gui4671il reste à appeler la fonction, par exemple en ajoutant
      update_IP($dbh, $username);
      avant la ligne 116 de ta page de connexion.
      0
    3. Modérateur
      Au lieu de faire un return false dans le exception.. il serait utile de pouvoir savoir qu'il y a une erreur et l'afficher...
      Essaye :
      function update_IP($dbh, $username) {
              try {
                   $ip = get_ip();
                  $stmt = $dbh->prepare("UPDATE users SET adresse_ip=:adresse_ip WHERE username=:username");
                  $stmt->bindParam(':username', $username);
                  $stmt->bindParam(':adresse_ip', $ip);
                  $stmt->execute();
                  return true;
              } catch(Exception $e) {
                  echo " <br><b>Erreur !!</b> " .$e->getMessage();
                  echo " <br>Datas : <br> IP : ". $ip . "<br> username : " .  $username ; 
                   return false;
              }
          }
      

      montres nous aussi à quel endroit tu as appelé cette fonction...
      0
    4. Merci à toi, cela fonctionne bien maintenant... J'ai passé bcp de temps pour cela mais le résultat est là. :) A bientôt.
      0
    5. Modérateur
      @Gui4671et histoire qu'on se couche moins bêtes... :-)
      c'était quoi l'erreur ?

      Et bon.. j'insiste...
      Pour gérer l'authentification des utilisateurs... vire le md5 et passe par :http://php.net/manual/fr/function.password-hash.php et https://www.php.net/manual/fr/function.password-verify.php
      0