Kijk of product bestaat zo niet, voeg product toe

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • NO12BEAT
  • Registratie: December 2016
  • Laatst online: 01-06-2022
Hoi,

voor een project op school maak ik een database op een raspberry pi 3, waar met een barcode scanner producten aan toegevoegd en uitgehaald kunnen worden. Dit om bij te kunnen houden wat voor producten je allemaal in huis hebt als je in de supermarkt staat en vergeten bent om te kijken :)

Op dit moment werkt alles behalve dat ik geen producten meer kan toevoegen, alleen kan updaten.
Weet iemand hoe ik dit werkend kan krijgen?

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
 $link = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
 
 if (isset($_POST['submit'])) {
  
  $barcode = $_POST['barcode'];
  $quantity = $_POST['quantity'];
  $name = $_POST['name'];
  
  $query = "SELECT * FROM barcode WHERE barcode_no=$barcode";
  $exe = mysqli_query($link, $query);
  if (mysqli_num_rows($exe) > 0) {
   
   $result = mysqli_fetch_array($exe);
   $q = $result[3] + $quantity;
   $query = "UPDATE barcode SET quantity=$q WHERE barcode_no=$barcode";
   mysqli_query($link, $query);
   
  } else {

  $query2 = "INSERT INTO barcode (barcode_no, date, quantity, name) VALUES ($barcode, now(), $quantity, $name)";
   mysqli_query($link, $query2);
   
  } 
  
 }

[ Voor 0% gewijzigd door RobIII op 06-06-2018 13:03 . Reden: Code tags toegevoegd ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Begin anders eens met zeggen wat er fout gaat? Of moeten we dat raden?

Zoek in de tussentijd even op wat SQL-injectie is en waarom deze code dus enorm onveilig is en verkeerd is om zo aan te leren. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • +3 Henk 'm!

  • -SaveMe-
  • Registratie: Januari 2002
  • Laatst online: 06-10 09:41

-SaveMe-

-klik-

Elke keer als ik dit soort topics lees kan ik me niet voorstellen dat ze het zo leren op de opleiding ?

GamiQ, de game notes app met game maps!


Acties:
  • 0 Henk 'm!

  • NO12BEAT
  • Registratie: December 2016
  • Laatst online: 01-06-2022
NMe schreef op woensdag 6 juni 2018 @ 11:17:
Begin anders eens met zeggen wat er fout gaat? Of moeten we dat raden?
vergeten :) het gaat fout bij het uitvoeren van de else. Maar als ik de code omdraai en de insert into bij if zet werkt het invoeren in de database

Acties:
  • 0 Henk 'm!

  • NO12BEAT
  • Registratie: December 2016
  • Laatst online: 01-06-2022
-SaveMe- schreef op woensdag 6 juni 2018 @ 11:19:
Elke keer als ik dit soort topics lees kan ik me niet voorstellen dat ze het zo leren op de opleiding ?
Ik weet het, het probleem is alleen dat dit morgen af moet en het staat alleen in localhost dus dat moet maar even. Bovendien heeft onze docent geen idee wat hij aan het doen is dus heb ik er ook geen uitleg over gehad.

Acties:
  • 0 Henk 'm!

  • Bob
  • Registratie: Mei 2005
  • Laatst online: 05-10 22:29

Bob

Google eens op UPSERT

Acties:
  • +2 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

NO12BEAT schreef op woensdag 6 juni 2018 @ 11:21:
[...]


vergeten :) het gaat fout bij het uitvoeren van de else. Maar als ik de code omdraai en de insert into bij if zet werkt het invoeren in de database
WAT gaat fout bij het uitvoeren van de else? Doet hij het gewoon niet? Krijg je een foutmelding? Vat je webserver vlam? Wat je nu doet is vergelijkbaar met de dokter bellen en zeggen "ik heb pijn" met de volledige verwachting dat hij zonder verder tests te kunnen doen zegt dat je arm gebroken is.

Overigens kan ik je wel zeggen wat je probleem is en stiekem is dat ook gewoon opgelost als je mijn laatste zin in mijn vorige post ter harte neemt. Iets met aanhalingstekens.

[ Voor 13% gewijzigd door NMe op 06-06-2018 11:45 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
NO12BEAT schreef op woensdag 6 juni 2018 @ 11:22:
Bovendien heeft onze docent geen idee wat hij aan het doen is dus heb ik er ook geen uitleg over gehad.
Dan lijkt het mij verstandig om even met de directeur te praten.
Als de leraar nog niet eens mysqli_real_escape_string kan uitleggen, dan kan je ook nooit de opdracht afmaken met een voldoende.

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • -SaveMe-
  • Registratie: Januari 2002
  • Laatst online: 06-10 09:41

-SaveMe-

-klik-

DJMaze schreef op woensdag 6 juni 2018 @ 12:27:
[...]

Dan lijkt het mij verstandig om even met de directeur te praten.
Als de leraar nog niet eens mysqli_real_escape_string kan uitleggen, dan kan je ook nooit de opdracht afmaken met een voldoende.
Of basic debugging zoals bijv. een print statement ... :F

GamiQ, de game notes app met game maps!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

DJMaze schreef op woensdag 6 juni 2018 @ 12:27:
[...]

Dan lijkt het mij verstandig om even met de directeur te praten.
Als de leraar nog niet eens mysqli_real_escape_string kan uitleggen, dan kan je ook nooit de opdracht afmaken met een voldoende.
Da's al beter dan wat hij nu doet maar nog steeds niet de oplossing. Ook daarmee zou hij in dit geval exact hetzelfde probleem hebben. Link wat dat betreft liever naar mysqli_prepare. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Voor dit zulk vragen kan je beter bij StackOverflow terecht.
Op Tweakers word vaak raar gereageerd betreft vragen over programmeren.

Acties:
  • +2 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Om dit issue aan te pakken zou ik eerste het "EXISTS", bestaat het item in de database gaan testen. Welke permutaties heb je en wat verwacht je en wat komt er uit. Zodoende weet je dat je IF-statement werkt, zoals je verwacht dat het werkt.

Dit kun je dan ook doen met debug statements

PHP:
1
2
3
4
5
$query = "SELECT * FROM barcode WHERE barcode_no=$barcode";
$exe = mysqli_query($link, $query);
$rows = mysqli_num_rows($exe);

echo "Aantal rijen: " . $rows;


Nu ga je dit stukje code aanvallen met verschillende barcodes. Één die sowieso bestaat in de database, en één die niet bestaat. Dan bekijk je het resultaat en komt dat overeen met wat je verwacht?

Dan ga je verder:
PHP:
1
2
3
4
5
6
var_dump($rows > 0); // de vergelijking dump je, zodat je weet wat er precies het if-statement in gaat.
if ($rows > 0)) {
  echo "Updaten!!";
} else {
  echo "Toevoegen!!";
}


Toont dit wat je verwacht? En zo ga je steeds een stukje verder. Totdat het geheel werkt en als er een stukje niet werkt, dan ga je PRINT / PRINT_R / VAR_DUMP commando's toevoegen om waardes in variabelen te tonen op het scherm. Je kan ook een IDE downloaden waarmee je tegen de server kan debuggen, maar bij PHP vind ik dit nogal eenvoudig.

Debuggen is wel echt een cruciaal onderdeel van het begrijpen van je code.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
4Real schreef op woensdag 6 juni 2018 @ 12:55:
Om dit issue aan te pakken zou ik eerste het "EXISTS", bestaat het item in de database gaan testen.
offtopic:
Waarbij je wel een race condition bouwt; tussen de exists + insert/update zit tijd (hoe weinig ook) waarin een andere gebruiker je voor kan zijn en een insert/update doet. Dit soort zaken wil je atomisch oplossen waar mogelijk ;)


@NO12BEAT Wil je voortaan code tags gebruiken als je code post a.u.b? En neem dan ook meteen even onze Quickstart door zodat je weet wat we bij een volgend topic van een topicstart verwachten ;)

[ Voor 27% gewijzigd door RobIII op 06-06-2018 13:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
NMe schreef op woensdag 6 juni 2018 @ 12:37:
Da's al beter dan wat hij nu doet maar nog steeds niet de oplossing. Ook daarmee zou hij in dit geval exact hetzelfde probleem hebben. Link wat dat betreft liever naar mysqli_prepare. ;)
Ja, ja, en doe ook
PHP:
1
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Stopt gewoon je code met een Exception :)

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 6 juni 2018 @ 12:41:
Voor dit zulk vragen kan je beter bij StackOverflow terecht.
Op Tweakers word vaak raar gereageerd betreft vragen over programmeren.
Hij heeft het antwoord waar hij naar vraagt én het antwoord dat hij nodig heeft. Verdere klachten over hoe wij ons forum runnen mogen in Lieve Adjes of in Feedback op moderatie binnen de Devschuur, niet hier.

[ Voor 7% gewijzigd door NMe op 06-06-2018 13:17 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op woensdag 6 juni 2018 @ 13:16:
[...]

Hij heeft het antwoord waar hij naar vraagt én het antwoord dat hij nodig heeft. Verdere klachten over hoe wij ons forum runnen mogen in Lieve Adjes, niet hier.
Het was alleen een suggestie die relevant was voor TS . ;w

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Verwijderd ik vind je antwoord eigenlijk niet relevant. Op StackOverflow krijg je meestal een antwoord als "gebruik jquery" :p

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zullen we gewoon ontopic blijven @DJMaze en @Verwijderd ?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Is de barcode een getal of een string? En de name? Je hebt namelijk geen quotes in de volgende queries:
code:
1
2
$query = "SELECT * FROM barcode WHERE barcode_no=$barcode";
$query2 = "INSERT INTO barcode (barcode_no, date, quantity, name) VALUES ($barcode, now(), $quantity, $name)";

Ik zou het eens met quotes proberen (hieronder voor de naam gedaan):
code:
1
$query2 = "INSERT INTO barcode (barcode_no, date, quantity, name) VALUES ($barcode, now(), $quantity, '$name')";

Dit neemt niet weg dat het fraaier zou zijn om prepared statements te maken, zoals hierboven al gesuggereerd wordt.

[ Voor 35% gewijzigd door KabouterSuper op 06-06-2018 13:38 ]

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 06-10 22:21
Dit zou mooier zijn om dit in een SQL statement te plaatsen.

code:
1
2
INSERT INTO barcode (barcode_no, date, quantity, name) VALUES($barcode, NOW(), $quantity, '$name') 
ON DUPLICATE KEY UPDATE quantity = quantity + 1


Hier staat eigenlijk dat wanneer de barcode al bestaat, de quantity verhoogd moet worden met 1:
https://dev.mysql.com/doc.../insert-on-duplicate.html

Om dit werkend te krijgen zal de barcode kolom een unieke kolom moeten zijn:
https://www.sitepoint.com...-indexes-mysql-databases/

Let op: dit is zonder variable escaping. Dat zal je zelf moeten uitzoeken.

Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
RobIII schreef op woensdag 6 juni 2018 @ 13:02:
[...]

offtopic:
Waarbij je wel een race condition bouwt; tussen de exists + insert/update zit tijd (hoe weinig ook) waarin een andere gebruiker je voor kan zijn en een insert/update doet. Dit soort zaken wil je atomisch oplossen waar mogelijk ;)


@NO12BEAT Wil je voortaan code tags gebruiken als je code post a.u.b? En neem dan ook meteen even onze Quickstart door zodat je weet wat we bij een volgend topic van een topicstart verwachten ;)
Ondanks offtopic, wel een interessant punt. Hoe vlieg je zoiets aan?

edit:
Try catch om de INSERT en als hij alsnog een Exception gooit dan vanuit gaan dat hij er al is? Mits unique aanstaat. In de catch kun je dan weer een SELECT doen. Of is dit te kort door de bocht?

[ Voor 12% gewijzigd door 4Real op 06-06-2018 15:42 ]


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
4Real schreef op woensdag 6 juni 2018 @ 15:35:
Ondanks offtopic, wel een interessant punt. Hoe vlieg je zoiets aan?
Heel globaal zoiets:
Wat jij beschrijft is: Je kijkt of iets bestaat, dan doe je een insert. Tussen die twee acties kan iemand anders al een een insert gedaan hebben van hetgeen jij op 't punt staat te inserten. Je hebt dus kans op een exception (duplicate key ofzo bijvoorbeeld) en die exception zul je moeten handelen (dat doet alleen geen hond, want "dat kan toch niet gebeuren want er staat een exists-check voor"). Je 'check if exists' is dus compleet useless, je moet toch nog een (potentiële) exception handelen.

I.p.v. kijken of iets al bestaat voordat je 't insert doe je gewoon de insert; geeft dat een exception omdat iemand je voor was (duplicate key dus bijvoorbeeld) dan moet je de exception handelen die je in het andere voorbeeld toch moest handelen.

Het verschil is dat in 't eerste voorbeeld (met de 'exists') vaak de exception handling achterwege wordt gelaten (althans; voor 't specifieke geval dat een record al zou bestaan) omdat men in de waan is dat de exists die exceptions zou voorkomen...

FoutBeetje beterGoed
if !exists(...)if !exists(...)
    try {try {
    insert...        insert...    insert...
    } catch {} catch {
        handle exception    handle exception
    }
}}}


Bovenstaand gaat vrij specifiek over een insert, maar het topic gaat over een insert-of-update-waar-van-toepassing. Daar geldt hetzelfde principe uiteraard voor maar maakt bovenstaand stukje(s) code een stuk complexer; er moet een "else update" deel bij komen in elk van de 3 gevallen en de daar bij behorende exception handling etc. Daar zijn ook weer oplossingen voor; het woord is al gevallen maar de meeste RDBMS'en bieden hiervoor een "Upsert". Daarmee maak je een insert/update (in principe) ook atomisch (lees wel de documentatie voor je RDMBS; de meesten hebben wel wat haken-en-ogen of gotcha's of pitfalls). En daarmee kun je in bovenstaande voorbeeldjes dan makkelijk de "insert..." vervangen door de (pseudocode) "upsert..." en heb je meteen dus de insert én update voor mekaar.

[ Voor 66% gewijzigd door RobIII op 06-06-2018 16:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

RobIII schreef op woensdag 6 juni 2018 @ 15:46:
[...]

En daarmee kun je in bovenstaande voorbeeldjes dan makkelijk de "insert..." vervangen door de (pseudocode) "upsert..." en heb je meteen dus de insert én update voor mekaar.
Da's in MySQL/MariaDB sowieso wel makkelijk, de syntax is namelijk vrijwel identiek.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op woensdag 6 juni 2018 @ 17:46:
[...]

Da's in MySQL/MariaDB sowieso wel makkelijk, de syntax is namelijk vrijwel identiek.
Klopt, maar in een béétje RDBMS is het een merge ;) Ik wou de term niet specifiek benoemen (merge danwel 'insert...on duplicate key' danwel.... whatever andere RDBMS'en doen) maar juist de paraplu-term 'upsert' gebruiken want daar is genoeg over te vinden op de googles ;)

[ Voor 4% gewijzigd door RobIII op 06-06-2018 17:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Crazy-
  • Registratie: Januari 2002
  • Laatst online: 06-10 23:48

Crazy-

Best life ever

waarom leert men dit zo en geen Pdo? :-( zo jammer

12,85kWp - ZB 7,5m2/400l - 5kW Pana H WP (CV&SWW) - 13,8kWh accu


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Crazy- schreef op woensdag 6 juni 2018 @ 19:38:
waarom leert men dit zo en geen Pdo? :-( zo jammer
Zo jammer dat men steeds PDO noemt. Het is niet de heilige graal en is net zo slecht/goed als mysqli.
Als je het goed wil doen gebruik dan sowieso geen PHP, zet gewoon de pc uit en ga van de zon genieten ;)

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Crazy- schreef op woensdag 6 juni 2018 @ 19:38:
waarom leert men dit zo en geen Pdo? :-( zo jammer
Omdat je prepared statements moet leren, niet specifiek PDO.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • +1 Henk 'm!

  • EnnaN
  • Registratie: September 2002
  • Laatst online: 06-10 14:34

EnnaN

Toys in the attic

Wat hierboven misschien een beetje wegvalt in al het geleuter: @KabouterSuper vraagt zich terecht af wat "barcode" voor type is. Je behandelt het als een integer (geen ' er om heen), maar als dat een EAN is weet ik niet of je die zo kan opslaan. Is dat in je DB een string, dan kan je dat niet op deze manier vergelijken afaik, tenminste niet zonder haken en ogen.

sig


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

EnnaN schreef op woensdag 6 juni 2018 @ 20:31:
Wat hierboven misschien een beetje wegvalt in al het geleuter: @KabouterSuper vraagt zich terecht af wat "barcode" voor type is. Je behandelt het als een integer (geen ' er om heen), maar als dat een EAN is weet ik niet of je die zo kan opslaan. Is dat in je DB een string, dan kan je dat niet op deze manier vergelijken afaik, tenminste niet zonder haken en ogen.
Barcode is tenminste nog ambigu, maar name is dat niet... ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
EnnaN schreef op woensdag 6 juni 2018 @ 20:31:
als dat een EAN is weet ik niet of je die zo kan opslaan
GS1 / EAN-13 / GTIN-13 is zoals de naam al zegt 13 cijfers. Dat past dus niet in een INT ;)

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Crazy-
  • Registratie: Januari 2002
  • Laatst online: 06-10 23:48

Crazy-

Best life ever

Barcodes sla ik altijd als char(13) op
Dit ook ivm voorloop nullen

12,85kWp - ZB 7,5m2/400l - 5kW Pana H WP (CV&SWW) - 13,8kWh accu


Acties:
  • 0 Henk 'm!

  • Crazy-
  • Registratie: Januari 2002
  • Laatst online: 06-10 23:48

Crazy-

Best life ever

DJMaze schreef op woensdag 6 juni 2018 @ 20:23:
[...]

Zo jammer dat men steeds PDO noemt. Het is niet de heilige graal en is net zo slecht/goed als mysqli.
Als je het goed wil doen gebruik dan sowieso geen PHP, zet gewoon de pc uit en ga van de zon genieten ;)
Je opmerking “geen php” vind ik werkelijk een non-argument....

En waarom PDO? Het gaat mij om het principe dat men op een opleiding dit leert. Oké, je leert de basis en daar moet ook beginnen. Maar als men dan hier al niet uit komt wordt er al werkelijk slechte voorbeelden gegeven of überhaupt iets van uitleg !?

Maar ik heb wel heerlijk van de zon genoten ;-)

12,85kWp - ZB 7,5m2/400l - 5kW Pana H WP (CV&SWW) - 13,8kWh accu


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 14:34
Als je weet dat iets 13 numerieke karakters posities moet hebben dan sla je het toch gewoon als numerieke waarde op? Zodra je het moet weergeven op het scherm vul je het aan met max. 12 voorloopnullen. Dat selecteert en koppelt ook een stuk sneller dan dit geforceerd in een char(13) stoppen.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Crazy- schreef op woensdag 6 juni 2018 @ 23:10:
Barcodes sla ik altijd als char(13) op
CurlyMo schreef op woensdag 6 juni 2018 @ 23:22:
Als je weet dat iets 13 numerieke karakters posities moet hebben dan sla je het toch gewoon als numerieke waarde op?
"Assumption is mother of all..." ja, er zijn ook EAN-8 en EAN-18 codes. Hoe slaan jullie die dan op in een NUMERIC(13,0) of CHAR(13) ;)

Persoonlijk zou ik dan eerder voor een BIGINT kiezen omdat die 19 cijfers is.
Natuurlijk gaat dit weer de mist in bij 19 cijfers (9223372036854775807)
Aangezien we hier over MySQL praten, die heeft de niet-standaard ZEROFILL.


Zoals je ziet doet elke programmeur het dus op zijn eigen manier. Hoe moet een leraar je dit aanleren? Welke methode? En zal iemand later op zijn werk zeggen dat het "fout" is?
Vandaar ook dat ik zei dat PDO helemaal niet belangrijk is. Het gaat om de basis en hoe je dat doet is in eerste instantie niet van belang.
Je komt er later wel achter welke methode het beste is voor jou situatie.

[ Voor 17% gewijzigd door DJMaze op 07-06-2018 09:53 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 14:34
DJMaze schreef op donderdag 7 juni 2018 @ 09:45:
"Assumption is mother of all..." ja, er zijn ook EAN-8 en EAN-18 codes. Hoe slaan jullie die dan op in een NUMERIC(13,0) of CHAR(13) ;)
Ik schreef numeriek om te refereren aan float, int, bigint, tinyint, numeric als abstract variabel type. Dus numeriek in de zin van numeriek / alfanumeriek / alfa karakters.
Persoonlijk zou ik dan eerder voor een BIGINT kiezen omdat die 19 cijfers is.
Ik zou dus ook bigint gebruiken.
Natuurlijk gaat dit weer de mist in bij 19 cijfers (9223372036854775807)
Mits blijkt dat het niet in een bigint past ;)

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een barcode is een code die, toevallig, in veel gevallen, geheel bestaat uit cijfers. Maar dat iets bestaat uit cijfers maakt 't nog geen integer. Zo is een telefoonnummer ook geen integer. Tenzij je echt iets met de barcode doet (zoals de check digit controleren) zou ik de barcode gewoon als "blob data" behandelen en dus gewoon als string/varchar opslaan. Het heeft amper tot geen toegevoegde waarde om een barcode als int te behandelen en brengt zelfs potentiële problemen mee als er, bijvoorbeeld, ambiguïteit kan komen door een verschil in, zeg, 007 en 07 of dat je UI bijvoorbeeld opeens besluit je barcode weer te geven als 1,23e12 ofzo. Je kunt barcodes niet optellen noch aftrekken, je sorteert er niet op, je vergelijkt ze niet (nogmaals, check-digits daargelaten, die je barcode reader zélf prima afhandelt) dus er een integer van maken vind ik persoonlijk geen goed idee. Los daarvan zijn er zat barcodes waar ook letters en andere tekens in voor kunnen komen; dus tenzij je exclusief met 1 type barcode werkt (en dat kan prima zo zijn) zou ik sowieso een string hanteren want dan ondersteun je opeens, extra-gratis, allerlei andere barcodes in je software.

[ Voor 40% gewijzigd door RobIII op 07-06-2018 11:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 14:34
RobIII schreef op donderdag 7 juni 2018 @ 10:41:
Een barcode is een code die, toevallig, in veel gevallen, geheel bestaat uit cijfers. Maar dat iets bestaat uit cijfers maakt 't nog geen integer.
Ik denk dat we beide gelijk hebben. Dat iets een code is maakt het geen integer. Dat iets voorloopnullen heeft maakt het ook niet per definitie een character waarde. Dat hangt van de definitie van het waardes die je wilt opslaan.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CurlyMo schreef op donderdag 7 juni 2018 @ 11:08:
[...]

Ik denk dat we beide gelijk hebben. Dat iets een code is maakt het geen integer. Dat iets voorloopnullen heeft maakt het ook niet per definitie een character waarde. Dat hangt van de definitie van het waardes die je wilt opslaan.
Buiten de context van barcodes, in het algemeen dus, heb je, of hebben we, gelijk, maar ik schreef nog een heel betoog achter die ene zin die je quote. En dan moet ik toch reageren met "I beg to differ" op je "Ik denk dat we beide gelijk hebben" ;) :>

[ Voor 3% gewijzigd door RobIII op 07-06-2018 11:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 14:34
RobIII schreef op donderdag 7 juni 2018 @ 11:09:
[...]

Buiten de context van barcodes, in het algemeen dus, heb je, of hebben we, gelijk, maar ik schreef nog een heel betoog achter die ene zin die je quote. En dan moet ik toch reageren met "I beg to differ" op je "Ik denk dat we beide gelijk hebben" ;)
Ik reageerde oorspronkelijk op de stelling.
Barcodes sla ik altijd als char(13) op
Onderbouwd met het argument:
Dit ook ivm voorloop nullen
Ik reageerde specifiek op het voorloopnullen argument. Dat maakt iets niet per definitie geen integer.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CurlyMo schreef op donderdag 7 juni 2018 @ 11:13:
Ik reageerde oorspronkelijk op de stelling.
En ik ben 't met die post dan ook niet eens again, in context van barcodes opslaan ;) Voorloopnullen of niet, ik haalde ook andere problemen aan met integers / numerieke waardes gebruiken voor barcodes ;) Maar goed, let's agree to disagree dan maar.
CurlyMo schreef op donderdag 7 juni 2018 @ 11:13:
Ik reageerde specifiek op het voorloopnullen argument. Dat maakt iets niet per definitie geen integer.
Dat heb ik ook nergens beweerd ;)
Dat iets exclusief uit cijfers bestaat maakt 't geen integer -> alle varkens zijn dieren maar niet alle dieren zijn varkens ;) Dat is de strekking van mijn verhaal en dat in context van barcodes.

[ Voor 35% gewijzigd door RobIII op 07-06-2018 11:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
RobIII schreef op donderdag 7 juni 2018 @ 10:41:
Het heeft amper tot geen toegevoegde waarde om een barcode als int te behandelen en brengt zelfs potentiële problemen mee als er, bijvoorbeeld, ambiguïteit kan komen door een verschil in, zeg, 007 en 07
Die is er. EAN-18 heeft twee voorloop nullen. Numerieke velden werken dus niet als je GS1 en 18 in de zelfde kolom propt :)

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
I know :? Heb je de linkjes in die post geklikt? Er zijn tig soorten barcodes, natuurlijk zijn er barcodes die 1 of meer voorloopnullen gebruiken. Dat was toch precies mijn punt :? Trust me, ik heb genoeg te doen gehad met barcodes om er 't e.e.a. van af te weten ;)

Maar ondertussen zijn we wel een heel eind offtopic. Zullen we proberen wat meer ontopic te blijven?

[ Voor 23% gewijzigd door RobIII op 07-06-2018 11:44 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1