2012-05-14 4 views
0

J'essaie de créer un système pour stocker le dernier IP connecté, et de le comparer à l'adresse IP actuelle, puis faire quelques fonctions plus tard, mais actuellement, je ne peut pas les comparer sans aller à la dernière déclaration. Voici le code.PHP et MySQL - Comparer les adresses IP qui sont stockées

<?php 

$userToPull = $session->userinfo['username']; 

$query = "SELECT * FROM users WHERE username='$userToPull'"; 
      $result = mysql_query($query);  

      while($row = mysql_fetch_row($result)){ 

        $userToShow = $row[25]; 
        $IPtoVerify = $row[26]; 

        } 

$lastActivity = RelativeTime($userToShow); 
$currIP = $_SERVER['REMOTE_ADDR']; 

/* 

Shows Partner Stuff 

}elseif(!$session->isAdmin()){ 

echo "<div style='text-align:right;' id='homebox'"; 
echo "<b>Partner Total:</b> ".$database->getNumMembers()."<br>"; 
echo $database->num_active_users." partners logged in and "; 
echo $database->num_active_guests." guests viewing the site.<br><br>"; 
echo "</div>"; 

*/ 


if(!$IPtoVerify == $currIP){ 

echo "<div style='text-align:right; background-color: #FAAAB3' id='homebox_partner'"; 
echo "<b>You are logged on from an unrecognized location.</b><br>"; 
echo "You will be sent a notification for security purposes."; 
echo "<br>This location will automatically be remembered."; 
echo "</div><br>"; 

}elseif($IPtoVerify == $currIP){ 

echo "<div style='text-align:right;' id='homebox_partner'"; 
echo "<b>You are logged on from a recognized location.</b><br>"; 
echo "Your IP is ".$_SERVER['REMOTE_ADDR']; 
echo "<br>Your last login was approximately ".$lastActivity; 
echo "</div><br>"; 

}else{ 

echo "<div style='text-align:right;' id='homebox_partner'"; 
echo "<b>An error has occurred.</b><br>"; 
echo "</div><br>"; 


} 

?> 

La seule chose ne fonctionne pas est le if(!$IPtoVerify == $currIP){ instruction if.

L'adresse IP est stockée normalement et l'écho est: 100.100.100.100. (normal fashion)

Peut-être que je ne les compare pas correctement, mais cela a fonctionné pour moi dans le passé.

+0

une simple faute de frappe je dirais :) –

Répondre

2

Ce code ne fait pas ce que vous pensez:

if (!$IPtoVerify == $currIP) { 

PHP interprète comme:

if ((!$IPtoVerify) == $currIP) { 

Vous voulez écrire comme:

if ($IPtoVerify != $currIP) { 
+0

Cela a fonctionné! Dois-je utiliser un seul signe égal pour mon elseif? – user1393955

+0

Non! = Signifie 'n'est pas' égal à, et == signifie 'est' égal à. Un signe égal (=) est une assignation, pas une vérification d'égalité. Vous utiliseriez un seul égal pour assigner une valeur à une variable, par ex. '$ x = 1;' –

+0

Non, votre 'elseif' est correct, mais vous pouvez le remplacer par' et' et supprimer la dernière instruction 'else'. C'est parce que les deux adresses IP sont égales ou pas égales les unes aux autres .. il n'y a pas une troisième option :) –

0

Essayez ($IPtoVerify !== $currIP) au lieu de (!$IPtoVerify == $currIP)

+0

fermer, mais il devrait être '($ IPtoVerify! = $ CurrIP)' –

+0

@LiamGeorgeBetsworth, n'a pas d'importance. les deux sont des chaînes donc dans ce cas _! == _ et _! = _ sont les mêmes – miro

+0

! = et! == donnerait le même résultat ici, mais ce n'est pas la même chose. Vérifier si 'a! == b' est trop puissant dans ce cas. –

0
!$IPtoVerify == $currIP 

signifie

0==$currIP, 

car il valide la première

`!$IPtoVerify` 

qui retourne toujours 0 à moins que $ IPtoVerify est 1.

Ajouter des crochets supplémentaires comme

if(!($IPtoVerify == $currIP))... 

pour résoudre le problème.

Questions connexes