Hallo,
Ik loop vast met mijn if statement in mijn controller.
Dit is wat er moet gebeuren:
Ik heb een formulier met een input email en ordernummer gemaakt en een alertbox met ajax jquery.
Vervolgens als het ordernummer niet 12345 is dan moet ik de status = false meegeven aan de data.
Bedankt thomas ik heb eerst een array opgebouwd met variabele $gegevens= array('status'=> false,);
Daarna de echo veranderd in json_encode. Stap voor stap begrijp ik het beter.
<?
if (isset($_POST['email'])){
$gegevens = array('status'=> false,);
$order = new Order();
$order->set_query("SELECT orders.* FROM orders INNER JOIN users ON orders.user_id = users.id WHERE email = :email AND order_hash = :order_hash", false);
$order->bind('email', $_POST['email']);
$order->bind('order_hash', $_POST['order-hash']);
if($order->fetch()){
EmailHelper::order_confirmation($order);
echo json_encode( "Gevonden");
}else{
echo json_encode("Niet gevonden");
}
}
?>
[size=xsmall]Toevoeging op 11/04/2018 09:22:27:[/size]
Kan iemand helpen ik moet dit doen:
$order->fetch()
returnt true of false op basis of er een row is gevonden
Status moet true zijn als er wat gevonden is
Status moet false zijn als er niks is gevonden
Dit is mijn code:
<?
if (isset($_POST['email'])){
$gegevens = array('status'=> false,);
$order = new Order();
$order->set_query("SELECT orders.* FROM orders INNER JOIN users ON orders.user_id = users.id WHERE email = :email AND order_hash = :order_hash", false);
$order->bind('email', $_POST['email']);
$order->bind('order_hash', $_POST['order-hash']);
Ik weet niet wat de bedoeling precies is, maar is die string met "Gevonden" en "Niet gevonden" niet iets wat je in de ajax-validatie wilt tonen? In je vorige voorbeeld gaf je hier de orderhash door en de status daarvan. Nu is dit standaard false.
Als je dit lastig vindt om te ontwerpen, maak dan eerst een stroomlijn diagram die precies moet vertellen wat er moet gebeuren. Dit geeft goede houvast!
Plaats anders ook commentaar in je PHP-code die uitlegt wat er moet gebeuren. Dat is ook een goede aanrader! Beschrijf dan elke stap die gebeurt.
?
Onbekende gebruiker
11-04-2018 09:55
Ik heb commmentaar geplaats wat er moet gebeuren status moet true zijn als het gevonden is . Als het niet gevonden is moet het false zijn.
<?
if (isset($_POST['email'])){
$gegevens = array('status'=> false,);
$order = new Order();
$order->set_query("SELECT orders.* FROM orders INNER JOIN users ON orders.user_id = users.id WHERE email = :email AND order_hash = :order_hash", false);
$order->bind('email', $_POST['email']);
$order->bind('order_hash', $_POST['order-hash']);
if($order->fetch()){
//Status moet true zijn als het gevonden is.
//Status moet false zijn als het niet gevonden is.
EmailHelper::order_confirmation($order);
Het enige wat je in je JSON-string zet is status=false. Alles is dan false.
Wil je dat?
Ik weet overigens niet wat EmailHelper::order_confirmation doet.
Plus de extra tekst "(Niet) Gevonden" hoort hier niet bij. Dat hoort aan de javascript-kant bij de controle. Je wilt in je script enkel een JSON-string uitspugen.
?
Onbekende gebruiker
11-04-2018 10:06
gewijzigd op 11-04-2018 10:06
Het zit zo ik heb nu een input veldje met e-mailadres en ordernummer status komt er bij en als ik de juiste email en ordernummer heb ingetypt komt er gevonden te staan maar dan moet de status:true zijn en als ik niet de juiste gegevens heb ingevuld false.
Uitleg is :
$order->fetch()
returnt true of false op basis of er een row is gevonden
Status moet true zijn als er wat gevonden is
status moet false zijn als er niks is gevonden
Kijk anders eens opnieuw naar Thomas' voorbeeld. Je moet ervoor zorgen dat wat je fetched precies eruit komt te zien als de vaste array in het voorbeeld.
Probeer het eens, ga debuggen met print_r(), var_dump(), kijk naar de uitvoer ervan en kijk of dit klopt.
[size=xsmall]Toevoeging op 11/04/2018 10:19:15:[/size]
<?php
if (isset($_POST['email'])){
$gegevens = array('status'=> false); // zet eerst op false
$order = new Order();
$order->set_query("SELECT orders.* FROM orders INNER JOIN users ON orders.user_id = users.id WHERE email = :email AND order_hash = :order_hash", false);
$order->bind('email', $_POST['email']);
$order->bind('order_hash', $_POST['order-hash']);
$gegevens = $order->fetch(); // plaats resultaten uit je array in de $gegevens-array. Als er een status bekend is, dan wordt deze overschreven van de eerst gedeclareerde false.
echo json_encode($gegevens);
}
?>
Dit zal beter moeten werken. Die if-else stament is niet van toepassing, omdat je de controle aan de javascript kant wou uitvoeren. Als dat niet zo is, maak dan eerst een gedetailleerd stroomlijn diagram. Want ik word een beetje tureluurs ervan omdat je dit steeds aanpast :P
?
Onbekende gebruiker
11-04-2018 10:32
EmailHelper::order_confirmation($order); stuurt mail terug als je de juiste gegevens hebt ingevuld maar hoe zie je nu dat als ik de gegevens heb ingevuld of tie gevonden is of niet ik moet later in ajax jquery(json) uitvoeren zoals die vorige voorbeeld die ik gemaakt heb.
Ik zou zeggen: ga eens in de weer met print_r() om, tijdelijk voor het effies tijdens het ontwikkelen, om de inhoud uit array's te tonen, en var_dump() om te kijken wat de inhoud van een variabele is.
Een kwestie van debuggen en stap voor stap kijken welke waarde je hebt.
Anyway, ik heb het e.e.a verduidelijkt in mijn vorige post.
?
Onbekende gebruiker
11-04-2018 10:41
gewijzigd op 11-04-2018 10:44
Ik heb met print_r even gecheckt wat er in stond van de gegevens
Dit gaf tie weer standaard is de status false terwijl die nu true moet weergeven door dat de gegevens kloppen en dan mail terug stuurt.