Hallo allemaal,

Hieronder heb ik een simpel insert query, wat helaas maar niet wil werken.
Ik heb alle mogelijk foutmeldingen eruit gehaald, maar ik kom er nog steeds niet uit...

Zou iemand naar willen kijken en mij voorzien van waardevolle feedback?

Alvast bedankt.



<?php 
$medicinequery = "INSERT INTO medicines 
			(medicinename, genericname,productiondate,expiredate,quantity,sellingprice,purchaseprice,medicineregistration, userid) 
			VALUES 
			('$medicinename','$genericname','$production', '$expire','$quantity', '$sellingprice', '$purchaseprice', NOW(), '{$_SESSION['user_id']}')";
			$r = mysqli_query ($dbc, $medicinequery) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
?>
Welke foutmelding krijg je dan?
Een tipje: Variabelenhoren buiten quotes.
- Ariën - op 10/03/2017 20:36:54

Welke foutmelding krijg je dan?
Een tipje: Variabelenhoren buiten quotes.

Hallo Ariën,

Ik krijg helaas geen foutmelding, enkel dat script niet gelukt is

<?php
} else { // If one of the data tests failed.
		echo '<p class="error">Please try again.</p>';
	}
?>
Echo eens $medicinequery, klopt die query die je krijgt?
En waar komt die code ^ vandaan?
- Ariën - op 10/03/2017 20:52:39

Echo eens $medicinequery, klopt die query die je krijgt?
En waar komt die code ^ vandaan?

Het tekentje ^ zie ik het niet.
Op welk regel zie je het?
Bij het echoën van de query verschijnt het volgende:
En, vreemd genoeg zijn alle waardes goed, behalve dat huidige time niet wordt weergegeven en dus enkel het commando now() wordt weergegeven. En misschien maakt de volgorde van vakjes niet uit, maar hiermee heb ik wel rekening gehouden en de volgorde klopt het op form niveau, invoer niveau en database niveau..

<?php
INSERT INTO medicines (medicinename, genericname,productiondate,expiredate,quantity,sellingprice,purchaseprice,medicineregistration, userid) VALUES (test,test1,2011-01-01,2017-01-01,5,5,5, NOW(), 3)
?>

het is een pijltje die verwijst naar je posting in deze thread. ;-)
Waar komt die code vandaan? Want als je query niet werkt zou die trigger_error moeten worden aangeroepen.

Kan je die query uit je echo eens in phpMyAdmin (of een andere mySQL-client) gooien?

VALUES (test,test1,2011-01-01,2017-01-01,5,5,5, NOW(), 3)

Die eerste 4 values zijn niet-numeriek en moeten dus tussen single quotes.

Ik gok dat Ariën wat verwarring heeft veroorzaakt met zijn opmerking dat variabelen buiten quotes horen. Waar ik het overigens niet per se mee eens ben. ;-)

Wellicht is het handig om ook nog
<?php
error_reporting(E_ALL);
?>
aan het begin van je script op te nemen. Het zou kunnen dat die nu zo staat ingesteld dat trigger_error() niets laat zien.
Indien één van de variabelen zelf een single quote bevat en niet op de goede manier ge-escaped worden gaat het sowieso niet werken. Mijn eerste vraag zou dus zijn: welke waarden zitten er in $medicinename, $genericname et cetera en worden deze ge-escaped met een real_escape_string() functie?

Het komt de leesbaarheid van je query ook ten goede als je deze over meerdere regels uitschrijft, en deze hoef je niet in een aparte variabele te stoppen, te meer omdat je deze variabele verder toch niet lijkt te gebruiken (waar komt overigens $q vandaan?):
<?php
$r = $dbc->query(
    "INSERT INTO medicines (
        medicinename,
        genericname,
        productiondate,
        expiredate,
        quantity,
        sellingprice,
        purchaseprice,
        medicineregistration,
        userid
    ) VALUES (
        '$medicinename',
        '$genericname',
        '$production',
        '$expire',
        '$quantity',
        '$sellingprice',
        '$purchaseprice',
        NOW(),
        '{$_SESSION['user_id']}'
    )"
);
?>

Dit heeft weliswaar iets meer lucht, maar is zoveel beter leesbaar. Vooral als je hier nog escaping overheen moet gooien.

Foutafhandeling zou ik ook op een andere manier doen dan trigger_error() en als deze query onderdeel is van een reeks queries zou ik sterk overwegen om transacties te gebruiken.
Het initiële probleem heb ik nu opgelost ;-)

Onder de bovenstaande query had ik staan andere queries, maar die moest ik eerst nog oplossen.
Iig ik kan nu data invoeren via het invoerformulier, mits de volgende voorwaarden waar zijn:

1. Als er reeds een medicijnbedrijf bestaat/ingevoerd
2. Als er reeds een medicijnland bestaat/ingevoerd
3. Als er reeds een medicijnleverancier bestaat/ingevoerd

Eerst even wat achtergrond info:

Voorheen gebruikte ik een dropdown-menu om een van de drie bovenstaande punten te laten kiezen. En, wanneer deze punten niet bestonden, dan moest de gebruiker deze drie punten eerst invoeren in db, alvorens een medicijn te kunnen voeren.

En om met de tijd om te gaan en het invoerformulier gebruikersvriendelijk te maken, gebruik ik nu autocomplete feature. En, zoals jullie weten, checkt autocomplete of er reeds een waarde bestaat in de DB en de gebruiker hoeft enkel een letter in te voeren en de gematcht woord komt te verschijn.

Maar het probleem wat ik nu tegen aan loop, is dat ik 3 koppeltabellen heb voor medicijnland, medicijnleverancier en medicijnbedrijf. En om deze koppeltabellen te kunnen invoeren, moet ik het id hebben van de item van de origineel tabel.
Maar jullie raden het al; op het moment dat ik een medicijn invoer, dan zijn de originele tabellen van medicijnland, medicijnleverancier en medicijnbedrijf nog leeg...

En dus mijn vraag is; hoe kan ik ervoor zorgen dat wanneer een gebruiker data invoert in medicijnbedrijf vakje of in die twee andere vakjes, de data direct wordt opgeslagen in de origineel tabel, zodat ik het id van de item van de origineel tabel kan gebruiken voor het invoerformulier

Als je het wil testen, wat ik bedoel, bezoek dan:
hawarco.co
gebruikersnaam: [email protected]
pw: test1

Hopelijk is mijn verhaal duidelijk en alvast bedankt voor het meedenken!
Mohamed nvt op 11/03/2017 15:20:14
Maar het probleem wat ik nu tegen aan loop, is dat ik 3 koppeltabellen heb voor medicijnland, medicijnleverancier en medicijnbedrijf. En om deze koppeltabellen te kunnen invoeren, moet ik het id hebben van de item van de origineel tabel.
Maar jullie raden het al; op het moment dat ik een medicijn invoer, dan zijn de originele tabellen van medicijnland, medicijnleverancier en medicijnbedrijf nog leeg...

Kan het medicijn dan meerdere landen van herkomst, leveranciers en bedrijven/producenten hebben? Zonee, waarom dan een koppeltabel? Ook wil je waarschijnlijk pas informatie opslaan als deze compleet is, dus alle informatie, of géén informatie anders raakt je data corrupt doordat je dingen maar half opslaat.
Thomas van den Heuvel op 14/03/2017 00:18:42

[quote="Mohamed nvt op 11/03/2017 15:20:14"]Maar het probleem wat ik nu tegen aan loop, is dat ik 3 koppeltabellen heb voor medicijnland, medicijnleverancier en medicijnbedrijf. En om deze koppeltabellen te kunnen invoeren, moet ik het id hebben van de item van de origineel tabel.
Maar jullie raden het al; op het moment dat ik een medicijn invoer, dan zijn de originele tabellen van medicijnland, medicijnleverancier en medicijnbedrijf nog leeg...

Kan het medicijn dan meerdere landen van herkomst, leveranciers en bedrijven/producenten hebben? Zonee, waarom dan een koppeltabel? Ook wil je waarschijnlijk pas informatie opslaan als deze compleet is, dus alle informatie, of géén informatie anders raakt je data corrupt doordat je dingen maar half opslaat.
[/quote]

Hallo Thomas van den Heuvel,

Ja, dezelfde medicijn kan afkomstig zijn uit verschillende landen, geleverd worden door verschillende leverancier en gemaakt worden door verschillende bedrijven..En daarom heb ik koppeltabellen gemaakt voor deze 3 criteria. Overigens heb ik nu gewoon dropdown-menu en geen autocomplete voor deze punten..
Tnx!

Reageren