Avatar billede budolfsen Nybegynder
16. december 2006 - 17:40 Der er 25 kommentarer og
1 løsning

Ip-adresse

Hej

Hvordan henter man en brugers ip-adresse med php og logger den i en database.

Buddy
Avatar billede mccookie Seniormester
16. december 2006 - 17:50 #1
echo $_SERVER['REMOTE_ADDR'];
Avatar billede simplus Nybegynder
16. december 2006 - 18:25 #2
<?php
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
mysql_query("INSERT INTO DatabaseNavn (ip) VALUES ('$ip')") or die(mysql_error());
?>
Avatar billede uzziuz Nybegynder
16. december 2006 - 22:44 #3
Jeg ville gøre det sådan her:

<?php
include ("sql.php");

$ip = $_SERVER['REMOTE_ADDR'];
mysql_query(INSERT INTO loggedips (ip) VALUE ('".$ip."')";
?>

Det er mere overskueligt og mere simpelt :)
Avatar billede simplus Nybegynder
19. december 2006 - 15:39 #4
uzziuz, ja mere simpel, men også lidt 'uvenlig kode' :-)

Den udskriver jo ingen fejl hvis det ikke virker? Du mangler lige en or die();
Også mangler du lige et "s" på VALUE

udover det kan jeg ikke helt se hvorfor du skriver '".$ip."' da det er helt urelevant i dette tilfælde :-)
Her er det nok at bruge '$ip'

- Tag det endeligt ikke som negativ kritik. Jeg vil bare gerne lære dig noget, du _måske_ (!) ikke ved.
Avatar billede olebole Juniormester
19. december 2006 - 15:54 #5
<ole>

simplus >> Det kunne tænkes, at uzziuz har erfaring fra mindre sloppy sprog end PHP - og derfor har været nødt til at tillægge sig god kodeskik og adskiller strenge og variabler ... og så hedder det i øvrigt 'irrelevant'  ;o)

Derudover er der ingen, der siger, man absolut _skal_ bruge 'or die'. I mange tilfælde kan det være katastrofalt at bruge den.

Derimod er det en rigtig god ting at escape alle navne i SQL-kald. Ikke fordi, det er nødvendigt - men fordi, det _kan_ være nødvendigt - og så glemmer man det aldrig  ;o)

mysql_query("INSERT INTO `DatabaseNavn` (`ip`) VALUES ('".$ip."')") or die(mysql_error());

/mvh
</bole>
Avatar billede uzziuz Nybegynder
19. december 2006 - 17:13 #6
Sry :b
Avatar billede simplus Nybegynder
20. december 2006 - 21:23 #7
#olebole

Ja det har du ret i, dog kan jeg ikke komme i tanke om nogen mulige situationer hvor or die() kan volde problemer? - Det kan måske bare være mig der ikke har været ude i alle hjørner af MySQL, men har aldrig oplevet sådan noget før. Du tænker måske på at det kan give problemer med hensyn til headers? Så bliver det udskrevet tekst før, eller hvad mente du?

Ja escape af navne er altid en god ting, der opstår især mange problemer ved ordet 'by' som mange ikke er et reseveret ord.

Og ja, selvfølgelig hedder det irrelevant, det var bare mine store fingre der liiiige skulle trykke på tasten ved siden af.. :-)
Avatar billede simplus Nybegynder
20. december 2006 - 21:25 #8
to små stavefejl, som bør rettes af mig selv:

så bliver det udskrevet = så bliver der udskrevet

som mange ikke er et = som mange ikke ved er et
Avatar billede budolfsen Nybegynder
21. december 2006 - 08:19 #9
Tak for alle svarene - det er dejligt at folk gider svare.

nu er jeg så rendt ind i et nyt problem.

Jeg har hentet ip-adresse ind i databasen, men jeg vil gerne have den sådan, at når man har skrevet i gæstebog, så kan man ikke trykke på opdater og skrive igen og igen og igen.
Avatar billede uzziuz Nybegynder
21. december 2006 - 09:50 #10
Måske noget ala det her:

<?php
$besked = $_POST['besked'];
$navn = $_POST['navn'];
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_GET['tjek'])){
if(empty($navn)){
echo "Alle felterne er ikke fyldt!";
}elseif(empty($besked)){
echo "Alle felterne er ikke fyldt!";
}else{
mysql_query("INSERT INTO gaestebog (besked, navn, ip) VALUES ('".$besked."', '".$navn."', '".$ip."')")or die(mysql_error());
echo "Beskeden belv tilføjet :D";
}
}
?>
<form action="gaestebog.php?tjek" method="post">
Navn:<br>
<input name="navn" type="text"><br>
Besked:<br>
<textarea name="besked"></textarea><br>
<input type="submit" value="Tilføj besked">
</form>
Avatar billede simplus Nybegynder
21. december 2006 - 14:04 #11
uzziuz, det hele er skam rigtig nok, men hvis det skal være simpelt kan det ordnes ved en helt almindelig header..

header("Location: opret_besked.php");

fx..

budolfsen -> du skal så lige være opmærksom på at der ikke må udskrives noget som helst tekst før en header.. det kan du bare fixe ved at omstrukturere din kode, samt flytte din php øverst i koden - altså før alt html

Det vil jeg mene er den bedste og simpleste løsning.
Avatar billede uzziuz Nybegynder
21. december 2006 - 14:10 #12
Tjae ..
Avatar billede budolfsen Nybegynder
21. december 2006 - 18:05 #13
Tak for svarene - det virker, men nu er der opstået et nyt problem.

Min gæstebog bliver spammet, men ikke fra den samme ip-adresse.

Kan I hjælpe.
Avatar billede uzziuz Nybegynder
21. december 2006 - 18:08 #14
Hvor ligger din tagwall ?
Avatar billede budolfsen Nybegynder
21. december 2006 - 18:39 #15
Hvis en tagwall svarer til en gæstebog, så ligger den på min egen server.
Avatar billede uzziuz Nybegynder
21. december 2006 - 18:40 #16
Ja men url ?
Avatar billede budolfsen Nybegynder
21. december 2006 - 18:41 #17
Avatar billede uzziuz Nybegynder
21. december 2006 - 18:45 #18
JEg ved godt det ikke er de samme ip adresser der spammer men man kan godt Banne !
Avatar billede budolfsen Nybegynder
21. december 2006 - 18:48 #19
Det ved jeg, men problemet er, hvis nu der en seriøs fra en af de bannede ip-adresse, så går det jo galt.-

Jeg tænkte på, om der var nogle indstillinger (chmod) som skal stå anderledes end mine.

Mine står til 777
Avatar billede uzziuz Nybegynder
21. december 2006 - 18:50 #20
Det er da normalt ?
Avatar billede budolfsen Nybegynder
21. december 2006 - 18:55 #21
Kan man gøre sådan, at specielle ord ikke kan skrives i gæstebog. Jeg tænker på at mange af de input der er i den handler om viagra, sex m.v

Hvis man kan - hvordan gør maN...
Avatar billede uzziuz Nybegynder
21. december 2006 - 19:03 #22
Kan man godt kan ikke hucke hvordan prøv at google det ..
Avatar billede budolfsen Nybegynder
21. december 2006 - 21:34 #23
Takker for svarene.

Lukker.
Avatar billede simplus Nybegynder
21. december 2006 - 22:14 #24
Det kan sagtens lade sig gøre i fx php via Reg.Exp / Regular Expressions

Det kan jeg godt hjælpe dig med hvis du er frisk?
Avatar billede simplus Nybegynder
21. december 2006 - 22:23 #25
Jeg har lige lavet et lille simpelt eksempel som du kan udvide. Det burde være lige til. Det mit eksempel gør er at erstatte ordet viagra med [censur] .. Altså søger den bare efter ordet viagra og erstatter med [censur] lige meget hvor i teksten det står. Det eneste du skal ændre i mit eksempel er variablen der indeholder beskeden. Jeg har lavet variablen $var som indeholder en tekst som skal forestille selve indlægget i gæstebogen. Den erstatter du bare med din $_POST værdi fra din formular.

<?php
    $var = "dassviagraasd"; //her erstatter du med $_POST['navn'];

    $var = ereg_replace("viagra+", "[censur]", $var);

    echo $var;
?>
Avatar billede simplus Nybegynder
21. december 2006 - 22:27 #26
Man kan så i mit eksempel snyde koden og skrive VIagrA f.eks. så vil den ikke skrive [censur]

det kan du ordne ved at gøre alt indkommende tekst til små bogstaver ved hjælp af funktionen strtolower();

brug denne istedet:

<?php
    $var = "dassviagraasd"; //her erstatter du med $_POST['navn'];
    $var = strtolowser($var);

    $var = ereg_replace("viagra+", "[censur]", $var);

    echo $var;
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester