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:


<?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:

$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
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.
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.
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:

<?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 knop om je tekst aan te passen.
PHP.net! De zoekfunctie op die site doet wonderen...
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:

<?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);
?>
?>
Ik heb nu dit staan in a_htaccess.php:


<?php
$user = "**";
$pass = "**";
$dbh = new PDO('mysql:host=mysqlhost;dbname=**', $user, $pass);
$myFile = ".htaccess";
$fh = fopen($myFile, 'w') or die("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?
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.
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?
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 ;)
ik heb nu php5, maar nu krijg ik HTTP-FOUT 500: INTERNAL SERVER ERROR

Reageren