Fylla i formulär en gång per ip?

Permalänk
Inaktiv

Fylla i formulär en gång per ip?

Hur ska jag beté mig för att göra så att man bara kan skicka in ett formulär en gång per ip?
har absolut ingen aning hur jag ska göra?
Är det javascript som gäller eller funkar PHP?
Ni får gärna skriva script

Permalänk
Medlem

Du sparar ner alla IP-adresser som skickar in ett formulär i en databas.

Varje gång någon ska skicka ett formulär så kollar du om det IP:t finns i databasen.

$_SERVER['REMOTE_ADDR'] för att få användarens IP genom PHP.

Permalänk
Inaktiv

jaha, hur fan får jag det till databasen :s

Permalänk
Medlem
Skrivet av anon167155:

jaha, hur fan får jag det till databasen :s

Du skickar IP:t (REMOTE_ADDR) till databasen genom en mysql query.

Såhär kan det se ut:

mysql_query("INSERT INTO ip (ip) VALUES ('{$_SERVER['REMOTE_ADDR']}')");

Permalänk
Medlem
Skrivet av anon167155:

jaha, hur fan får jag det till databasen :s

Först måste du skapa en databas, om du inte redan har det, och en tabell. När du har det är det bara att ansluta till den och lägga till:

<?php mysql_connect('host', 'användare', 'lösenord') or die(mysql_error()); mysql_select_db('databasnamn') or die(mysql_error()); $ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); mysql_query("INSERT INTO ip (address) VALUES ('$ip')") or die(mysql_error()); ?>

Tabellen kan du skapa med något i stil med "CREATE TABLE ip (id int key auto_increment, address varchar(15) unique)" i MySQL-konsollen (eller genom exempelvis phpmyadmin).

När du ska kolla om personen redan har skickat in så är det bara att ansluta och jämföra:

<?php mysql_connect('host', 'användare', 'lösenord') or die(mysql_error()); mysql_select_db('databasnamn') or die(mysql_error()); if(mysql_num_rows(mysql_query("SELECT id FROM ip WHERE address = '" . mysql_real_escape_string($_SERVER['REMOTE_ADDR']) . "'"))) { echo "Du har redan skickat in formuläret."; } else { echo "Formuläret inskickat."; } ?>

Inte testat eller kontrollläst, så du får ursäkta eventuella fel...

Permalänk
Medlem

Vet du vad php är? Har du en webbserver som stödjer det eller kör du bara på din egen dator?

Permalänk
Medlem
Skrivet av nemrod:

Först måste du skapa en databas, om du inte redan har det, och en tabell. När du har det är det bara att ansluta till den och lägga till:

<?php mysql_connect('host', 'användare', 'lösenord') or die(mysql_error()); mysql_select_db('databasnamn') or die(mysql_error()); $ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); mysql_query("INSERT INTO ip (address) VALUES ('$ip')") or die(mysql_error()); ?>

Tabellen kan du skapa med något i stil med "CREATE TABLE ip (id int key auto_increment, address varchar(15) unique)" i MySQL-konsollen (eller genom exempelvis phpmyadmin).

När du ska kolla om personen redan har skickat in så är det bara att ansluta och jämföra:

<?php mysql_connect('host', 'användare', 'lösenord') or die(mysql_error()); mysql_select_db('databasnamn') or die(mysql_error()); if(mysql_num_rows(mysql_query("SELECT id FROM ip WHERE address = '" . mysql_real_escape_string($_SERVER['REMOTE_ADDR']) . "'"))) { echo "Du har redan skickat in formuläret."; } else { echo "Formuläret inskickat."; } ?>

Inte testat eller kontrollläst, så du får ursäkta eventuella fel...

Det där ser väl bra ut förutom att man borde höja maxlängden på kolumnen "adress" till 42 då IPv6 finns.

Dock tror jag inte att kodsnutten som ska kolla om IP:t finns i databasen riktigt fungerar.

Permalänk
Medlem
Skrivet av onaona:

Det där ser väl bra ut förutom att man borde höja maxlängden på kolumnen "adress" till 42 då IPv6 finns.

Dock tror jag inte att kodsnutten som ska kolla om IP:t finns i databasen riktigt fungerar.

Vad skulle vara fel menar du? Jag queryar databasen efter en post som har den adressen och sen räknar jag resultaten - får jag tillbaka ett (eller fler) resultat så fanns adressen i databasen och om inte så fanns den inte.