Opzet:
Via een form kunnen website bezoekers zich toevoegen aan een sqlite database. Om spam te voorkomen wil ik het aantal insert entries per ip adress (ja ik weet ze kunnen spoofen) limiteren tot 1. Dit is de eerste keer dat ik werk met sqlite en php, wat werkt is dat gebruikers zich kunnen toevoegen aan de database maar ik kan niet limiteren op 1 entry per IP adress, tenminste mijn opgezette 'code' werkt niet.
Relevante code:
Ik zie zo snel niet wat ik fout doe en heb ook nog de volgende bedenkingen:
> Is mijn sql/php syntax correct voor de IP query, vooral het aanspreken van php variable $ip binnen een SELECT statement.
> Kan ik wel empty() gebruiken voor het resultaat van een query (wat een array is toch?)/
Via een form kunnen website bezoekers zich toevoegen aan een sqlite database. Om spam te voorkomen wil ik het aantal insert entries per ip adress (ja ik weet ze kunnen spoofen) limiteren tot 1. Dit is de eerste keer dat ik werk met sqlite en php, wat werkt is dat gebruikers zich kunnen toevoegen aan de database maar ik kan niet limiteren op 1 entry per IP adress, tenminste mijn opgezette 'code' werkt niet.
Relevante code:
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
28
29
30
31
| <?php $bnetname = $_POST['bnetname']; $ip = $_SERVER['REMOTE_ADDR']; try { //open the database $db = new PDO('sqlite:bnetnames.sqlite'); //create the database $db->exec("CREATE TABLE participants (Id INTEGER PRIMARY KEY, bnetname TEXT, ip INTEGER)"); // check if an IP adress already is in the table, if it is not then execute the prepared INSERT statement $checkip = $db->query("SELECT * FROM participants WHERE ip LIKE '$ip'"); //prepare INSERT statement $stmt= $db->prepare("INSERT INTO participants(bnetname, ip) VALUES (:bnetname, :ip)"); //bind statement variables directly to input values $stmt->bindParam(':bnetname', $bnetname, SQLITE3_TEXT); $stmt->bindParam(':ip', $ip, SQLITE3_TEXT); //Execute INSERT statement if a name has been filled in and IP is not already in db if ((!empty($bnetname))&&($name="validate")&&(empty($checkip))) { $stmt->execute(); } ?> |
Ik zie zo snel niet wat ik fout doe en heb ook nog de volgende bedenkingen:
> Is mijn sql/php syntax correct voor de IP query, vooral het aanspreken van php variable $ip binnen een SELECT statement.
> Kan ik wel empty() gebruiken voor het resultaat van een query (wat een array is toch?)/