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.


Code van mijn controller:

<?
if (isset($_POST['email'])){

$gegevens = array("email" => $_POST['email'], "order-hash" => $_POST['order-hash']);

echo json_encode($gegevens);
}
if ($gegevens['order-hash'] === '12345')
$gegevens["order-hash"] = false;
?>

Kan iemand mij helpen ?
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']);

if($order->fetch()){

EmailHelper::order_confirmation($order);


echo "Gevonden", json_encode($gegevens);
}else{

echo "Niet gevonden", json_encode($gegevens);
}
}
?>
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.
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);


echo "Gevonden", json_encode($gegevens);
}else{

echo "Niet gevonden", json_encode($gegevens);
}
}
?>
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.
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
Je fetched het nergens naar een variabele

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
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.
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.

Array ( [email] => [email protected] [order-hash] => I6Q7FUZ ) Gevonden{"status":false}

Code die ik nog heb.

<?php
print_r($_POST);
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 "Gevonden", json_encode($gegevens);
}else
{

echo "Niet gevonden", json_encode($gegevens);
}
}

?>
Staan er überhaupt wel statussen in je database?

Schrijf anders eens duidelijk stap voor stap hier op wat de exacte opdracht is.

Reageren