check op geldige items in database
Heb je nu die tutorial al doorgelezen? Volgens mij namelijk niet, er komt een koppeltabel aan te pas. Ga die tutorial eens doorwerken, en als je dan ergens niet uit komt vraag het dan nog eens op het forum.
Een goed genormaliseerde database is veel gemakkelijker te onderhouden/ uit te breiden dan een slecht opgebouwde database!
Heb die tutorial wel doorgelezen..maar snapt er geen barst van. Eerst had ik 4 verschillend tabellen..en blijkt dat het niet goed is..heb ik maar teruggebracht naar 1..en blijkt nu ook weer niet.
Ik vind het soms een beetje vaag hier..ik kan ook wel antwoord of hulp elders vinden.
Quote:
Misschien slim om hem nog eens te lezen of dáár eens een vraag over te stellen?Heb die tutorial wel doorgelezen..maar snapt er geen barst van.
Jij vindt het een beetje vaag hier? Tja als het krijgen van juiste antwoorden jouw definitie van 'vaag' is, dan zal dat inderdaad zo zijn. Alleen hebben jij en ik dan een hele andere opvatting van dat woord.
Het opzetten van een goed datamodel is niet zomaar het samenvoegen van 4 tabellen tot 1 tabel, daar komt wel iets meer bij kijken. Normaliseren is en blijft het sleutelwoord en hoewel dat op de eerste manier niet eenvoudig zal lijken, is het toch iets dat je jezelf aan zou moeten leren. Als je het principe eenmaal doorhebt is het niet zo lastig meer...
serials
---------
id
serial
user_id
product_id
provided
in_use
version
----------
id
version
@blanche..jij zegt dat in_use ook daadwerkelijk in gebruik is..maar hoe wou jij oplossen dat die nog niet in gebruik is, maar wel aangevraagd is...en dat de persoon besluit om later pas in te voeren. Moet er ook dus weer een aparte tabel voor komen..
serialused
---------
id
user_id
provided
Zodra de persoon de serial invoer, wordt het eerst nagekeken in serialused of datum overeenkomt met provided in serials...zo ja..dan wordt die in_use gemarkeerd als gebruikt...toch?
Verder heb je nu wel een tabel 'version' maar ontbreekt de relatie met de serials tabel nog. Je zult in die tabel dus nog een kolom 'version_id' op moeten nemen waarin je het id van de betreffende versie opslaat...
ps. Misschien is het logischer om van in_use iets van 'activated' te maken. Deze zet je dan op 1 als de verstrekte serial voor het eerst gebruikt wordt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Heb nu er 2 tabel..
jos_serials
------------
id
serial
user_id
product_id
provided
in_use
version_id
jos_serialversion
----------
id
version met daarin 3 ids (nfr, online en box)
Sander schreef op 13.03.2008 11:15:
Dat is dus wederom de verkeerde aanpak....Goed..ik ga maar iets anders doen..ga nu 2 tabellen maken ipv 1.
Je gaat normaliseren. Dan blijkt vanzelf wel of je 25, 38 of slechts 2 tabellen nodig hebt. Dat is namelijk het resultaat en het is dus geen doel.
Je bent dus nog niet klaar...
jos_serials
----------
id
serial
user_id
product_id
uniek
in_use
version_id
jos_serialversion
----------
id
version
jos_serialused
---------
id
user_id
uniek
In beide uniek veld komt een unieke key dmv uniqid. Als men een request doet voor 2e serial, wordt er een unieke key toegevoegd in jos_serials en jos_serialused.
Ook zijn de hele reeksen van beveiliging goed doorgelopen zonder dubbele serials, foutieve product of version.
controleren of user een unieke key heeft..zo niet..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
// controleren of user al uniek key heeft..zo niet..dan gewoon toevoegen.
$query = "SELECT seri.uniek, seri.in_use, seriused.uniek FROM #__serials AS seri, #__serialused AS seriused WHERE seri.user_id='".$uid."' AND seri.in_use=0 AND seriused.uniek=seri.uniek ";
$database->setQuery( $query );
$exists = $database->loadResult();
if ( !$exists ) {
$uniekkey=true;
}
if ($userchecks = $database->loadObjectList() ) {
foreach($userchecks as $usercheck){
$uniek = $usercheck->uniek;
$uniekkey=false;
}
}
$query = "SELECT seri.uniek, seri.in_use, seriused.uniek FROM #__serials AS seri, #__serialused AS seriused WHERE seri.user_id='".$uid."' AND seri.in_use=0 AND seriused.uniek=seri.uniek ";
$database->setQuery( $query );
$exists = $database->loadResult();
if ( !$exists ) {
$uniekkey=true;
}
if ($userchecks = $database->loadObjectList() ) {
foreach($userchecks as $usercheck){
$uniek = $usercheck->uniek;
$uniekkey=false;
}
}
Als unieke key niet aanwezig is..
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
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
if ($uniekkey=true){
// check for serialnumber
$query = "SELECT * FROM #__serials WHERE serial='".$_POST['serial']."' AND product_id='".$_POST['product']."' AND version_id='".$_POST['versionid']."'";
$database->setQuery( $query );
$exists = $database->loadResult();
if ( !$exists ) {
echo $query;
echo "<script> alert('Productname are wrong with these serial.'); window.history.go(-1); </script>\n";
exit();
}
if ($serial_checks = $database->loadObjectList() ) {
foreach($serial_checks as $serial_check){
$serialnumber = $serial_check->serial;
$serialtrue = $serial_check->in_use;
$userid = $serial_check->user_id;
$productid = $serial_check->product_id;
if ($serialtrue==1){
echo "<script> alert('This serial is used.'); window.history.go(-1); </script>\n";
exit();
}
}
$query ="UPDATE #__serials SET in_use='1', user_id='".$uid."' WHERE serial='".$_POST['serial']."' AND product_id='".$_POST['product']."' AND version_id='".$_POST['versionid']."'";
$database->setQuery( $query );
$database->query();
$msg = "Serial are adding to your list.\n";
mosRedirect( 'index.php?option='.$option.'&task=UserDetails&Itemid=21', $msg );
}
}
// check for serialnumber
$query = "SELECT * FROM #__serials WHERE serial='".$_POST['serial']."' AND product_id='".$_POST['product']."' AND version_id='".$_POST['versionid']."'";
$database->setQuery( $query );
$exists = $database->loadResult();
if ( !$exists ) {
echo $query;
echo "<script> alert('Productname are wrong with these serial.'); window.history.go(-1); </script>\n";
exit();
}
if ($serial_checks = $database->loadObjectList() ) {
foreach($serial_checks as $serial_check){
$serialnumber = $serial_check->serial;
$serialtrue = $serial_check->in_use;
$userid = $serial_check->user_id;
$productid = $serial_check->product_id;
if ($serialtrue==1){
echo "<script> alert('This serial is used.'); window.history.go(-1); </script>\n";
exit();
}
}
$query ="UPDATE #__serials SET in_use='1', user_id='".$uid."' WHERE serial='".$_POST['serial']."' AND product_id='".$_POST['product']."' AND version_id='".$_POST['versionid']."'";
$database->setQuery( $query );
$database->query();
$msg = "Serial are adding to your list.\n";
mosRedirect( 'index.php?option='.$option.'&task=UserDetails&Itemid=21', $msg );
}
}
Wel unieke key aanwezig..
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
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
if ($uniekkey=false){
$query = "SELECT * FROM #__serials WHERE uniek='".$uniek."' AND serial='".$_POST['serial']."' AND product_id='".$_POST['product']."' AND version_id='".$_POST['versionid']."'";
$database->setQuery( $query );
$exists = $database->loadResult();
if ( !$exists ) {
echo "<script> alert('This serial is used.'); window.history.go(-1); </script>\n";
exit();
}
if ($serial_checks = $database->loadObjectList() ) {
foreach($serial_checks as $serial_check){
$serialnumber = $serial_check->serial;
$serialtrue = $serial_check->in_use;
$userid = $serial_check->user_id;
$productid = $serial_check->product_id;
if ($serialtrue==1){
echo "<script> alert('This serial is used.'); window.history.go(-1); </script>\n";
exit();
}
}
$query ="UPDATE #__serials SET in_use='1' WHERE uniek='".$uniek."' AND user_id='".$uid."'";
$database->setQuery( $query );
$database->query();
$msg = "Serial are adding to your list.\n";
mosRedirect( 'index.php?option='.$option.'&task=UserDetails&Itemid=21', $msg );
}
}
$query = "SELECT * FROM #__serials WHERE uniek='".$uniek."' AND serial='".$_POST['serial']."' AND product_id='".$_POST['product']."' AND version_id='".$_POST['versionid']."'";
$database->setQuery( $query );
$exists = $database->loadResult();
if ( !$exists ) {
echo "<script> alert('This serial is used.'); window.history.go(-1); </script>\n";
exit();
}
if ($serial_checks = $database->loadObjectList() ) {
foreach($serial_checks as $serial_check){
$serialnumber = $serial_check->serial;
$serialtrue = $serial_check->in_use;
$userid = $serial_check->user_id;
$productid = $serial_check->product_id;
if ($serialtrue==1){
echo "<script> alert('This serial is used.'); window.history.go(-1); </script>\n";
exit();
}
}
$query ="UPDATE #__serials SET in_use='1' WHERE uniek='".$uniek."' AND user_id='".$uid."'";
$database->setQuery( $query );
$database->query();
$msg = "Serial are adding to your list.\n";
mosRedirect( 'index.php?option='.$option.'&task=UserDetails&Itemid=21', $msg );
}
}
Als men een request doet voor 2e serial ziet de code zo uit..
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
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
$uniek=uniqid('uid');
// emailadres en naam ophalen uit users tabel
$query = "SELECT email, name FROM #__users WHERE id='$uid'";
$database->setQuery( $query );
if ($user_rows = $database->loadObjectList() ) {
foreach($user_rows as $user_row){
$email = $user_row->email;
$name = $user_row->name;
}
}
// random serialnummer ophalen en markeren als gebruikt.
$query = "SELECT * FROM #__serials WHERE in_use=0 AND uniek=0 AND product_id='".$prodid."' AND version_id='".$versionid."' ORDER BY RAND() LIMIT 0,1";
$database->setQuery( $query );
if ($random_serials = $database->loadObjectList() ) {
foreach($random_serials as $random_serial){
$serialnumber = $random_serial->serial;
}
}
$query = "UPDATE #__serials SET user_id='".$uid."', uniek='".$uniek."' WHERE serial='".$serialnumber."' AND product_id=".$prodid." AND version_id='".$versionid."'";
$database->setQuery( $query );
$database->query();
$query = "INSERT INTO #__serialused SET uniek='".$uniek."', user_id='".$uid."'";
$database->setQuery( $query );
$database->query();
// gegevens verzamelen voor verzending.
$subject ="2nd activation key";
$header ="Bcc: \r\n";
$header .= "From: \r\n";
$header .= "Return-Path: \r\n";
$header .= "Reply-To: \r\n";
$body ="Hi $name,\n\n Here's a 2nd activation key.\n\nCopy the following Code to the clipboard\n $serialnumber\n\nAdd these serial to your list with same version you have choosen.";
// mail($name ."<".$email.">", $subject, $body, $header);
$msg="2nd request activation are sending to your email. \n";
mosRedirect( 'index.php?option='.$option.'&task=UserDetails&Itemid=21', $msg );
// emailadres en naam ophalen uit users tabel
$query = "SELECT email, name FROM #__users WHERE id='$uid'";
$database->setQuery( $query );
if ($user_rows = $database->loadObjectList() ) {
foreach($user_rows as $user_row){
$email = $user_row->email;
$name = $user_row->name;
}
}
// random serialnummer ophalen en markeren als gebruikt.
$query = "SELECT * FROM #__serials WHERE in_use=0 AND uniek=0 AND product_id='".$prodid."' AND version_id='".$versionid."' ORDER BY RAND() LIMIT 0,1";
$database->setQuery( $query );
if ($random_serials = $database->loadObjectList() ) {
foreach($random_serials as $random_serial){
$serialnumber = $random_serial->serial;
}
}
$query = "UPDATE #__serials SET user_id='".$uid."', uniek='".$uniek."' WHERE serial='".$serialnumber."' AND product_id=".$prodid." AND version_id='".$versionid."'";
$database->setQuery( $query );
$database->query();
$query = "INSERT INTO #__serialused SET uniek='".$uniek."', user_id='".$uid."'";
$database->setQuery( $query );
$database->query();
// gegevens verzamelen voor verzending.
$subject ="2nd activation key";
$header ="Bcc: \r\n";
$header .= "From: \r\n";
$header .= "Return-Path: \r\n";
$header .= "Reply-To: \r\n";
$body ="Hi $name,\n\n Here's a 2nd activation key.\n\nCopy the following Code to the clipboard\n $serialnumber\n\nAdd these serial to your list with same version you have choosen.";
// mail($name ."<".$email.">", $subject, $body, $header);
$msg="2nd request activation are sending to your email. \n";
mosRedirect( 'index.php?option='.$option.'&task=UserDetails&Itemid=21', $msg );
De output van de serials zijn..
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
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
$query = "SELECT prod.name, prod.id, seri.*, versi.version FROM #__menu AS prod, #__serials AS seri, #__serialversion AS versi WHERE seri.user_id = '" . $uid . "' AND seri.product_id=prod.id AND seri.version_id=versi.id AND seri.in_use=1 ORDER BY seri.product_id";
$database->setQuery( $query );
if ($serial_rows = $database->loadObjectList() ) {
foreach($serial_rows as $serial_row){
$productname = $serial_row->name;
$serialnumber = $serial_row->serial;
$versionname = $serial_row->version;
$versionid = $serial_row->version_id;
$productid = $serial_row->product_id;
$userid = $serial_row->user_id;
$used = $serial_row->in_use;
$uniekkey = $serial_row->uniek;
$serial_content .="<tr>
<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">$productname</div></td>
<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">".ucfirst($versionname)."</div></td>
<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">$serialnumber</div></td>";
if ($uniekkey=="" && $used==1){
$query = "SELECT * FROM #__serials AS seri, #__serialused AS versi WHERE seri.user_id='".$userid."' AND seri.in_use=1 AND seri.uniek=versi.uniek";
$database->setQuery( $query );
if ($serial2_rows = $database->loadObjectList() ) {
foreach($serial2_rows as $serial2_row){
$serialnumber2 = $serial2_row->serial;
if ($serialnumber2==""){
$serial_content .="<td>Check your mail for 2nd serialnumber</td>";
}else{
$serial_content .="<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">$serialnumber2</div></td>";
}
}
}
}else{
$serial_content .="
<td><form method=\"post\" action=\"index.php\" name=\"mosUserForm\"><input type=\"submit\" name=\"request\" class=\"requestbutton\" value=\"\" alt=\"Request\"><input type=\"hidden\" name=\"prodid\" value=\"$productid\"><input type=\"hidden\" name=\"version\" value=\"$versionid\"><input type=\"hidden\" name=\"userid\" value=\"$userid\"><input type=\"hidden\" name=\"option\" value=\"$option\"><input type=\"hidden\" name=\"task\" value=\"request2nd\"></form></td>";
}
$serial_content .="</tr>";
}
}
echo $serial_content;
$database->setQuery( $query );
if ($serial_rows = $database->loadObjectList() ) {
foreach($serial_rows as $serial_row){
$productname = $serial_row->name;
$serialnumber = $serial_row->serial;
$versionname = $serial_row->version;
$versionid = $serial_row->version_id;
$productid = $serial_row->product_id;
$userid = $serial_row->user_id;
$used = $serial_row->in_use;
$uniekkey = $serial_row->uniek;
$serial_content .="<tr>
<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">$productname</div></td>
<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">".ucfirst($versionname)."</div></td>
<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">$serialnumber</div></td>";
if ($uniekkey=="" && $used==1){
$query = "SELECT * FROM #__serials AS seri, #__serialused AS versi WHERE seri.user_id='".$userid."' AND seri.in_use=1 AND seri.uniek=versi.uniek";
$database->setQuery( $query );
if ($serial2_rows = $database->loadObjectList() ) {
foreach($serial2_rows as $serial2_row){
$serialnumber2 = $serial2_row->serial;
if ($serialnumber2==""){
$serial_content .="<td>Check your mail for 2nd serialnumber</td>";
}else{
$serial_content .="<td><div style=\"font-family: Verdana; font-color: #8a8a8a; font-size:10px;\">$serialnumber2</div></td>";
}
}
}
}else{
$serial_content .="
<td><form method=\"post\" action=\"index.php\" name=\"mosUserForm\"><input type=\"submit\" name=\"request\" class=\"requestbutton\" value=\"\" alt=\"Request\"><input type=\"hidden\" name=\"prodid\" value=\"$productid\"><input type=\"hidden\" name=\"version\" value=\"$versionid\"><input type=\"hidden\" name=\"userid\" value=\"$userid\"><input type=\"hidden\" name=\"option\" value=\"$option\"><input type=\"hidden\" name=\"task\" value=\"request2nd\"></form></td>";
}
$serial_content .="</tr>";
}
}
echo $serial_content;
De hele code werkt wel goed..de gegevens zijn goed en normaal uit database gehaald. Alleen krijg ik toch nog steeds die 2e serial te zien boven de 1e serial.
Product
Version
Serial
2nd Serial
----------
Predator
Online
74548199504253499605
request button
Predator
Online
22723027373457755228
74548199504253499605
Heb er al van alles gedaan om op te lossen..en heb ook gedaan wat jullie om vraagt..een database normaliseren..of is dit nog niet voldoende?
En nogmaals, steek je tijd in het normaliseren en niet in het programmeren. Normaliseren is de basis, zonder goede basis kun jij nooit een fatsoenlijk systeem krijgen. En is dus alle tijd in het programmeerwerk voor niets geweest...
pgFrank..jij zegt altijd normaliseren..waarmee moet ik nou normaliseren..heb er van alles al gedaan..voor mij is de basis al goed..ben niet zo erg expert als jij.
Als ik vel uniek UNIQUE toevoeg, krijg ik melding:
ALTER TABLE `jos_serials` ADD UNIQUE (
`uniek`
)
MySQL retourneerde: Documentatie
#1062 - Duplicate entry '' for key 2
Gewijzigd op 01/01/1970 01:00:00 door Sander C
Sander schreef op 13.03.2008 14:05:
Als ik vel uniek UNIQUE toevoeg, krijg ik melding:
ALTER TABLE `jos_serials` ADD UNIQUE (
`uniek`
)
MySQL retourneerde: Documentatie
#1062 - Duplicate entry '' for key 2
ALTER TABLE `jos_serials` ADD UNIQUE (
`uniek`
)
MySQL retourneerde: Documentatie
#1062 - Duplicate entry '' for key 2
Gefeliciteerd! Dat is precies wat je hebben wilt! Nu weet je 100% zeker dat een waarde reeds bestaat, alle andere zogenaamde oplossingen zijn namelijk onbetrouwbaar. Een SELECT-query gaat namelijk altijd over het verleden en nooit over de huidige situatie. Huidig als in nu nu nu nu nu nu nu nu nu nu nu nu nu nu nu nu nu nu nu nu etc.
Quote:
constraint betekent beperking, dat is een eigenschap dit je in de tabel aanmaakt op een kolom. Dit speelt zich dus af in de database en niet in onbetrouwbare PHP-code.Als je leest waar die uniek voor is..er komt een uniqid in..en UNIQUE-constraint..wat is dat nou? is dat in mysql zelf?
Quote:
Normaliseren doe je met de data die je wilt gaan gebruiken, bv. de gegevens voornaam, achternaam, woonplaats, email, telefoonnummer, etc. Al deze gegevens ga je op papier zetten, je gaat de onderlinge relaties bepalen, bepalen hoevaak iets voor kan komen en zo ga je de boel keurig indelen. Hier komt geen database aan te pas, integendeel! Zodra jij gaat denken in tabellen of kolommen, ga je de mist in. Je gaat eerst normaliseren en wanneer dat klaar is ga je pas denken aan tabellen en kolommen. Dan ga je pas de database opstellen. Vandaar dat je nooit kunt zeggen 'ik ga 3 tabellen gebruiken', dat weet je vooraf namelijk niet.pgFrank..jij zegt altijd normaliseren..waarmee moet ik nou normaliseren..heb er van alles al gedaan..voor mij is de basis al goed..ben niet zo erg expert als jij.
Dat je geen expert bent, geeft niks, maar geeft wel aan dat je dit onderwerp serieus moet nemen. Pak dus pen en papier en ga de boel netjes op papier uitschrijven en uitwerken. Wanneer dat klaar is, maak je de database aan.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
http://www.phphulp.nl/php/tutorials/3/150/259/
In de tabel serials staan maar slechts 7 velden..
id
serial
user_id
product_id
uniek
in_use
version_id
serial is dus zelfstandig, bevat alleen maar duizenden verschillend serialnummers.
user_id is gekoppeld aan de id, name uit jos_users
product_id is gekoppeld aan de id en name uit jos_menu
uniek is zelfstandig, maar ook gekoppeld aan uniek en user_id uit jos_serialused voor 2e request.
in_use is zelfstandig
version_id is gekoppeld aan id en version uit jos_serialversion
en wat betreft UNIQUE in mysql..ik krijg alleen maar foutmelding..er is dus nog geen enkel unique key.
Fout
SQL-query:
ALTER TABLE `jos_serials` ADD UNIQUE (
`uniek`
)
MySQL retourneerde: Documentatie
#1062 - Duplicate entry '' for key 2
Gewijzigd op 01/01/1970 01:00:00 door Sander C
Een serial kan uniek zijn, die maak je dus UNIQUE. Wanneer het aanmaken van de constraint mislukt, staat er blijkbaar dubbele data in je tabel. En een NULL (leeg) is ook dubbele data, dat kan dus evenmin.
bv: predator_box: 14296293433240896405
blue_nfr: 14296293433240896405
Ik wil geen risico nemen om serial een unieke veld van te maken. Wat de kolom uniek betreft..die is leeg.., de veld in_use is op standaardwaarde 0 gezet. en user_id is ook op 0..er heeft nog geen enkel user aangemeldt..
In kolom uniek komt een uniqid in staan..$uniek=uniqid('uid');. Omdat de serial niet zeker een unique is, heb ik daarom gewoon kolom uniek toegevoegd met randon unieke key die aan ieder persoon toewijst.
Quote:
In kolom uniek komt een uniqid in staan..$uniek=uniqid('uid');. Omdat de serial niet zeker een unique is, heb ik daarom gewoon kolom uniek toegevoegd met randon unieke key die aan ieder persoon toewijst.
Daar is een boel over te zeggen, maar om te beginnen. Op welk(e) veld(en) ligt je primary key? (die veld(en) zijn dan toch al uniek!)
Gewijzigd op 01/01/1970 01:00:00 door Bo az
primary key is een id in serials.
Sander schreef op 13.03.2008 14:47:
primary key is een id in serials.
Dan heb je toch al een veld met een unieke waarde, waarom wil je dan nog een veld met een unieke waarde toevoegen?
Daarbij komt dat deze fout melding:
Quote:
#1062 - Duplicate entry '' for key 2
Al aangeeft dat de waarde niet eens uniek is.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
Sander schreef op 13.03.2008 14:35:
Ik weet niet of serial ook uniek is..er zijn misschien ook wel van ander versie of ander product dezelfde serial als nu.
en
Quote:
Dus als de serialnummer niet aanwezig is in database, mag die opgeslagen worden in ander tabel. Mocht er dezelfde serial is toegevoegd door de ander gebruiker, krijgt die gebruiker melding dat die serial al is gebruikt.
Dat is wat tegenstrijdig, of niet dan? Ga hier eerst maar eens over nadenken, hoe wil jij gaan bepalen of je een melding moet geven of het record wilt toevoegen. Jij weet blijkbaar niet hoe je een item kunt herkennen, daar valt dan ook niet op te controleren.
Die 2e quote is eigenlijk niet goed...de serialnummers krijgt de klant van de verkoper en die verkoper heeft een lijstje met alle serialnummers en die wordt alles in database opgeslagen dmv importfunctie. De lijstje is in *.txt file.
Er zijn dus meerdere lijstjes..blue_nfr.txt, predator_box.txt etc. In ieder lijstje zitten dus alle serialnummers. Ik weet zelf niet of de serialnummer in ieder txt file dezelfde zijn of niet.
De klant krijgt dus een serialnummer bij het aanschaf van product en moet daarna de serialnummer invoeren in de systeem..en wordt dus gecontroleerd of serial overeenkomt met de gegevens in database. Is de serial dezelfde..wordt het gemarkeerd als gebruikt..dus is_used=1.
Mocht de klant daarna een 2e serial wilt aanvragen, voor bv op 2e computer ..moet hij een request doen..daarna krijgt die een mailtje met 2e serialnummer die uit database komt. Daarna kan die klant die 2e serialnummer invoeren in systeem..wordt het weer hele process doorgelopen voordat die ook gemarkeerd is als gebruikt..
Verder heb ik een uniek kolom verwijderd uit jos_serials. De ID is unique zelf en in jos_serialused heb ik uniek gewijzigd in serialid.