PFZ.nl - PHP Community: Unique index creeren - Foutmelding - Databases - Forum - PFZ.nl - PHP Community

Je kunt niet antwoorden op dit topic
#1 08-09-2010 18:10
Beste mensen,

2 weken geleden had ik al hulp gevraagt met ongeveer ditzelfde probleem. Ik ben er nog steeds niet uit. Kan iemand mij nogmaals helpen?

het is de bedoeling dat als je een pasnummer invuld deze wordt gecontroleerd in de database en een foutmelding krijgt als deze al bestaat.

Deze query moet ik in PHP MyAdmin draaien:

1
CREATE UNIQUE INDEX u_pasnummer ON wkhouders (pasnummer);


Als ik dat doe krijg ik de melding:

#1170 - BLOB/TEXT column 'pasnummer' used in key specification without a key length

Dit is het 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php


// connecten met database
mysql_connect ('localhost', 'root', '0000');


// database selsecteren
mysql_select_db('wkhouders');



// als de server een aanvraag krijgt en de methode is POST
if($_SERVER[ 'REQUEST_METHOD'] == 'POST')
{


// even controleren of alle $_POST['vars'] binnen komen
print_r($_POST);

// LET op de QUOTES!
$SQL = "INSERT INTO wkhouders (
                pasnummer,
                tussenvoegsel,
                achternaam,
                adres,
                postcode,
                woonplaats,
                telefoon,
                email,
                nieuwsbrief
                           )
                           VALUES (
        '" . mysql_real_escape_string($_POST['pasnummer']) . "',
        '" . mysql_real_escape_string($_POST['tussenvoegsel']) . "',
        '" . mysql_real_escape_string($_POST['achternaam']) . "',
        '" . mysql_real_escape_string($_POST['adres']) . "',
        '" . mysql_real_escape_string($_POST['postcode']) . "',
        '" . mysql_real_escape_string($_POST['woonplaats']) . "',
        '" . mysql_real_escape_string($_POST['telefoon']) . "',
        '" . mysql_real_escape_string($_POST['email']) . "',
        '" . mysql_real_escape_string($_POST['nieuwsbrief']) . "'
                                   )";
$query = mysql_query($SQL);

     if($query)
     {
        echo '</br>';
        echo '</br>';
        echo '</br>';
        echo '</br>';
        echo '<h1>Nieuwe klanten kaart ingevoegd</h1>';
      }
      elseif( mysql_errno() == 1062 )
      {
        echo '</br>';
        echo '</br>';
        echo '</br>';
        echo '</br>';
        echo '<h1>Klantenkaart bestond al.</h1>';
      }
      else
      {
          echo '</br>';
        echo '</br>';
        echo '</br>';
           echo '</br>';
           echo '<h3>Deze klant is helaas niet toegevoegd</h3>';
        echo '<h1>Er zit een fout in de database</h1>';
      }
}
?> 




Alvast bedankt!

#2 08-09-2010 18:15
Ik denk dat een pasnummer nooit langer zal zijn dan 255 tekens. Je kan er dus een varchar van maken ipv een blob / text veld.

MySQL kan namelijk aan een blob, longtext en dat soort velden niet zien hoe groot het veld is. Hierdoor kan hij geen unique controle doen.

#3 08-09-2010 18:16
Zie ook

http://www.mydigital...t-a-key-length/

daar wordt je probleem uitgelegd..

#4 08-09-2010 18:19

Bekijk Post Op 08-09-2010 20:16 schreef Corne Dickens:

Zie ook

http://www.mydigital...t-a-key-length/

daar wordt je probleem uitgelegd..
@ts Eerste resultaat Google btw.

#5 08-09-2010 18:45
het is gelukt;) Ik heb het veranderd Varchar 20. Nu doet ie het.

ook heb ik een PHP script voor het bewerken van klant gegevens. Het nadeel is echter hiervan dat wanneer je klant gegevens bewerkt, de pasnummer moet invullen, wanneer je dat doet en je wijzigt de gegevens en vergeet bijv. de geboortedatum, word deze geleegd en is het resultaat 0.

Hierdoor heb ik het script onderverdeeld in meerde scripts: Adres wijzigen, contact gegevens wijzigen, ontvangen van nieuwsbrief. Totaal heb ik dus 4 scripts om het te wijzigen... Heeft er iemand een suggestie?

#6 08-09-2010 19:24
Je kunt toch gewoon controleren of er iets is ingevuld?

is er niets ingevuld -> bewaar de oude gegevens
wel ingevuld -> oude gegeven vervangen door de nieuwe

OF

Zet alle oude informatie in de invoervelden, als je dan submit zullen alle gegevens doorgestuurd worden, die nieuwe en de oude samen, dan kun je een volledige update doen.

#7 09-09-2010 09:16
Hoe kan je automatisch alle velden inlaten vullen zodat je makkelijk de gegevens kan bewerken? Nu moet ik namelijk iedere keer alle velden invullen ook degene die standaard blijven...

#8 09-09-2010 09:21

Bekijk Post Op 08-09-2010 20:15 schreef Marten van Urk:

Ik denk dat een pasnummer nooit langer zal zijn dan 255 tekens. Je kan er dus een varchar van maken ipv een blob / text veld.

MySQL kan namelijk aan een blob, longtext en dat soort velden niet zien hoe groot het veld is. Hierdoor kan hij geen unique controle doen.
Zelfs al was het langer dan 255 tekens, een VARCHAR is momenteel gelimiteerd tot 64K dus meer lukt ook wel. :-

#9 09-09-2010 10:29
Nieuw Topic geopend bij PHP hulp.

#10 10-09-2010 07:16
  • Taco V
  • Groep: Moderators
  • Posts: 798
  • Actief sinds: 12-08-2008
Wat een zinloze en ondankbare reactie. Daarnaast, waar dan? Of was je misschien maar aan het bluffen omdat je verongelijkt bent omdat je niet binnen een dag het antwoord hebt?

In de wiki is jouw probleem trouwens voorgekauwd.
http://www.pfz.nl/wi...nnieuwssysteem/

EDIT: Sorry, mijn fout. Ik begreep phphulp.nl, vandaar mijn reactie. Ik zie nu dat je echter dit forum, PHP-afdeling bedoelde:
http://www.pfz.nl/fo...mysql-database/
Mijn excuses.


Inloggen wachtwoord vergeten? Aanmelden