Voor een simpel factuur systeem zit ik met een probleem van een optionele parameter Wanneer ik een factuur maak kan dat zijn voor een nieuwe klant dan wel voor een bestaande klant. Gaat het om een nieuwe klant dan wordt er geen parameter meegestuurd naar de vervolg pagina dan geld namelijk de zojuist ingevoerde klant_id, gaat het echter om een bestaande klant dan moet die klant_id wel worden meegestuurd naar de vervolg pagina. Ik dacht dat op de volgende manier voor elkaar te krijgen:
Model
public function klant_gegevens($klant_id = '')
{
$sql = "SELECT *
FROM `klant_gegevens`";
if ($klant_id)
{
$sql .= "WHERE `klant_id` = ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute(array($klant_id));
}
else
{
$sql .= "ORDER BY `klant_id` DESC
LIMIT 1";
$stmt = $this->pdo->query($sql);
}
return $stmt->fetch();
}
Controller
public function product_zoekenAction()
{
if (isset($klant_id))
{
$klant_id = filter_input(INPUT_POST, 'klant_id', FILTER_SANITIZE_NUMBER_INT);
}
else
{
$klant_id = '';
}
$klant_gegevens = $this->administratie->klant_gegevens($klant_id);
var_dump ($klant_id);
}
Maar dit werkt maar deels. Wanneer ik een factuur voor een nieuwe klant aanmaak en naar de vervolg pagina ga krijg ik inderdaad de juiste gegevens. Wanneer ik echter een factuur aanmaak voor een bestaande klant krijg ik de gegevens van de klant met de hoogste klant_id
Ik snap de constructie niet goed wat je wil bereiken.
Waarom $klant_id = '' ?
Bij een nieuwe klant neem ik aan dat je $klant_id vult met 'iets', als het een bestaande klant hebt vul je hem ook. Dus waarom zou het dan een lege string moeten zijn?
In je bestaande klant moet je dus een mechaniek inbouwen dat deze gevuld word.
Anders word het heel lastig om te bepalen bij welke klant de factuur behoord.
En dan vind ik het heel knap dat sql zelf "gokt" dat jij het hoogste id wenst.
Ik snap de constructie niet goed wat je wil bereiken.
Waarom $klant_id = '' ?
Bij een nieuwe klant neem ik aan dat je $klant_id vult met 'iets', als het een bestaande klant hebt vul je hem ook. Dus waarom zou het dan een lege string moeten zijn?
In je bestaande klant moet je dus een mechaniek inbouwen dat deze gevuld word.
Anders word het heel lastig om te bepalen bij welke klant de factuur behoord.
En dan vind ik het heel knap dat sql zelf "gokt" dat jij het hoogste id wenst.
Hoi Bart.Bedankt voor je reactie. Het betreft een pagina met twee formulieren. Een voor het invoeren van een nieuwe klant en een met een dropdown menu voor het kiezen van een bestaande klant.
Waar komt die eerste $klant_id vandaan? Moet dat niet $_POST['klant_id'] zijn ofzo? Je gaat mij niet vertellen dat je register_globals aan hebt staan? :s
Enne, het klinkt alsof je doet alsof hoogste klant_id === nieuwe klant? Hoe gaat dat dan werken? Maak een procedure aan die je volgt waarin je éérst een nieuwe klant aanmaakt voordat je andere dingen gaat doen... Oftewel volg een werkwijze die hout snijdt.
Hoi Thomas. Je hebt absoluut gelijk. Ik heb dan ook besloten het een en ander anders aan te pakken. In plaats van de klanten tabel te gebruiken heb ik besloten de order tabel te gebruiken. Na dat er een nieuwe klant is toegevoegd dan wel er een bestaande klant uit het keuze menu is gekozen wordt er meteen een nieuwe order aangemaakt (order_id, klant_id, order_datum). Deze tabel is gelinkt aan de klant_gegevens tabel via de sleutel klant_id. Op deze manier krijg ik altijd de juiste klant_gegevens