ip bannen // enkele vraagjes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan H

Jan H

13/08/2007 15:25:00
Quote Anchor link
Hey,

Wat ik graag zou willen bereiken: Op mijn site kan de admin entries verwijderen uit het gastenboek. Nu zou ik graag hebben dat als zo'n entry verwijderd wordt, het ip ervan wordt opgeslagen in een tabel. Ik heb dus een tabel 'tblGastenboek' en een tabel 'tblBanned'.

Deze query wordt uitgevoerd indien de admin op de delete-link klikt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    ob_start();
    require_once("config/rights.php");
    if($_SESSION['level'] == 1) {
    $sql = "DELETE FROM tblGastenboek WHERE GastenboekID = " . $_GET['id'] . ";";

    if(mysql_query($sql, $link)) {
        header("location: gastenboek.php");
    }
else {
        echo mysql_error($link);
    }

    ob_end_flush();
?>


Ik zou echter in dit bestand ook nog willen toevoegen dat hij het IP (kolom heet ook zo) uit tblGastenboek in tblBanned (kolom IP) toevoegt.
zoiets dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$sql = "SELECT IP FROM tblGastenboek WHERE GastenboekID=" . $_GET['id'] . ";";
$sql = "INSERT INTO tblBanned SET IP='ip ophalen uit vorige sql';";
$sql = "DELETE FROM tblGastenboek WHERE GastenboekID = " . $_GET['id'] . ";";


Zou iemand dit kunnen klaarspelen?


Mijn 2e vraag: is het mogelijk om in je .htaccess de ip-adressen uit de database op te roepen die geblokkeerd moeten worden? of kan je geen php implementeren in je htaccess? iemand raad?


tnx
 
PHP hulp

PHP hulp

08/05/2021 14:38:53
 
PHP erik

PHP erik

13/08/2007 15:35:00
Quote Anchor link
Probleem 1 snap ik niet. Je kunt toch ook $_SERVER['REMOTE_ADDR'] opnieuw gebruiken in plaats van IP uit tblGastenboek te halen? En anders kun je gewoon mysql_fetch_assoc() gebruiken.

Probleem 2; je kunt een handler toevoegen; een script dat altijd wordt uitgevoerd van te voren. Of je kunt een htaccess laten genereren door je PHP script met fopen() en dergelijke.
 
Jan H

Jan H

13/08/2007 15:39:00
Quote Anchor link
PHPerik schreef op 13.08.2007 15:35:
Probleem 1 snap ik niet. Je kunt toch ook $_SERVER['REMOTE_ADDR'] opnieuw gebruiken in plaats van IP uit tblGastenboek te halen? En anders kun je gewoon mysql_fetch_assoc() gebruiken.


Wel, stel nu:

persoon met ip 1.1.1.1 post iets in het gastenboek. Zijn bericht en IP worden opgeslagen in tblGastenboek. De admin wil dit verwijderen en klikt op de delete-link. wat moet er dan gebeuren? -> entry van persoon 1 moet uit tblGastenboek verwijderd worden, en zijn IP 1.1.1.1 moet in tblBanned toegevoegd worden...

met $_SERVER['REMOTE_ADDR'] haal ja dan toch het ip van de admin op voor in tblBanned te zetten? dit is niet de bedoeling.
 
Jan H

Jan H

13/08/2007 16:04:00
Quote Anchor link
PHPerik schreef op 13.08.2007 15:35:
Probleem 2; je kunt een handler toevoegen; een script dat altijd wordt uitgevoerd van te voren. Of je kunt een htaccess laten genereren door je PHP script met fopen() en dergelijke.


Heeft er iemand een voorbeeldscript van zo een gegenereerd htaccess-bestand? Ik vind namelijk niet direct iets.

Dit genereert een lijst van alle gebande ip's:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
    require_once("config/dbconnect.php");
    
    $result = mysql_query("SELECT * FROM tblBanned");
    while($row = mysql_fetch_array($result))
         {

              echo "deny from " . $row['IP'];
            echo "<br />";
          }

?>


Zou iemand dit in zo een fopen-gedoe kunnen steken, want ik vind niet direct iets...

bedankt!

Moderator edit::
Bumpen:
Twee of meer keer achter elkaar in een topic posten heet bumpen.

Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de http://www.phphulp.nl/imgs/forum/edit.gif knop om je tekst aan te passen.
Gewijzigd op 01/01/1970 01:00:00 door Jan H
 
GaMer B

GaMer B

13/08/2007 16:05:00
Quote Anchor link
PHP.net! De zoekfunctie op die site doet wonderen...
 
Arend a

Arend a

13/08/2007 17:01:00
Quote Anchor link
Quote:
Mijn 2e vraag: is het mogelijk om in je .htaccess de ip-adressen uit de database op te roepen die geblokkeerd moeten worden? of kan je geen php implementeren in je htaccess? iemand raad?


Nee, je zult als je dit wilt met php je htaccess moeten schrijven. Gelukkig is dit niet erg gecompliceerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

/*
Dit script periodiek (bijvoorbeeld elke 5 minuten) uitvoeren (via cronjob (linux) of taakplanner (win), vereist php-cli)

create table blocked_ip (
  ip varchar(15)
);
*/



$user = "user";
$pass = "pass";
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$myFile = "/pad/naar/.htaccess";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, "Order Deny,Allow\n");
foreach ($dbh->query('SELECT ip from blocked_ip') as $row) {
    fwrite($fh, "Deny from " . $row["ip"] . "\n");
}

fwrite($fh, "Allow from all\n")
fclose($fh);
?>

?>
Gewijzigd op 01/01/1970 01:00:00 door Arend a
 
Jan H

Jan H

14/08/2007 11:55:00
Quote Anchor link
Ik heb nu dit staan in a_htaccess.php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$user
="**";
$pass="**";
$dbh=newPDO('mysql:host=mysqlhost;dbname=**',$user,$pass);
$myFile=".htaccess";
$fh=fopen($myFile,'w')ordie("can't open file");
fwrite($fh,"\n#ERROR PAGINAS\n\n");
fwrite($fh,"ErrorDocument 505 http://www.aczele.be/error.php?number=505&on=yes\n");
fwrite($fh,"ErrorDocument 408 http://www.aczele.be/error.php?number=408&on=yes\n");
fwrite($fh,"ErrorDocument 400 http://www.aczele.be/error.php?number=400&on=yes\n");
fwrite($fh,"ErrorDocument 401 http://www.aczele.be/error.php?number=401&on=yes\n");
fwrite($fh,"ErrorDocument 500 http://www.aczele.be/error.php?number=500&on=yes\n");
fwrite($fh,"ErrorDocument 403 http://www.aczele.be/error.php?number=403&on=yes\n");
fwrite($fh,"ErrorDocument 501 http://www.aczele.be/error.php?number=501&on=yes\n");
fwrite($fh,"ErrorDocument 404 http://www.aczele.be/error.php?number=404&on=yes\n");
fwrite($fh,"ErrorDocument 502 http://www.aczele.be/error.php?number=502&on=yes\n");
fwrite($fh,"ErrorDocument 405 http://www.aczele.be/error.php?number=405&on=yes\n");
fwrite($fh,"ErrorDocument 503 http://www.aczele.be/error.php?number=503&on=yes\n");
fwrite($fh,"ErrorDocument 504 http://www.aczele.be/error.php?number=504&on=yes\n");
fwrite($fh,"ErrorDocument 415 http://www.aczele.be/error.php?number=415&on=yes\n");
fwrite($fh,"ErrorDocument 302 http://www.aczele.be/error.php?number=302&on=yes\n");
fwrite($fh,"\n#BANNED\n\n");
fwrite($fh,"Order Deny,Allow\n");
foreach($dbh->query('SELECT IP from tblBanned')as$row){
fwrite($fh,"Deny from ".$row["ip"]."\n");
}

fwrite($fh,"Allow from all\n")
fclose($fh);
?>


Ik krijg echter deze error; Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /opt/www/heuninckr/web/www.aczele.be/a_htaccess.php on line 2

wat gaat er hier fout?
 
Arend a

Arend a

14/08/2007 12:08:00
Quote Anchor link
Heb je php 5.0 of later geinstalleerd? Ik heb in mijn voorbeeld PDO gebruikt uit educatieve doeleinden maar nog niet alle hosts ondersteunen dit.
 
Jan H

Jan H

14/08/2007 12:10:00
Quote Anchor link
Arend schreef op 14.08.2007 12:08:
Heb je php 5.0 of later geinstalleerd? Ik heb in mijn voorbeeld PDO gebruikt uit educatieve doeleinden maar nog niet alle hosts ondersteunen dit.


neen, php 4. maar ik kan der server upgraden naar php5. maar zullen alle scripts dan wel nog werken?
 
Frank -

Frank -

14/08/2007 12:14:00
Quote Anchor link
Als jij in versie 4 al veilig programmeert, dan is het vrijwel zeker dat in versie 5 de boel ook werkt. Er zijn namelijk niet al te veel verschillen.

Zie ook de migratie-handleiding.

Edit: Zie ook deze link voor PDO in PHP versie 4.

Heb er zelf nooit mee gewerkt, geef dus geen enkele garantie ;)
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jan H

Jan H

14/08/2007 12:19:00
Quote Anchor link
ik heb nu php5, maar nu krijg ik HTTP-FOUT 500: INTERNAL SERVER ERROR
 
Jan H

Jan H

14/08/2007 13:09:00
Quote Anchor link
ok, weer een probleem ^^

Ik heb in mijn gastenboek nu een extra admin-link 'ban'. met deze link wordt het gastenboekID meegestuurd naar dit script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    ob_start();
    require_once("config/rights.php");
    if($_SESSION['level'] == 1) {
    $sql = "SELECT IP FROM tblGastenboek WHERE GastenboekID = " . $_GET['id'] . ";";
    $result = mysql_query($sql) or die(mysql_error());
    $ip = mysql_fetch_array($result);
    
    $sql2 = "INSERT INTO tblBanned SET IP='$ip';";

    if(mysql_query($sql2, $link)) {
        header("location: gastenboek.php");
    }
else {
        echo mysql_error($link);
    }

    ob_end_flush();
?>

<?php } ?>


Ik krijg echter in mijn database ipv het IP, gewoon 'array'. Ziet iemand de fout? En hoe kan ik dit beter doen, want de code ziet er helemaal niet uit vind ik :) Maar mijn php-kennis is echter te beperkt om dit beter te scripten. maar ik ben bereid bij te leren van jullie :')

Moderator edit::
Bumpen:
Twee of meer keer achter elkaar in een topic posten heet bumpen.

Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de http://www.phphulp.nl/imgs/forum/edit.gif knop om je tekst aan te passen.
Gewijzigd op 01/01/1970 01:00:00 door Jan H
 
Frank -

Frank -

14/08/2007 13:21:00
Quote Anchor link
De uitspraak:
Quote:
Ik krijg echter in mijn database ipv het IP, gewoon 'array'.

De INSERT-query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$sql2
= "INSERT INTO tblBanned SET IP='$ip';";
?>

En waar komt $ip vandaan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$ip
= mysql_fetch_array($result);
?>

Tja, wanneer jij de complete array $ip in de query opneemt, dan is het niet zo gek dat je 'array' in de database krijgt...

$ip['IP'] zal een stuk beter werken dan $ip.

Offtopic: Gebruik geen hoofdletters voor tabel- en/of kolomnamen in de database. Dat gaat vroeg of laat fout.
 
Jan H

Jan H

14/08/2007 13:29:00
Quote Anchor link
pgFrank schreef op 14.08.2007 13:21:
$ip['IP'] zal een stuk beter werken dan $ip.


?
Zo dan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
    $sql2
= "INSERT INTO tblBanned SET IP='$ip['IP']';";
?>

dit werkt niet echt
Sorry, maar ik kan niet echt mee :(
 
Frank -

Frank -

14/08/2007 14:17:00
Quote Anchor link
Quote:
dit werkt niet echt
Dat is jouw probleem, dan mag jij gaan debuggen.

Ik wel best een voorzetje geven, de $ip die niet goed is, maar jij mag gaan uitzoeken hoe het dan wél inelkaar steekt. Ik heb namelijk geen flauw idee wat er bij jou op het beeldscherm staat!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
print_r($ip);
?>

Wat levert dit op? Hiermee echo je de array $ip en krijg je exact te zien wat er nu in deze array staat. Vervolgens pak je het juiste element uit deze array en die stop je in de query. Niks moeilijks aan, maar je moet het wel gestructureerd aanpakken.
 
Jan H

Jan H

14/08/2007 14:29:00
Quote Anchor link
ik heb nu de mysql_fetch_array vervangen door mysql_fetch_row omdat ik toch zeker ben dat ik maar 1 resultaat kan terugkrijgen.

Als ik dan met de print_r functie de variabele $ip uitschrijf, krijg ik dit terug "Array ( [0] => 56.0.84.24 )".

Hoe gebruik ik deze waarde dan in mijn volgende query?
$sql2 = "INSERT INTO tblBanned SET IP='$ip[IP]';";

dit werkt niet, want dan schrijft hij geen waarde in de database als IP.

edit: blijkbaar moest ik gewoon $ip[0] gebruiken. Het werkt nu. Al weet ik niet of dit nu de properste oplossing is...
Gewijzigd op 01/01/1970 01:00:00 door Jan H
 
Frank -

Frank -

14/08/2007 14:49:00
Quote Anchor link
Quote:
Array ( [0] => 56.0.84.24 )

Dus een array met slechts 1 key, namelijk key 0
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$sql2
= "INSERT INTO tblBanned SET IP='$ip[IP]';";
?>

De array $ip met de key IP (die verkeerd is genoteerd, quotes ontbreken).

Dat zijn dus verschillende dingen.

Wanneer je een probleem hebt, moet je dat gestructureerd gaan oplossen. Even overstappen op een andere fetch-functie gaat je echt niet helpen, dat zorgt voor nog meer verwarring, niet doen dus. Maak voor al jouw scripts 1 keuze voor de fetch-functie en ga niet voor de ene query een fetch_assoc gebruiken en voor de andere een fetch_row. Dit gaat gegarandeerd verkeerd.

Ps. De INSERT-query lijkt ook nergens op, dit is geen SQL-standaard. Nu is een standaard niet verplicht, maar voorkomt wel een hoop ellende.
 
Jan H

Jan H

14/08/2007 16:01:00
Quote Anchor link
pgFrank schreef op 14.08.2007 12:14:
Als jij in versie 4 al veilig programmeert, dan is het vrijwel zeker dat in versie 5 de boel ook werkt. Er zijn namelijk niet al te veel verschillen.

Zie ook de migratie-handleiding.

Edit: Zie ook deze link voor PDO in PHP versie 4.

Heb er zelf nooit mee gewerkt, geef dus geen enkele garantie ;)


Is er geen andere manier om dit te doen? server staat nu op php5 (volgens priorweb (=host) toch, en het script werkt nog steeds niet. Ik krijg steeds een internal server error.
 
Frank -

Frank -

14/08/2007 16:05:00
Quote Anchor link
Zie PHP_INFO of PDO wel beschikbaar is (moet worden geactiveerd). Vraag anders de provider even, die weet het ook wel.
 
Jan H

Jan H

14/08/2007 16:24:00
Quote Anchor link
pgFrank schreef op 14.08.2007 16:05:
Zie PHP_INFO of PDO wel beschikbaar is (moet worden geactiveerd). Vraag anders de provider even, die weet het ook wel.

phpinfo:
PDO support enabled
PDO drivers mysql

Het script zou dus moeten werken, maar doet het dus niet :/
 
Jan H

Jan H

16/08/2007 16:29:00
Quote Anchor link
Jan H schreef op 14.08.2007 16:24:
pgFrank schreef op 14.08.2007 16:05:
Zie PHP_INFO of PDO wel beschikbaar is (moet worden geactiveerd). Vraag anders de provider even, die weet het ook wel.

phpinfo:
PDO support enabled
PDO drivers mysql

Het script zou dus moeten werken, maar doet het dus niet :/


up :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.