Door
-- R --
op 29-09-2016 11:41
gewijzigd op 29-09-2016 11:59
3.735 views
Graag wil ik een online (check)levertijd systeem maken. We doen dit nu d.m.v. Excel. Hierin maken we elke week van iedere dag een aparte tab/sheet. Per tab (dus bijv. maandag 26 september) staan de volgende gegevens: Klantnaam, Ordernummer, Postcode, Woonplaats, Aflevertijdstip.
Momenteel kunnen klanten 1 dag voor levering bellen voor het aflevertijdstip.
Is het mogelijk om deze gegevens i.p.v. in Excel, in een database in te voeren? Vervolgens via de website d.m.v. PHP, klanten laten zoeken op postcode of ordernummer? kam iemand mij helpen met een begin of is er ergens een soort van handleiding?
Mijn engels is zeer goed en ik beschik over prima HTML en CSS kennis, redelijke SQL kennis en PHP echt alleen basics..
Oke, weer wat geleerd :)
Het werkt prima! Alleen als ik gewoon op zoeken klik dan gebeurt er niks.. Bij beide velden. Er komt dus niet "Er zijn geen velden ingevuld". ?
"Er zijn geen resultaten gevonden!" werkt toppie! :D
Inderdaad wil ik toch 2 velden omdat ik niet wil dat klanten van andere klanten, levertijden kunnen inzien. Zonder de % werkt perfect!
Ah dit is het klanten gedeelte. Dan zou je inderdaad beter LIKE kunnen vervangen door = en ik zou, zoals ik eerder zei, controleren op postcode EN Ordernummer ipv OF. Zo wordt het lastiger voor anderen om te gokken.
De foutmelding staat in $orderErr. Deze moet je dan nog wel ergens weergeven.
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(trim($_POST['ordernummer']) != "") {
$q = trim($_POST['ordernummer']);
} else if(trim($_POST['postcode']) != "" && trim($_POST['huisnummer']) != "") {
$q = trim($_POST['postcode']) . ' ' . trim($_POST['huisnummer']);
} else {
$orderErr = "Er zijn geen velden ingevuld";
}
if(!isset($orderErr)) { // Geen error.
try {
$stmt = $db->prepare("
SELECT
klantnaam
FROM
transport
WHERE
(CONCAT_WS(' ',
IF(LENGTH(postcode), postcode, NULL),
IF(LENGTH(huisnummer), huisnummer, NULL)
) LIKE :search
OR ordernummer LIKE :search)
");
$stmt->bindValue(':search', "%{$q}%", PDO::PARAM_STR);
$stmt->execute();
if ($stmt->rowCount() > 0) { // Er zijn meer dan 0 resultaten
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$rows = new IteratorIterator($stmt);
foreach($rows as $row) {
echo '<p>' . $row['klantnaam'] . '</p>';
}
} else {
echo 'Er zijn geen resultaten gevonden!';
}
}
catch(PDOException $e) {
echo $e->getMessage();
}
} else if(isset($orderErr)) {
echo $orderErr;
}
}
?>
Ahjaa klopt haha, niet zo slim van mij!
Nu is die af :D Dat was wat ik nodig had!
Enige wat ik nu nog hoef uit te zoeken is hoe ik via een simpel (secure) systeempje de gegevens daadwerkelijk in de database te krijgen. Ik heb dit nu via SQL import gedaan maar dat kunnen mijn collega's van de planning natuurlijk niet xD. Misschien hier nog tips voor?
Ik heb trouwens beide LIKE 's door = vervangen. Toppie
Nog een vraagje. Als ik nu zoek verschijnt alleen de [klantnaam]
echo '<p>' . $row['klantnaam'] . '</p>';
Is het mogelijk om gegevens uit meerdere kolommen toe te voegen? Dus als output verschijnt dan bijvoorbeeld:
De bestelling met ordernummer [ordernummer] van [klantnaam] in [woonplaats] zal worden geleverd tussen [aflevertijdstip]
Je ziet nu in de code SELECT klantnaam FROM transport
Deze select kun je uitbreiden met je andere velden in de database.
SELECT
klantnaam,
ordernummer,
postcode,
huisnummer,
woonplaats,
aflevertijdstip
FROM
transport
Deze velden kun je nu weergeven
foreach($rows as $row) {
$row = array_map("htmlspecialchars", $row); // dit voorkomt dat er code kan worden uitgevoerd of de data onjuist wordt weergegeven
echo '<p>De bestelling met ordernummer ' . $row['ordernummer'] . ' van ' . $row['klantnaam'] . ' in ' . $row['woonplaats'] . ' zal worden geleverd tussen ' . $row['aflevertijdstip'] . '</p>';
}