Undefined variable meldingen niet meer ontvangen
Voor een medicijn kan alleen een USD- of een IQD-valuta ingevoerd en opgeslagen worden. En, elke valuta heeft een eigen field in het kolom purchaseprice.
En ik heb het invoer formulier zo gemaakt dat wanneer het input filed van IQD wat waarde bevat, dan wordt het USD input field d.m.v. javascript automatisch uitgeschakeld en visa versa.
En voor het verzenden van het formulier controleer ik zowel dmv een veriabel of een USD of een IQD bestaat met de volgende code:
En toch krijg ik bij elke keer gegevens invoer een mailtje met daarin undefined variable for purchasepriceDi of purchasepriceDo.
En dit vind ik erg vervelend.
Alvast bedankt voor het meedenken.
De enige beste oplossing is het gebruik van isset() op de juiste manier.
Yup. Gewoon je code repareren, die foutmeldingen krijg je omdat je codepaden volgt die afhankelijk zijn van het bestaan van bepaalde waarden. Ze zijn dus terecht als je die waarden niet gevuld hebt in die codepaden. Gewoon mbv isset() kijken wat gevuld is en wat niet.
Waar komt $trimmed['purchasepriceDi'] vandaan?
Klinkt als: ik wil niet weten wanneer er fouten in mijn code zitten.
Allesbehalve een goed idee.
In een if definieer je nu $purchasepriceDi óf $purchasepriceDo, maar nooit beide tegelijk. Kennelijk gebruikt je code verderop wél ergens $purchasepriceDi en $purchasepriceDo tegelijk.
PurchasepriceDi
PurchasepriceDo.
Beide zijn van het type decimal, eentje met waarde 15,4 en 13,2.
Zie URL: http://hawarco.co/img/printscreen_purchaseprice.png
En, eigenlijk is mijn probleem heel simpel, maar mijn vermoeden is dat mysql niet accepteert dat een kolom van het type decimal geen waarde bevat. En, daarom krijg ik telkens een Undefined variable wanneer bijv de variabel: $purchasepriceDi of $purchasepriceDo geen waarde bevat of het kan zijn dat de bovenstaande isset doet het niet wat het moet doen...
Want eigenlijk hoeft een gebruiker geen purchase price op te geven tijdens het invoeren van een medicijn. Het is dus geen vereiste en daarom laat ik geen bericht zien wanneer het geen waarde bevat.
Hopelijk is nu mijn vraag/probleem duidelijk ;-)
Er zit trouwens verschil in "$_POST['xyz'] bestaat niet" en "$_POST['xyz'] is leeg"
isset() controleert op het bestaan van het veld.
verwijder jij (met bijvoorbeeld disabled) het element uit je form, of verberg je hem alleen maar?
Gewijzigd op 09/10/2017 10:36:03 door Ivo P
Als je naar het plaatje: http://hawarco.co/img/printscreen_purchaseprice.png wil kijken, dan zie je volgens mij dat dat ik beide kolommen niet gedefinieerd zijn als not null.
Betekent dat ik in in de if statement ook !empty moet gebruiken ipv isset?
Nee, er wordt niets verwijderd of verborgen in het formulier.
Betreffende input field wordt enkel uitgeschakeld, dus helemaal grijs dat er niets ingevuld kan worden. En, dit gebeurt enkel wanneer andere input field wat waarde heeft...
middels "disabled"? of zelf met de kleur gespeeld en readonly gemaakt? In dat laatste geval is hij wel geset, maar eventueel wel leeg.
-
en jouw screenshot lees ik als "mag hij null zijn? NO"
zeker aangezien er ook NO staat bij de kolom "id" die zeker niet null mag zijn...
Toevoeging op 09/10/2017 14:14:37:
btw: quantity klinkt als een hoeveelheid. VARCHAR lijkt me daar niet numeriek genoeg voor.
En wat is sellingprice, als dat een varchar is?
Overigens: waarom niet één dropdownveld voor een valuta, en één invulveld voor een bedrag? Tegelijkertijd heb je dan ook maar één kolom voor een bedrag nodig in je database? :/
Nope, gewoon met een Javascriptje die de input helemaal grijs maakt/uitschakelt. Als je het wil, dan wil ik hem wel delen hoor ;-)
OKe, thanks voor uitleg over NULL ;-)
Eigenlijk heb je daar gelijk in dat quantity en sellingprice ook een nummer moeten zijn, maar dan eerst wil ik het probleem van purchase price oplossen en wellicht kan ik hetzelfde concept ook gebruiken voor sellingprice ;-)
Toevoeging op 11/10/2017 15:41:01:
Update:
Het wil op geen enkel manier lukken en accepteren dat purchase price geen waarde heeft.
Eigenlijk ben ik helemaal nu radeloos en hopelijk heeft iemand nog een idee.
Ik heb het volgende reeds uitgevoerd:
1. Bij kolom purchase price staat null op yes en default is null
2. bij FK currency_id staat null op yes en default is null
3. De relatie van medicines to currency heb ik on delete en on update op set null gezet.
In PHP heb ik de code als volgt:
Code (php)
In de foutafhandeling krijg ik de volgende foutmelding:
An error occurred in script '/med_insert.php' on line 117: Undefined variable: purchaseprice
An error occurred in script '/med_insert.php' on line 118: Query: INSERT INTO medicines
(medicinename, genericname,expiredate,quantity,sellingprice,purchaseprice, medicineregistration, userid, medicinetype_id,currency_id)
VALUES
('test1','test','2017-11-11','100','','', NOW(), '3', '19', ''????
<br />MySQL Error: Cannot add or update a child row: a foreign key constraint fails (`DB2681116`.`medicines`, CONSTRAINT `medicines_ibfk_3` FOREIGN KEY (`currency_id`) REFERENCES `currency` (`id`) ON DELETE SET NULL ON UPDATE SET NULL)
Blijkbaar mag een decimaal kolom niet leeg zijn of zo...
Het probleem heb ik zelf opgelost door een work-around ;-)
Allemaal bedankt voor het meedenken ;-)
dit zegt dat je in de tabel medicines de kolom currency_id moet vullen met een waarde die ook in de tabel currency staat in de kolom id.
btw:
is het niet wat raar dat je per medicijn kennelijk al opslaat welke prijs en valuta gebruikt werd? Kun je die een week later niet opnieuw kopen in een andere land voor een andere prijs?
Correct. Al werk je met distributeurs, hun prijzen wijzigen praktisch iedere seconde.
Ik was ook erachter gekomen dat de currency_id kolom in de medicines tabel een waarde moet hebben diezelfde waarde is als kolom id in de currency tabel.
Maar wat ik niet begrijp is hoe ik dit kan realiseren. Op het net heb ik verschillende artikelen gelezen dat een FK leeg mag zijn en daarom heb ik bij de relatie tussen medicines tabel en currey de set null gezet op update en delete. Helaas mocht dit allemaal niet baten.
Als je hier een idee/oplossing voor hebt, dan hoor ik dat graag.
Wat prijs betreft voor een medicijn, ben ik eigenlijk van het volgende uitgegaan:
Maandelijks worden medicijnen ingekocht en de prijs kan per maand verschillen. Maar als de medicijnen dagelijks of wekelijks worden ingekocht, tjah hier heb ik geen rekening mee gehouden. En, ik zou niet weten hoe ik dit moet aanpakken op database niveau.
Hoe zou je dit aanpakken en zou je bijv de prijs per medicijn opslaan of beter gezegd wat stel je voor eigenlijk?
Gewijzigd op 12/10/2017 14:24:57 door Mohamed nvt
Wat is het probleem volgens jullie wanneer ik de prijs per medicijn invoer?