[PHP] Ban controlle scriptje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Phydomir
  • Registratie: September 2000
  • Laatst online: 21:28
Hallo,

Ik ben bezig om een script te maken waarbij hij uit een database ip's haalt die hij controleerd, als ze erin staan mogen ze geen reacties meer plaatsen, staat ij er niet in mag het wel.

Nu had ik daarvoor het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
                
        $ip = "$REMOTE_ADDR"; 
                
        mysql_connect ("$host", "$user", "$pass") or
        die ("Could not connect to database"); 
    
        mysql_select_db("$db") or 
        die ("Could not find database"); 
        
        $query1 =("select id, ip from banlist where ip ='$ip'");
                
        $resultaat = mysql_query($query1) or die(mysql_error()); 
    
        while($obj = mysql_fetch_object($resultaat)){

            if(!isset($submit) and ($ip == $obj->ip))
            
                {

                echo "Sorry, Je bent gebanned van deze site"; 
                
                }

            Elseif(!isset($submit) and ($ip !== $obj->ip))
            
                        {

                echo " <br></font><font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#333333'></font>
                        <font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#333333'>
                        <FORM ACTION='toonreacties2.php' METHOD='post'>
                        <input type='hidden' name='reactieid' value='$id'>
                        <font color='#333333'> Nick: </font><BR>
                        <INPUT TYPE='text' NAME='nick' style='font-family: Verdana,Arial,Helvetica; background-color: #242424; color: #999999; border:1px solid #000000' value='' SIZE='22' MAXLENGTH='120'><br><br>
                        <font color='#333333'> Reactie:: </font><BR>
                        <textarea name='reactie' style='font-family: Verdana,Arial,Helvetica; background-color: #242424; color: #999999; border:1px solid #000000' rows=6 cols=40></textarea><br><br>
                        <INPUT TYPE='submit' VALUE='Plaats Reactie' name='submit' style='font-family: Verdana,Arial,Helvetica; background-color: #242424; color: #999999; border:1px solid #000000'>
                        </FORM>"
                        
                        ;
                        
                        }

                        }
?>


Alleen nu geeft ie wel aan dat als het ip in de databse staat, dat je gebanned bent. Alleen als hij er niet in staat geeft ie niet het formuliertje weer waarmee je een reactie kunt plaatsen.

Zodra ik where ip ='$ip' uit de query haal gefet ie die wel weer alleen laat ie er dan net zoveel zien als dat er ip's in de databse staan.

Wat doe ik fout?

Edit: sorry voor het verneuken van de layout.

ps: die !isset zit erin omdat er eigenlijk nog een insert into stukje onder zit.

iRacing | Sim Gear: SimXperience AccuForce, Heusinkveld Pro, Custom 80/20 rig, Sparco R100 Sky


Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Vragen:

1/ Waarom zet je quotes om je variabelen heen die je gebruikt ?
2/ Waarom gebruik je een while loop ? Waarom kijk je niet gewoon of je rows van je database terugkrijgt ?
3/ Waarom gebruik je fetch-object ?
4/ Waarom check je in je whileloop die alleen maar 'sure hits' bevat nog eens of het een hit is?
5/ Waarom denk je dat als je dit IN de whileloop controleerd je ALS je iets vindt NOOIT iets zal vinden wat niet een hit is ?

Extra:
1/ Waarom check je of $submit niet bestaat ?

Tips:
1/ Ga eens netjes indenten.
2/ Gebruik [php]-tags om je phpcode.
... HTH :D

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

even een leesbare versie van zijn PHPcode:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ip = "$REMOTE_ADDR";

mysql_connect ("$host", "$user", "$pass") or die ("Could not connect to database");
mysql_select_db("$db") or die ("Could not find database");

$query1 =("select id, ip from banlist where ip ='$ip'");
$resultaat = mysql_query($query1) or die(mysql_error());

while($obj = mysql_fetch_object($resultaat)){
   if(!isset($submit) and ($ip == $obj->ip))
   {
      echo "Sorry, Je bent gebanned van deze site";
   }
   Elseif(!isset($submit) and ($ip !== $obj->ip))
   {
      echo "<br>[snip]
      <font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#333333'>
      <FORM ACTION='toonreacties2.php' METHOD='post'>
      <input type='hidden' name='reactieid' value='$id'>
      <font color='#333333'> Nick: </font><BR>
      <INPUT TYPE='text' NAME='nick' [snip]><br><br>
      <font color='#333333'> Reactie:: </font><BR>
      <textarea name='reactie' [snip]></textarea><br><br>
      <INPUT TYPE='submit' VALUE='Plaats Reactie' name='submit' [snip]>
      </FORM>";
   }
}

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

In pseudocode staat er het volgende:
code:
1
2
3
4
5
6
Haal alle bans op waarvan het IP gelijk is aan $ip.
Voor ieder gevonden ban:
  Als het IP gelijk is aan $ip
    je bent geband
  anders
    laat brak html-formpje zien


Is het misschien in je opgekomen dat als iemand niet geband is, hij niet in je banlist staat?

[ Voor 0% gewijzigd door kvdveer op 16-11-2002 20:05 . Reden: typo / bug ]

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Simpel gezegd, als je geen record vind geef je het formpje weer anders de waarschuwing.

Acties:
  • 0 Henk 'm!

Verwijderd

$ip !== $obj->ip

moet != zijn sowieso...vreemd dat je met deze hele php code geen 30 errors krijgt sowieso :).

ach ik ben de lulligste niet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ip = "$REMOTE_ADDR"; 

mysql_connect ("$host", "$user", "$pass") or die ("Could not connect to database"); 
mysql_select_db("$db") or die ("Could not find database"); 

$query1 = "SELECT id, ip FROM banlist WHERE ip ='$ip'"); 
$resultaat = mysql_query($query1) or die(mysql_error()); 

if ( $temp = mysql_fetch_array( $resultaat ) )
{
    echo "Je bent gebanned eik0l";
}

else {
    echo brak formpje (copyright 2002 by die ene user boven me)
}

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
$ip !== $obj->ip


Is goede PHP hoor, het checkt niet alleen of het een andere waarde heeft, maar ook of het wel van hetzelfde type is!

Acties:
  • 0 Henk 'm!

Verwijderd

Klopt, maar is wel compleet overbodig en kost weer net iets meer tijd.

Acties:
  • 0 Henk 'm!

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 21:16

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
PHP:
1
2
3
4
5
6
7
8
9
$ip[]="xxx.xxx.xx.x"; 
$ip[]="xxx.xxx.xx.x"; 
$ip[]="xxx.xxx.xx.x"; 

for($i=0;$i<sizeof($ip);$i++) 
     { 
     if($ip[$i]==$REMOTE_ADDR) 
     die("<h1>Banned</h1><hr>Je bent gebanned"); 
     }


* We Are Borg probeert voorzichtig wat toe te voegen :) Of is dit niet goed :?

Dit heb ik toegevoegd aan mijn forum bij 2 files. Elke keer een ip toevoegen en je bent klaar :) Helaas weet ik niet hoe je een ip m.b.v. een beveiligde pagina kan toevoegen, maar dat zullen een hoop mensen hier vast wel weten

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
WeAreBorg: zet dat in een apart filetje bans.txt
dan doe je een fopen op bans.txt en voor iedere rij een $ip[] =
via een formpje oid kun je ook naar de file schrijven om ip's toe te voegen

maar toch blijft een db handiger ;)

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

hmm, een loopje om te checken of een bepaald iets voorkomt in een db lijkt m ietwat overdreven tog?

kzou zelf dit hebben gedaan:
PHP:
1
2
3
4
5
6
$sql = "SELECT * FROM banlist WHERE ip = '$ip'"; 
$resultaat = mysql_query($sql);
$aantal = mysql_num_rows($resultaat);

if ($aantal > 0) { echo "Je bent geband!!"; }
else { echo "je mag op deze site!"; }


zoiets lijkt mij makkelijker, tog? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 16 november 2002 @ 22:45:
Klopt, maar is wel compleet overbodig en kost weer net iets meer tijd.
Mwah, niet helemaal mee eens.

De stricte controle van een variabele (met !==) zorgt ervoor dat er niet geprobeerd wordt om een van de 2 waarden te casten (string naar integer, of viceversa) zodat er een vergelijking plaats vindt. Er wordt voordat er naar de waarden wordt gekeken, een simpel integer veldje vergeleken om te controleren of de types overeen komen.

Overbodig, en mogelijk bug-prone is het wel.

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Heeft de topicstarter uberhaubt mijn post wel gelezen ?

O well ;)

PHP:
1
2
3
4
5
6
7
$theLink   = mysql_connect( /* host */, /* user */, /* pass */ );  
             mysql_select_db( /* database */, $theLink );
$theQuery  = "SELECT ip FROM banlist WHERE ip = '$REMOTE_ADDR' LIMIT 1";
$theResult = mysql_query( $theQuery, $theLink );

if( mysql_num_rows( $theResult ) )
     echo "Banned";

Veel efficienter kan et probably niet. Een index op het veld 'ip' in 'banlist' zou nog wat helpen.

Toch geen rocketscience ? :D

Acties:
  • 0 Henk 'm!

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 23-06 23:17
Alleen wordt "SELECT count(ip) FROM banlist WHERE ip = '$ip'" + mysql_fetch_row() aangeraden. Dit in plaats van mysql_num_rows() dat er kennelijk bekend om staat dat het servers kan laten crashen.

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Verklaar jezelf nader. URL?
Pagina: 1