Gå til innhold

Få ip på registrerte


Anbefalte innlegg

Skrevet

Hei, har vært med på folk som har lite liv og lager 100 vis av brukere på sidene mine.

 

Så jeg lurer på hvordan jeg får ipen til den som registrerer seg i 'user_ip' i 'users' dben, og hvordan jeg kan gjøre sånn at de ikke kan registrere seg mer enn 3 ganger med den samme ipen...

Videoannonse
Annonse
Skrevet (endret)

$_SERVER['REMOTE_ADDR']

 

For å se alt som ligger i $_SERVER

echo '<pre>';
print_r($_SERVER);
echo '</pre>';

 

For å sjekke hvor mange ganger de har registrert seg

function checkIP($ip)
{
$cIP = ip2long($ip);
$fIP = long2ip($cIP);
return $fIP;
}

// koble til databasen

$ip_adr=checkIP($_SERVER['REMOTE_ADDR']);

if (!in_array($ip_adr,array('0.0.0.0','127.0.0.1'))
{  
 $sql='SELECT count(*) FROM tabell WHERE ip='.$ip_adr;
 $antall=mysql_fetch_row(mysql_query($sql));

 if ($antall[0]<3)
   // tillat ny registrering
 else
   // allerede registrert 3 ganger
}

 

Edit: Lagt til ip adresse validering, fant en funksjon her i kommentarfeltet, http://roshanbh.com.np/2008/04/ip-address-validation-php.html, som jeg ser er samme fremgangsmåte som eksempel 3 i php manualen for ip2long: http://no.php.net/ip2long

Endret av Crowly
Skrevet (endret)

Om du veit korleis du poster data til MySQL er det jo ikkje noko problem i det heile tatt.

Då setter du berre inn $_SERVER['REMOTE_ADDR'] i feltet.

 

Forstår ikkje heilt problemet.

Om du tykkjer det er "rotete" kan du jo óg sette IP'en i ei variabel først.

$ipadresse = $_SERVER['REMOTE_ADDR'].

 

Kva er det egentleg du lurer på? Korleis du registerer berre, eller korleis du kan sjekke om IP'en eksiterer når du oppretter ei konto?

Det vil vere lite hensiktsmessig å la brukare berre får registrere seg nokon få gonger per IP. Betre om du har ein e-post aktivering.

 

Offentlege stadar vil jo då automatisk varte bannlyst.

Endret av steffenz
Skrevet

Problemet er at jeg vil ha ip adressen til den som registrer seg i et felt bak brukerens navn .. Er det bare : $_SERVER['REMOTE_ADDR']

 

som er ipen? Da er det ikke noe problemm...

Skrevet

Prøv å kjør echo $_SERVER['REMOTE_ADDR']; og se hva som skjer....

 

Hvis man lurer på noe så er det ikke noe galt i å lage midlertidige "gjett og sjekk" skript for å se hvordan ting oppfører seg, eller hvilke verdier ymse ting inneholder osv.

Skrevet

Ja, det er riktig. Du burde forresten filtrere den, og passe på at det faktisk er en IP den returnerer. Ja, det er mulig å hacke en webside ved hjelp av $_SERVER

Skrevet

Sikkert en klanside for MW2 med et lite forum der folk eller boter registrerer seg i hytt og pine og spammer reklame.

 

Det er jo ikke vbulletin eller et forum som er ute på nettet. Så tror ikke noen har boter til det nei.

Skrevet (endret)

okei, jeg prøvde dette:

 

er det noe feil med det?

 

$sql = "INSERT INTO
				users(user_name, user_pass, user_email ,user_date, user_level, user_ip)
			VALUES('" . mysql_real_escape_string($_POST['user_name']) . "',
				   '" . sha1($_POST['user_pass']) . "',
				   '" . mysql_real_escape_string($_POST['user_email']) . "',
					NOW(),
					0)",
					$_SERVER['REMOTE_ADDR'];

	$result = mysql_query($sql);

 

får ingen error men heller ingen ip i dben

Endret av WeExClan
Skrevet (endret)

Borsett fra litt rotete kode ser jeg ikke noe feil, borsett fra der du setter inn user_level kanskje.

Syns det blir ryddigere med sprintf. Se kode.

$query = sprintf("INSERT INTO `users` (`user_name`, `user_Pass`, `user_email`, `user_date`, `user_level`, `user_ip`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
mysql_real_escape_string($_POST['user_name']),
sha1($_POST['user_pass']),
mysql_real_escape_string($_POST['user_email']),
now(),
"0",
$_SERVER['REMOTE_ADDR']);
$query = mysql_query($query);

 

( OG jeg anbefaller å filtrere $_SERVER vars, for det kan manipulerest.

Endret av Sk!ppy
Skrevet (endret)

Borsett fra litt rotete kode ser jeg ikke noe feil, borsett fra der du setter inn user_level kanskje.

Syns det blir ryddigere med sprintf. Se kode.

$query = sprintf("INSERT INTO `users` (`user_name`, `user_Pass`, `user_email`, `user_date`, `user_level`, `user_ip`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
mysql_real_escape_string($_POST['user_name']),
sha1($_POST['user_pass']),
mysql_real_escape_string($_POST['user_email']),
now(),
"0",
$_SERVER['REMOTE_ADDR']);
$query = mysql_query($query);

 

( OG jeg anbefaller å filtrere $_SERVER vars, for det kan manipulerest.

 

takker, men jeg får enda ikke IPen i databasen. Har det som varchar not null men funker ikke. Har det ip greiene hvis du er logget inn på siden så står det liksom hvilken ip du er på($_SERVER['REMOTE_ADDR') og det funker på siden men det funker ikke i databasen.....

Endret av WeExClan
Skrevet (endret)

Ikke ha "not null", ha "som definert" eller "as defined". bruker varchar(20) 20, fordi jeg ikke husker antall sifre på en ip. (OM det ikke funker, bruk or die(mysql_error());

Endret av Sk!ppy
Skrevet

Ikke ha "not null", ha "som definert" eller "as defined". bruker varchar(20) 20, fordi jeg ikke husker antall sifre på en ip. (OM det ikke funker, bruk or die(mysql_error());

 

 

Får "NULL" istedenfor ett blankt felt under user_ip...

Skrevet

now() er ingen php funksjon, legg den inn i sql'en, det samme kan man gjøre med standard verdier. Hvis user_level er integer så endre '0' til 0

Litt modifisert

$query = sprintf("INSERT INTO `users` (`user_name`, `user_Pass`, `user_email`, `user_date`, `user_level`, `user_ip`) VALUES ('%s', '%s', '%s', NOW(), '0', '%s')",
mysql_real_escape_string($_POST['user_name']),
sha1($_POST['user_pass']),
mysql_real_escape_string($_POST['user_email']),
$_SERVER['REMOTE_ADDR']);

//debug
echo $query."<br />"; // sjekk at sql'en ser riktig ut

mysql_query($query);

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...