Задать вопрос
des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Взаимодействие php и базы. Двойное нажатие на кнопку. Как реализовать?

вот есть инпуты. в них вбиваю числа. жму сабмит - данные уходят в базу. на основании данных из базы в другие инпуты (readonly ) вписываются суммы. как бы мне сдеалать так чтобы сразу и данные сумм вбивались? по следующему нажатию на сабмит данные уходят в базу. можно ли как то сдублировать нажатие на сабмит? или есть какой то более элегантный вариант? прошу схему попроще и воздержаться от ответов типа переписывай на жаваскрипте
  • Вопрос задан
  • 2651 просмотр
Подписаться 1 Оценить 3 комментария
Решения вопроса 1
des1roer
@des1roer Автор вопроса
ученье - свет, а неученье - приятный полумрак
в общем уважаемые знатоки. я понимаю что мой вариант плох всем чем только можно. но он прост и легко реализуем. какого критичного поведения я от страницы не ожидаю. и делает она конкретно то что нужно.

<?
	if (!isset($_SESSION['act'])) $_SESSION['act'] = 0;
	if(isset($_POST['ses']))
		{
				if ($_SESSION['act'] == 1) $_SESSION['act'] =0;
				else $_SESSION['act'] =1;
}
?>

<form id="newFormAdv"  method="post">	
<input type="submit" name="ses" id="some_element" value="Сохранить" 

onclick="document.getElementById('newFormAdv').submit()">
</form>

<script>
function init()
{
	var val = '<?php echo $_SESSION['act']; ?>';	
	if (val == 1)	{
						newFormAdv.ses.click(); 
						document.getElementById('Module15.HskL').innerHTML = 'сохранено';
					}
}
window.onload = init;
</script>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Судя по вопросу (который кстати достаточно сложно понять), вы хотите это сделать без JavaScript, на что может быть только один ответ - используйте JavaScript.
Ответ написан
IgorO2
@IgorO2
73
Ну так при первом сабмите и считайте сумму и записывайте все в БД, в чем проблема то?
Ответ написан
cjbars
@cjbars
des1roer мне кажется тут хромает логика самих действий.

Я так понимаю, что вам требуется записать в базу заполненную форму.
например А, Б и А+Б
1. Нехорошо давать пользователю возможность менять вычисляемые поля. Даже если поле read-only то вычислять сумму должен однозначно сервер.
2. Зачем хранить вычисляемые значения в базе?
3. Зачем гонять туда сюда данные формы?

На мой взгляд это решается таким алгоритмом:
1. пользователю выводится форма.
2. Пользователь начинает её заполнять.
3. JavaScript следит за заполненностью полей формы и при их изменении отправляет введенные данные на сервер.
4. Сервер валидирует данные, считает их сложным алгоритмом, и возвращает обратно результат вычислений, либо состояние ошибки.
5. После окончательного заполнения формы она отправляется обработчику, он валидирует данные ещё раз, и пишет (введенные!) данные в базу.
6. всё что может быть вычислено IMHO должно вычисляться. Ведь не ровен час условия вычисления изменятся(поплывут коэффициенты) и что потом? пересчитывать всю базу? Не комильфо.
Ответ написан
kompi
@kompi
nullstack devoops
Интерпретируем в запросы:
1) отправка данных формы;
2) получение дополнительных данных для формы;
3) отправка данных формы.
Вопрос, зачем 3-й шаг, если на 2-м виден результат?

PS js здесь нужен только для асинхронных запросов. Можно обойтись без него, если не напрягает перезагрузка страницы:
<form>
    <?if(!empty($readonlyParam1)):?>
       <span><?= $readonlyParam1?></span>
    <?endif?>
    <input name="var1" type="text" value="">
    <input name="var2" type="text" value="">
    <input type="submit" value="Отправить">
</form>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы