Ip adres blocken
Ik heb in een database alvast een ip adres neergezet. Ik moet de boel nog zo maken dat hij als er gereageerd wordt op bijv nieuws dat hij dan het ip toevoegt.
Nu bestaat mijn table ip op dit moment uit de volgende velden:
ip_id
ip
news_id
date
ban
Het veld ban kan alleen maar een 1 of een 0 staan. Is het een 0 dan is hij niet gebanned. Staat er een 1 dan moet hij gebanned worden.
Nu wil ik met de volgende code kijken of je gebanned bent. Daarmee gebruik ik mijn eigen ip als test. Echter gebeurt er helemaal niks. hij zegt alleen Qeury was leeg.
Dit is mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include "inc_connect.php";
$current_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip = '" . $current_ip . "'";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
echo "<center>Je bent geblokkeerd op deze website.</center>";
}
?>
include "inc_connect.php";
$current_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip = '" . $current_ip . "'";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
echo "<center>Je bent geblokkeerd op deze website.</center>";
}
?>
echter staat er dus alleen maar query is leeg op het scherm. Nu heb ik current_ip al eens vervangen door letterlijk mijn ip in te vullen maar ook dan geeft hij dezelfde melding.
Kan iemand mij vertellen wat er fout gaat?
EDIT:
De Dingen als news_id en date ga ik gebruiken om in de backend te kunnen zien bij welk news article en wanneer het ip is gebruikt. Om zo de laatste reactie te achterhalen.
Gewijzigd op 01/01/1970 01:00:00 door Gerben van Erkelens
Als die gegevens in je database voorkomen, zou gewoon weergegeven moeten worden dat je gebanned bent.
Nog iets mbt tot je datamodel: het lijkt mij logischer om het ip adres bij het nieuwsbericht in de tabel op te slaan in plaats van andersom. Je hebt immers al een datum waarop het article geplaatst is en dan ook een ip adres waarmee het geplaatst is.
Als ik er echter en ban = 1 bij doe dan werdt hij nog steeds niet en geeft hij hetzelfde weer. De code nu is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include "inc_connect.php";
$current_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip = '". $current_ip ."' AND ban = 1";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
echo "<center>Je bent geblokkeerd op deze website.</center>";
}
?>
include "inc_connect.php";
$current_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip = '". $current_ip ."' AND ban = 1";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
echo "<center>Je bent geblokkeerd op deze website.</center>";
}
?>
snap niet waar het fout gaat.
Welke melding krijg je precies dan?
Gecontroleerd of hij $current_ip niet leeg was maar die bevat het juiste ip en daarnaast ook gekeken of er iets in de DB was ingevuld wat ook klopt.
Echo de query eens, dan krijg je zekerheid over wat je nu precies naar de database stuurt.
Hmm dat is raar. Als ik de query echo dan krijg ik precies hetzelfde terug. Dus niet wat ik eigenlijk query lijkt me. Of hij is dus daadwerkelijk leeg.
En Frank bedoelt dat je de query echoed, dus de variabele $query. Dat heb je gedaan?
tevens me hele pagina afgezocht maar geen Query is leeg gevonden :S
Nu breekt mijne bek open. Heb de gehele local site en www map gechecked via dreamweaver of er in de sourcecode Qeury was leeg stond maar nergens op de site is deze te vinden :S
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include "inc_connect.php";
$current_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip = '" . $current_ip . "'";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
echo "<center>Je bent geblokkeerd op deze website.</center>";
}
?>
include "inc_connect.php";
$current_ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip = '" . $current_ip . "'";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
echo "<center>Je bent geblokkeerd op deze website.</center>";
}
?>
Dan vind ik het niet zo vreemd want je gebruikt eerst $query als variabelenaam, en later als je hem uitvoert ineens $sql.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
EDIT:
verrekte jammer dat ik daar al twee dagen gewoon gans overheen kijk.....
Gewijzigd op 01/01/1970 01:00:00 door Gerben van Erkelens
Gerben van Erkelens schreef op 29.01.2007 20:39:
Dan moet je toch eens wat aan de error_reporting() doen! Zet die op E_ALL en je krijgt direct een notice dat je een ongedefinieerde variabele gebruikt.uhum............lol?
EDIT:
verrekte jammer dat ik daar al twee dagen gewoon gans overheen kijk.....
EDIT:
verrekte jammer dat ik daar al twee dagen gewoon gans overheen kijk.....
Onmisbaar bij het debuggen...
goede tip, ga ik dat iig even doen zodat het voortaan wat makkelijk gaat :D
Bijkomend voordeel: omdat die error_reporting (E_ALL) zelfs over notices gaat klagen ga je na een tijdje een stuk scherper kijken. Take a tip from one who's tried.
eigenlijk onder het motto twee vliegen in 1 klap slaan :)
Ja, eerst vind je het zwaar irritant al die notices steeds, maar na een tijdje programmeer je gewoon beter.
Mooi dan wordt dat vanaf nu mijn nieuwe standaard.