Uniek veld controleren
ben bezig om een veldje uniek te maken die een controle uitvoerd op de db of dit nummer inmiddels bestaat. In Mysql had ik het veld uniek willen maken maar het kan voorkomen dat dit veld leeg is. En je raad het al dat het meerdere keren voorkomt dat die leeg is dus dat gaat niet op en zou het via php moeten. Hoe ga ik dan verder vanuit mijn huidige 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
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
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
<?php
if(isset($_GET['id']))
{
$query = "SELECT * FROM ft_form_4 WHERE submission_id = ".$_GET['id'];
$sql = mysql_query ($query) or die (mysql_error());
}
echo "<table class=\"style6\" border=\"1\" width=\"750\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">" ;
while ($row= mysql_fetch_array ($sql)){
$nr = $row['IPC'];
$hd = $row['Header'];
$pf = $row['Part_Family'];
$rt = $row['Request_Type'];
$prio = $row['Prio'];
$desc = $row['Description'];
}
echo "</table>";
//echo "$nr";
?>
</p>
<table width="447" border="0" align="center">
<tr>
<td width="86"><span class="style20">IPC</span></td>
<td width="304"><span class="style11"><?php echo "$nr";?></span></td>
</tr>
<tr>
<td><span class="style20">Part family </span></td>
<td><span class="style11"><?php echo "$pf";?></span></td>
</tr>
<tr>
<td><span class="style20">Request Type </span></td>
<td><span class="style11"><?php echo "$rt";?></span></td>
</tr>
<tr>
<td><span class="style20">Prio</span></td>
<td><span class="style11"><?php echo "$prio";?></span></td>
</tr>
<tr>
<td><span class="style20">Description</span></td>
<td><span class="style11"><?php echo "$desc";?></span></td>
</tr>
</table>
<table width="447" border="0" align="center">
<tr>
<td width="196"><input name="IPC" type="hidden" value="<?php echo "$nr";?>" /></td>
<td colspan="2"><span class="style18"></span></td>
</tr>
<tr>
<td><span class="style20">Header nummer </span></td>
<td colspan="2"><input name="header" type="text" id="header"></td>
</tr>
<tr>
<td><span class="style20">Parent PR aantal </span></td>
<td colspan="2"><input name="parentpr" type="text" id="parentpr" size="5" maxlength="5"></td>
</tr>
<tr>
<td><span class="style20">Child PR aantal </span></td>
<td colspan="2"><input name="childpr" type="text" id="childpr" size="5" maxlength="5"></td>
</tr>
<tr>
<td><span class="style18"><input type="hidden" name="Status" value="open"></span></td>
<td colspan="2"><span class="style18"></span></td>
</tr>
<tr>
<td><span class="style18"><input type="hidden" name="login" value="<?php echo $_SESSION['login']; ?>" /></span></td>
<td width="80"><input name="Reset" type="reset" value="Reset"></td>
<td width="110"><input name="Submit" type="submit" value="Submit"></td>
</tr>
</table></form>
if(isset($_GET['id']))
{
$query = "SELECT * FROM ft_form_4 WHERE submission_id = ".$_GET['id'];
$sql = mysql_query ($query) or die (mysql_error());
}
echo "<table class=\"style6\" border=\"1\" width=\"750\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">" ;
while ($row= mysql_fetch_array ($sql)){
$nr = $row['IPC'];
$hd = $row['Header'];
$pf = $row['Part_Family'];
$rt = $row['Request_Type'];
$prio = $row['Prio'];
$desc = $row['Description'];
}
echo "</table>";
//echo "$nr";
?>
</p>
<table width="447" border="0" align="center">
<tr>
<td width="86"><span class="style20">IPC</span></td>
<td width="304"><span class="style11"><?php echo "$nr";?></span></td>
</tr>
<tr>
<td><span class="style20">Part family </span></td>
<td><span class="style11"><?php echo "$pf";?></span></td>
</tr>
<tr>
<td><span class="style20">Request Type </span></td>
<td><span class="style11"><?php echo "$rt";?></span></td>
</tr>
<tr>
<td><span class="style20">Prio</span></td>
<td><span class="style11"><?php echo "$prio";?></span></td>
</tr>
<tr>
<td><span class="style20">Description</span></td>
<td><span class="style11"><?php echo "$desc";?></span></td>
</tr>
</table>
<table width="447" border="0" align="center">
<tr>
<td width="196"><input name="IPC" type="hidden" value="<?php echo "$nr";?>" /></td>
<td colspan="2"><span class="style18"></span></td>
</tr>
<tr>
<td><span class="style20">Header nummer </span></td>
<td colspan="2"><input name="header" type="text" id="header"></td>
</tr>
<tr>
<td><span class="style20">Parent PR aantal </span></td>
<td colspan="2"><input name="parentpr" type="text" id="parentpr" size="5" maxlength="5"></td>
</tr>
<tr>
<td><span class="style20">Child PR aantal </span></td>
<td colspan="2"><input name="childpr" type="text" id="childpr" size="5" maxlength="5"></td>
</tr>
<tr>
<td><span class="style18"><input type="hidden" name="Status" value="open"></span></td>
<td colspan="2"><span class="style18"></span></td>
</tr>
<tr>
<td><span class="style18"><input type="hidden" name="login" value="<?php echo $_SESSION['login']; ?>" /></span></td>
<td width="80"><input name="Reset" type="reset" value="Reset"></td>
<td width="110"><input name="Submit" type="submit" value="Submit"></td>
</tr>
</table></form>
Het gaat om het veld Header. dit veld mag dus geen dubbele nummers bevatten. Wie kan mij helpen?
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$query = "SELECT id FROM tabel WHERE header = '" . $header . "'";
$result = mysql_query($query);
$aantal = mysql_num_rows($result);
if ($aantal == 1)
{
echo 'Er is al iets met deze header';
}
?>
$query = "SELECT id FROM tabel WHERE header = '" . $header . "'";
$result = mysql_query($query);
$aantal = mysql_num_rows($result);
if ($aantal == 1)
{
echo 'Er is al iets met deze header';
}
?>
Quote:
Dat is tegenstrijdig! Een veld kan onmogelijk uniek of leeg zijn. 'leeg' kan slechts bij 1 record voorkomen en niet bij meerdere records, dan zou het niet meer uniek zijn.ben bezig om een veldje uniek te maken die een controle uitvoerd op de db of dit nummer inmiddels bestaat. In Mysql had ik het veld uniek willen maken maar het kan voorkomen dat dit veld leeg is.
Met een SELECT-query krijg je slechts een beeld van de situatie zoals die op het moment van de query van toepassing was. Dat zegt dus helemaal niets over de huidige situatie. De database kan tenslotte tientallen queries per seconde verwerken!
Mogelijke oplossingen:
- Zoek naar een mogelijkheid om altijd een unieke waarde in de kolom te zetten en geen NULL te gebruiken. Sterker nog, NOT NULL ligt meer voor de hand
- Maak een inschatting van de risico's op het gebruik van de SELECT-query. Wanneer je slechts enkele gebruikers hebt, is de kans dat het fout gaat niet zo heel erg groot. Zoek wel uit wat de gevolgen zijn van corrupte data, dat kan je in de toekomst een hoop werk schelen.
Wie kan dit oplossen??
Niemand?