IP foutje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marnix Peters

Marnix Peters

28/12/2007 12:52:00
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
    }
}


?>
 
PHP hulp

PHP hulp

22/12/2024 09:53:04
 
Frank -

Frank -

28/12/2007 12:54:00
Quote Anchor link
De kolom 'ip' is blijkbaar niet uniek, de UNIQUE-constraint zal ontbreken.

Oplossing: Maak een UNIQUE-constraint aan (zie de handleiding van MySQL) en controleer of de INSERT-query is mislukt vanwege foutnummer 1062.
 
TJVB tvb

TJVB tvb

28/12/2007 12:56:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
?>

Zet dit eens bovenaan je script om te kijken of je nog eventuele errors krijgt.
 
Marnix Peters

Marnix Peters

28/12/2007 12:58:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


Dat krijg ik als errors..

En frank, ik snap niet echt wat je bedoeld..
 
W W

W W

28/12/2007 13:12:00
Quote Anchor link
Volgens mij word je formpje niet goed verzonden.
 
Marnix Peters

Marnix Peters

28/12/2007 13:17:00
Quote Anchor link
Het komt wel allemaal netjes in de database aan. Hoe anders?
 
Crispijn -

Crispijn -

28/12/2007 13:17:00
Quote Anchor link
het is niet zo ingewikkeld wat Frank bedoeld:

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...
 
Marnix Peters

Marnix Peters

28/12/2007 13:20:00
Quote Anchor link
Maar je kan maar 1 autoincrement per tabel neerzetten?
 
Crispijn -

Crispijn -

28/12/2007 13:24:00
Quote Anchor link
ik zei ook niet dat je autoincrement op het ip veld moet zetten. ik gaf alleen wat uitleg en waaraan je het kon herkennen.

je moet dus een unique toekennen aan het veld ip
 
Marnix Peters

Marnix Peters

28/12/2007 13:26:00
Quote Anchor link
Maar hoe maak je het unique dan?
 
Joren de Wit

Joren de Wit

28/12/2007 14:08:00
Quote Anchor link
marnix schreef op 28.12.2007 13:26:
Maar hoe maak je het unique dan?
Door in phpMyAdmin op het knopje met de rode U achter de kolomnaam te klikken...
 
Frank -

Frank -

28/12/2007 15:16:00
Quote Anchor link
marnix schreef op 28.12.2007 13:26:
Maar hoe maak je het unique dan?
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.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.