Enregistrer IP dans la bdd

Résolu
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
si 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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
Ben 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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
donc le code php devrait simplement faire INSERT ou UPDATE au bon moment.
0
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
cela correspond à ma suggestion.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Je 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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 

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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ok 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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai mis le code que tu m'as mis. Je n'ai aucune erreur mais toujours aucune adresse IP dans ma bdd...
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
il reste à appeler la fonction, par exemple en ajoutant
update_IP($dbh, $username);
avant la ligne 116 de ta page de connexion.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
Merci à toi, cela fonctionne bien maintenant... J'ai passé bcp de temps pour cela mais le résultat est là. :) A bientôt.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Gui4671 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
et 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