Avatar billede wqazr Nybegynder
27. juli 2004 - 13:06 Der er 21 kommentarer og
1 løsning

ip tæller kun 1 gang.

Hey.. jeg har lavet det her script, hvor folk kan tilmelde sig og ås får de stukket et link i hånden (www.woox.dk/in.php?id=Nr de blvier oprettet som). Det gølder så om at få flest mulig ind på det link og hvis en person har været der inde, tæller det et hit, men hvis kan går der ind igen skal den ikke tælle et mere (Hvis en person går ind på fx. in.php?id=1 tæller den self et hit og så hvis han går ind på in.php?id=2 skal den også tælle et for id=2 den må bare ikke tælle hvis en person besøger id=1 mere end 1 gang).

Koden:

<?

include_once('sql.php');

if ($_GET["id"]){
    mysql_query("UPDATE konkurrence SET hits = hits+1 WHERE id = '$_GET[id]'");

$host = $_SERVER['HTTP_HOST'];
$id = $_GET[id];
echo "<meta http-equiv=\"Refresh\" content=\"0;URL=http://woox.dk\">";
} else {

echo "<p><font size=1 face=Verdana>";

$query = mysql_query("SELECT * FROM konkurrence ORDER BY hits DESC");
while ($row = mysql_fetch_array($query)) {

$count = 0;
$count++;

echo "Nr. <b>$count</b> er <b><a href=mailto:$row[email]>$row[navn]</a></b>, som har fået <b>$row[hits]</b> ind på siden.<br>";
}
}
echo "</font>";
?>
Avatar billede riversen Nybegynder
27. juli 2004 - 13:10 #1
gem en cookie, der fortæller hvilke profiler man har besøgt... inden du opdaterer hits skal du så lige tjekke om cookien er sat... hvis den er det, skal der ikke tælles et hit, da profilen så har været besøgt tidligere.

Den er ikke 100% sikker, da cookies kan slettes.

Alternativt gem IP.
Ulemper: tager plads i db og der kan godt være flere personer bag samme ip.. skoler, firmaer etc.

jeg ville vælge cookies.
Avatar billede wqazr Nybegynder
27. juli 2004 - 13:14 #2
hehe tak, men spørger fordi jeg gerne vil ahve en til at lave det. Ved godt hvordan man kan gøre. Vil du lave det til mig?? vil gerne have at den gemmer ik, da det er til en konkurrence om en ril trøje om man skal ikke kunne snyde..
Avatar billede wqazr Nybegynder
27. juli 2004 - 13:15 #3
hehe tak, men spørger fordi jeg gerne vil ahve en til at lave det. Ved godt hvordan man kan gøre, men kan ikke finde uda f det. Vil du lave det til mig?? vil gerne have at den gemmer ip, da det er til en konkurrence om en ril trøje om man skal ikke kunne snyde..
Avatar billede riversen Nybegynder
27. juli 2004 - 13:23 #4
så skriv hvilken metode du vil have, det skal løses med... ellers kan folk jo ikke lave det du ønsker ;-)
Avatar billede wqazr Nybegynder
27. juli 2004 - 13:28 #5
Jeg vil gerne have at den gemmer ip'erne i en database.. ved ik om i skal bruge den database jeg bruger nu, så skriver den lige aligevel:

CREATE TABLE konkurrence (
  id int(11) NOT NULL auto_increment,
  navn varchar(50) NOT NULL default '',
  email varchar(50) NOT NULL default '',
  hits varchar(50) NOT NULL default '',
  ip varchar(60) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Den database bruger jeg..
Avatar billede riversen Nybegynder
27. juli 2004 - 13:39 #6
<?

include_once('sql.php');

$result = mysql_query( "SELECT ip FROM konkurrence WHERE ip = '" . $_SERVER["REMOTE_ADDR"] . "'" );


if ($_GET["id"] && !mysql_num_rows($result)){
    mysql_query("UPDATE konkurrence SET hits = hits+1 WHERE id = '$_GET[id]'");

$host = $_SERVER['HTTP_HOST'];
$id = $_GET[id];
echo "<meta http-equiv=\"Refresh\" content=\"0;URL=http://woox.dk\">";
} else {
// GEM IP I DATABASE I DENNE ELSE BLOK

echo "<p><font size=1 face=Verdana>";

$query = mysql_query("SELECT * FROM konkurrence ORDER BY hits DESC");
while ($row = mysql_fetch_array($query)) {

$count = 0;
$count++;

echo "Nr. <b>$count</b> er <b><a href=mailto:$row[email]>$row[navn]</a></b>, som har fået <b>$row[hits]</b> ind på siden.<br>";
}
}
echo "</font>";
?>
Avatar billede riversen Nybegynder
27. juli 2004 - 13:40 #7
ved ikke om jeg har misforstået... ovenstående tabel har vel ikke noget med de gemte ip'er at gøre :-)

men opret en tabel til det, og tilret den sql forespørgsel jeg har lavet... princippet er det samme
Avatar billede wqazr Nybegynder
27. juli 2004 - 14:03 #8
Tror ikke helt du har forstet det.. forklare lige min table:

CREATE TABLE konkurrence (
  id int(11) NOT NULL auto_increment,    //self id man bliver oprettet som
  navn varchar(50) NOT NULL default '',  //navnet på personen der tilmelder sig konkurrencen.
  email varchar(50) NOT NULL default '', //personen, der tilmelder sig's email
  hits varchar(50) NOT NULL default '',  //antal personer der har været inde på den side som ham der har tilmeldt sig.
  ip varchar(60) NOT NULL default '',    //ip adressen på han der har tilmeldt sig
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Når man har tilmeldt sig får man som sagt et link udskrevet fx. www.woox.dk/in.php?id=1. Det gælder så, for ham der har tilmeldt sig, at få flest mulig til at gå ind på www.woox.dk/in.php?id=1 . hVIS nu så at jeg går ind på det link og det var dit link (dig der tilmeldte sig og fik id 1) så tæller den et hit til dig. Hvis så jeg prøver at gå der ind igen for at du skal have flere tæller den ikke flere. den gemmer min ip når jeg har givet den et hit, så jeg ikke kan give dig flere. men jeg må godt kunne give ham der har id 2 et hit. håber du forstår. Datbasen skal laves om så man kan gemme iperne på en eller andet måde med ved ik hvordan.
Avatar billede riversen Nybegynder
27. juli 2004 - 14:27 #9
jo, jeg har forstået det rigtigt... du skal bare lave en tabel til ip'erne. Jeg havde kun misforstået idéen med din tabel.
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:15 #10
Hvilke felter skal der være i den table til ip'erne? bare sådan her:

CREATE TABLE konkurrence_ip (
  id int(11) NOT NULL auto_increment,
  ip varchar(60) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:20 #11
Der hvor der står: // GEM IP I DATABASE I DENNE ELSE BLOK hvad skal jeg lave der og vil du evt. lige hurtigt lave det?
Avatar billede riversen Nybegynder
27. juli 2004 - 15:20 #12
du kan godt droppe id og så bare lave ip til primær nøgle...
Avatar billede riversen Nybegynder
27. juli 2004 - 15:21 #13
mysql_query( INSERT INTO konkurrence_ip ( ip ) VALUES( '" . $_SERVER["REMOTE_ADDR"] . "'" ) );
Avatar billede riversen Nybegynder
27. juli 2004 - 15:22 #14
hov.. sådan:

mysql_query( "INSERT INTO konkurrence_ip ( ip ) VALUES( '" . $_SERVER["REMOTE_ADDR"] . "'" ) );
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:23 #15
Så den kommer til at se således ud:

<?

include_once('sql.php');

$result = mysql_query( "SELECT ip FROM konkurrence WHERE ip = '" . $_SERVER["REMOTE_ADDR"] . "'" );


if ($_GET["id"] && !mysql_num_rows($result)){
    mysql_query("UPDATE konkurrence SET hits = hits+1 WHERE id = '$_GET[id]'");

$host = $_SERVER['HTTP_HOST'];
$id = $_GET[id];
echo "<meta http-equiv=\"Refresh\" content=\"0;URL=http://woox.dk\">";
} else {
mysql_query( "INSERT INTO konkurrence_ip ( ip ) VALUES( '" . $_SERVER["REMOTE_ADDR"] . "'" ) );

echo "<p><font size=1 face=Verdana>";

$query = mysql_query("SELECT * FROM konkurrence ORDER BY hits DESC");
while ($row = mysql_fetch_array($query)) {

$count = 0;
$count++;

echo "Nr. <b>$count</b> er <b><a href=mailto:$row[email]>$row[navn]</a></b>, som har fået <b>$row[hits]</b> ind på siden.<br>";
}
}
echo "</font>";
?>
Avatar billede riversen Nybegynder
27. juli 2004 - 15:25 #16
ja, du skal lige huske at rette

$result = mysql_query( "SELECT ip FROM konkurrence WHERE ip = '" . $_SERVER["REMOTE_ADDR"] . "'" );

til
$result = mysql_query( "SELECT ip FROM konkurrence_ip WHERE ip = '" . $_SERVER["REMOTE_ADDR"] . "'" );
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:26 #17
ok
Avatar billede riversen Nybegynder
27. juli 2004 - 15:27 #18
hov, jeg er lige lidt for hurtigt... id er selvfølgelig nødvendigt... id'et på profilen, der besøges... kan du selv rette til?
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:30 #19
Det virker ikke den giver fejl i denne linje:

mysql_query( "INSERT INTO konkurrence_ip ( ip ) VALUES( '" . $_SERVER["REMOTE_ADDR"] . "'" ) );
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:30 #20
hvad mener du med id?
Avatar billede wqazr Nybegynder
27. juli 2004 - 15:53 #21
Forstår ikke hvad du mener :S vil du lave det?
Avatar billede wqazr Nybegynder
27. juli 2004 - 19:03 #22
Efter som du ikke har svaret tænkte jeg mig om og lavede det selv måden jeg lavede det på var ved at bruge et ipban system jeg selv havde lavet for langtid siden.. så koden blev:

<?

include_once('sql.php');

if ($_GET["id"]){

$banned_ip = array();

$query = mysql_query("SELECT * FROM konkurrence_ip") or die(mysql_error());
while ($row = mysql_fetch_array($query)) {
$banned_ip[] = ''.$row['ip'].'';

foreach($banned_ip as $banned) {
    $ip = $_SERVER['REMOTE_ADDR'];
    if($ip == $banned){
?>
<p><center><font size="1" face="Verdana">Du kan kun tælle for et hit engang!</font></center></p>
<?        exit();
    }
}
}

$ip = $_SERVER['REMOTE_ADDR'];

    mysql_query("UPDATE konkurrence SET hits = hits+1 WHERE id = '$_GET[id]'");
    mysql_query("INSERT INTO konkurrence_ip (ip) VALUES ('$ip')") or die(mysql_error());
echo "<meta http-equiv=\"Refresh\" content=\"0;URL=http://woox.dk\">";
} else {

echo "<p><font size=1 face=Verdana>";

$count = 0;

$query = mysql_query("SELECT * FROM konkurrence ORDER BY hits DESC");
while ($row = mysql_fetch_array($query)) {


$count++;

echo "Nr. <b>$count</b> er <b><a href=mailto:$row[email]>$row[navn]</a></b>, som har fået <b>$row[hits]</b> ind på siden.<br>";
}
}
echo "</font>";
?>
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