IP foutje
Ik kom niet verder met me script want ik maak een loterij script maar je mag maar 1 keer meedoen. Maar nu kan je zovaak mee doen als je wilt. Hij slaat de IP op in de database (database connectie heb ik net weggehaald) maar je kan zo vaak mee doen als je wilt.
Zo, heeft iemand de oplossing, hier onder is me script:
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
32
33
34
35
36
37
38
39
40
41
42
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
32
33
34
35
36
37
38
39
40
41
42
<?php
$sql = mysql_query('SELECT ip FROM loterij WHERE ip="'.$_SERVER['REMOTE_ADDR
'].'"') OR die (mysql_error());
$naam = strip_tags($_POST['naam']);
$email = strip_tags($_POST['email']);
$ip = $_SERVER['REMOTE_ADDR'];
if(mysql_num_rows($sql) >= 1){
echo 'Je hebt je al eens eerder aangemeld voor de loterij, kom morgen maar weer terug!';
} else {
if($_POST['submit']){
if($_POST["naam"] != "" && $_POST["email"] != ""){
$insert = 'INSERT INTO loterij (naam, email, ip) VALUES ("'.$naam.'", "'.$email.'", "'.$ip.'")';
mysql_query($insert) OR die (mysql_error());
echo 'Bedankt voor je deelname aan de loterij';
} else {
echo 'Je bent verplicht alle velden in te vullen.';
}
} else {
echo '<form method="post">';
echo '<table border="0" width="100%" cellspacing="1" cellpadding="0"><form method="POST">';
echo '<tr>';
echo '<td width="28%"><FONT STYLE="font-family:Verdana;font-size:11" color="white">Naam:</td>';
echo '<td width="72%" colspan="2"><input type="text" style="width: 50%" name="naam">';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td width="28%"><FONT STYLE="font-family:Verdana;font-size:11" color="white">Email:</td>';
echo '<td width="72%" colspan="2"><input type="text" style="width: 50%" name="email">';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td>';
echo '<input type="submit" name="submit" value="Verzend">';
echo '</td>';
echo '</tr>';
echo '</form>';
echo '</table>';
}
}
?>
$sql = mysql_query('SELECT ip FROM loterij WHERE ip="'.$_SERVER['REMOTE_ADDR
'].'"') OR die (mysql_error());
$naam = strip_tags($_POST['naam']);
$email = strip_tags($_POST['email']);
$ip = $_SERVER['REMOTE_ADDR'];
if(mysql_num_rows($sql) >= 1){
echo 'Je hebt je al eens eerder aangemeld voor de loterij, kom morgen maar weer terug!';
} else {
if($_POST['submit']){
if($_POST["naam"] != "" && $_POST["email"] != ""){
$insert = 'INSERT INTO loterij (naam, email, ip) VALUES ("'.$naam.'", "'.$email.'", "'.$ip.'")';
mysql_query($insert) OR die (mysql_error());
echo 'Bedankt voor je deelname aan de loterij';
} else {
echo 'Je bent verplicht alle velden in te vullen.';
}
} else {
echo '<form method="post">';
echo '<table border="0" width="100%" cellspacing="1" cellpadding="0"><form method="POST">';
echo '<tr>';
echo '<td width="28%"><FONT STYLE="font-family:Verdana;font-size:11" color="white">Naam:</td>';
echo '<td width="72%" colspan="2"><input type="text" style="width: 50%" name="naam">';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td width="28%"><FONT STYLE="font-family:Verdana;font-size:11" color="white">Email:</td>';
echo '<td width="72%" colspan="2"><input type="text" style="width: 50%" name="email">';
echo '</td>';
echo '</tr>';
echo '<tr>';
echo '<td>';
echo '<input type="submit" name="submit" value="Verzend">';
echo '</td>';
echo '</tr>';
echo '</form>';
echo '</table>';
}
}
?>
Oplossing: Maak een UNIQUE-constraint aan (zie de handleiding van MySQL) en controleer of de INSERT-query is mislukt vanwege foutnummer 1062.
Zet dit eens bovenaan je script om te kijken of je nog eventuele errors krijgt.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
Notice: Undefined index: REMOTE_ADDR in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 15
Notice: Undefined index: naam in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 16
Notice: Undefined index: email in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 17
Notice: Undefined index: submit in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 22
Notice: Undefined index: naam in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 16
Notice: Undefined index: email in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 17
Notice: Undefined index: submit in /home/veeltje/domains/marnixpeters.nl/public_html/habbowarning/loterij.php on line 22
Dat krijg ik als errors..
En frank, ik snap niet echt wat je bedoeld..
Volgens mij word je formpje niet goed verzonden.
Het komt wel allemaal netjes in de database aan. Hoe anders?
Je bent vast bekend met de unique die je meegeeeft op een id icm autoincrement.
Nu zet je ook de unique eigenschap op je ip veld in je database.
Wanneer je iets wil toevoegen krijg je een mysql_error welke je kan afvangen met een nette weergave voor de gebruiker. In jou geval dus dat je niet meer mee mag doen met de loterij...
Maar je kan maar 1 autoincrement per tabel neerzetten?
je moet dus een unique toekennen aan het veld ip
Maar hoe maak je het unique dan?
marnix schreef op 28.12.2007 13:26:
Door in phpMyAdmin op het knopje met de rode U achter de kolomnaam te klikken...Maar hoe maak je het unique dan?
marnix schreef op 28.12.2007 13:26:
Het zal ongetwijfeld aan mij liggen, maar ik snap niet waarom je in dit soort gevallen niet even de handleiding er bij pakt. Daar staat namelijk letterlijk uitgelegd hoe je een UNIQUE-index aanmaakt.Maar hoe maak je het unique dan?
RTFM
Verder kun je in MySQL per tabel slechts 1 auto_increment aanmaken, maar MySQL is dan ook nogal beperkt in de functionaliteit. Je kunt het eigenlijk niet eens een DMBS noemen, daarvoor gaat er veel te veel fout en ontbreekt er teveel functionaliteit. Wil je een echte database hebben, dan zul je deze gebreken zelf moeten oplossen of een kant-en-klare DBMS moeten gebruiken. Denk bv. aan PostgreSQL of Firebird.