Ban system

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Ban system

Δημοσίευση από mariosal » 11 Ιουν 2009 13:37

Γεια σας,

Έχω φτιάξει ένα script και έχω γράψει ένα ban script ώστε να κρατάω τους ανεπιθύμητους έξω από τη σελίδα.

Κώδικας: Επιλογή όλων

$ban = mysql_query('SELECT * FROM ban');
$banned = 0;
while ($rows = mysql_fetch_assoc($ban) && $banned == 0)
	if ($rows['viewed'] == 'Yes') {
		++$banned;
		die('You are banned');
	}
	elseif ($_SERVER['REMOTE_ADDR'] == $rows['ip'] || $_COOKIE['username'] == $rows['username']) {
		if ($_SERVER['REMOTE_ADDR'] == $rows['ip'] && $_COOKIE['username'] != $rows['username'])
			mysql_query("INSERT INTO ban (username) VALUES ('{$_COOKIE['username']}')");
		if ($_COOKIE['username'] == $rows['username'] && $_SERVER['REMOTE_ADDR'] != $rows['ip'])
			mysql_query("INSERT INTO ban (ip) VALUES ('{$_SERVER['REMOTE_ADDR']}')");
		
		++$banned;
		die('You are banned');
		mysql_query("INSERT INTO ban (viewed) VALUES ('Yes')");
	}
Δουλεύει ως εξής:

Εκτελεί μία loop μέχρι το $rows να γίνει όσο το $ban και όσο το $banned να είναι 0.
Αφού μπει στη while ελέγχει εάν ο χρήστης έχει δει ήδη το μήνυμα. Εάν δεν το έχει δει ελέγχω εάν η IP ή ένα cookie που αποθηκεύω υπάρχουν στη βάση στο table ban. Εάν υπάρχουν Τότε ελέγχω μήπως ο χρήστης έχει κρατήσει το cookie αλλά έχει αλλάξει η IP του και έτσι τη συμπληρώνω στον πίνακα. Το ίδιο γίνεται και στην επόμενη if ελέγχω εάν έχει σβήσει το cookie και έχει την ίδια IP και συμπληρώνω το cookie στην mysql, στην περίπτωση όμως που δεν έχει cookie συμπληρώνεται ένα κενό. Έπειτα αυξάνω κατά ένα το $banned και του πετάω το μήνυμα You are banned και γράφω στον πίνακα στο row viewed Yes δηλαδή ότι το έχει δει.

Το πρόβλημα μου είναι ότι Όλα αυτά τα γράφει σε διαφορετική γραμμή. Δηλαδή εάν εγώ έχω κάνει ban το username mariosal γράφει το εξής

Κώδικας: Επιλογή όλων

1.		mariosal
2.					Yes
3. {ip}
Πώς μπορώ να τα γράφω στην ίδια γραμμή;

Σημείωση: Δεν χρησιμοποιώ auto inrement id όπως δείχνω στο παράδειγμα, το έγραψα απλά για να καταλάβετε πώς το γράφει στον πίνακα.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Ban system

Δημοσίευση από ThyClub » 11 Ιουν 2009 14:55

Πρώτα απ όλα δεν είναι ο σωστός τρόπος να κάνεις ban κάποιον απο την ip του.

Δεύτερον μάλλον μετά το πρώτο insert χρειάζεσαι update και όχι ξανα insert

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Ban system

Δημοσίευση από mariosal » 11 Ιουν 2009 15:04

Από τι δηλαδή να τον κάνω ban;

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Ban system

Δημοσίευση από dimsis » 11 Ιουν 2009 15:09

Από το username του.
Με τις dynamic IP των ISP, σήμερα την έχω εγώ, αύριο ένας άλλος.. γιατί να είναι banάρισμένος άδικα ο άλλος;

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Ban system

Δημοσίευση από fafos » 11 Ιουν 2009 21:31

Gia pio sigoura mporeis na mplokareis ton ISP kai meta apo liges hmeres tha eisai monos sou :lol:
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Ban system

Δημοσίευση από mariosal » 11 Ιουν 2009 23:45

Χαχ :P :lol:

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες