Dostat jen ciselne castky z textarea
- iDome89
- Člen | 27
Zdravim vsechny, uz konecne jsem vyresil ostatni problemy s Presenterem a
prichazim s novou otazkou. Je to vec vice phpkova nez primo Nette.
Ve svem formu mam textarea a chtel bych aby po kliknuti na tlacitko odeslat nebo
spocitat, byla kazda lina vyhodnocena zvlast. Např format bude tak textarea1 :
“300ks, 600kc
200ks, 400kc”
Kliknu na spocitat a textarea2 : my vyhodi “300ks, 750kc
200ks, 500kc”
Ktere vypocitalo podle marze kterou mam ulozenou v db.
Kod podtim je to co jsem napsal, ale samozrejme nefunguje protoze promenna price
a quantity je uvnitr scopu foreach, a me uz nenapada jak to jinak napsat. Proto
jdu za vama pro radu. Diky
<?php
declare(strict_types=1);
namespace App\Presenters;
use App\Forms\FormFactory;
use Nette\Application\UI\Form;
use Nette\Database\Context;
use Nette\Utils\ArrayHash;
class HomepagePresenter extends BasePresenter
{
/**
* @var Context
* @inject
*/
public $database;
/**
* @var FormFactory
* @inject
*/
public $formFactory;
protected function createComponentCalculationForm(): Form
{
$form = $this->formFactory->create();
$form->addSelect('supplier', 'Dodavatel:', $this->database->table('suppliers')->fetchPairs('id', 'supp_name'));
$form->addTextArea('user_input');
$form->addSubmit('calculate', 'Spočítat');
$form->addTextArea('result')
->setHtmlAttribute('class', 'totalPrice')
->setHtmlAttribute('readonly');
$form->onSuccess[] = function (Form $form, ArrayHash $values): void {
$selectedSupp = $values->supplier;
$userInput = $values->user_input;
$lines = $array = explode("\n", $userInput);
foreach ($lines as $line) {
preg_match_all('/[\d]+/', $line, $numbers);
list($quantity, $price) = $numbers[0];
}
$modifier = $this->database->fetch('SELECT percentage FROM prices WHERE supplier_id = ? AND max >= ? AND min <= ?', $selectedSupp, $quantity, $quantity);
$total = round($price + ($price / 100) * $modifier->percentage);
$form['result']->setValue("$quantity Ks, $total Kč + DPH");
};
return $form;
}
}
?>
- artemevsin
- Člen | 61
nemáš na mysli něco takového?
<?php
$form->onSuccess[] = function (Form $form, ArrayHash $values): void {
$selectedSupp = $values->supplier;
$modifier = $this->database->fetch('SELECT percentage FROM prices WHERE supplier_id = ? AND max >= ? AND min <= ?', $selectedSupp, $quantity, $quantity);
$userInput = $values->user_input;
$lines = $array = explode("\n", $userInput);
$resultLines = [];
foreach ($lines as $line) {
preg_match_all('/[\d]+/', $line, $numbers);
list($quantity, $price) = $numbers[0];
$total = round($price + ($price / 100) * $modifier->percentage);
$resultLines[] = "$quantity Ks, $total Kč + DPH";
}
$form['result']->setValue(implode("\n", $resultLines));
};
?>
- iDome89
- Člen | 27
artemevsin napsal(a):
nemáš na mysli něco takového?
<?php $form->onSuccess[] = function (Form $form, ArrayHash $values): void { $selectedSupp = $values->supplier; $modifier = $this->database->fetch('SELECT percentage FROM prices WHERE supplier_id = ? AND max >= ? AND min <= ?', $selectedSupp, $quantity, $quantity); $userInput = $values->user_input; $lines = $array = explode("\n", $userInput); $resultLines = []; foreach ($lines as $line) { preg_match_all('/[\d]+/', $line, $numbers); list($quantity, $price) = $numbers[0]; $total = round($price + ($price / 100) * $modifier->percentage); $resultLines[] = "$quantity Ks, $total Kč + DPH"; } $form['result']->setValue(implode("\n", $resultLines)); }; ?>
Tady promenna $quantity je zase nedefinovaná v $modifier, neco podobneho uz jsem prave zkousel.
- artemevsin
- Člen | 61
aha, to jsem přehlédl… tak ten sql dotaz dej do foreache. Nevím, kolik míváš řádků v textarea a jak moc řešíš optimalizaci, ale pokud těch záznamů nemáš moc, tak bych rychlost (resp. počet dotazů) neřešil
- iDome89
- Člen | 27
artemevsin napsal(a):
aha, to jsem přehlédl… tak ten sql dotaz dej do foreache. Nevím, kolik míváš řádků v textarea a jak moc řešíš optimalizaci, ale pokud těch záznamů nemáš moc, tak bych rychlost (resp. počet dotazů) neřešil
Zkusil jsem to hodit i do toho foreache samozrejme ale, porad mam ten stejny problem jako u „meho“ reseni, kdy je hlaska $price is not and object nebo tak neco, a prave mi to neudela ten vypocet.