Почему не работает код? php, html, js
Всем привет не могу понять почему мой код не работает. Значения получаются из базы данных.
файл Db_get.php:
<?php
function db_get (mixed $table_name) : mixed
{
$db= new PDO('sqlite:db.db');
$stmt=$db->prepare("SELECT * FROM `$table_name` ORDER BY 1 DESC LIMIT 1;");
$stmt->execute();
$table=$stmt->fetchall(PDO::FETCH_ASSOC);
return $table;
}
файл Form_1.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<?php
function form_function_1(mixed $unit_of_measurement, mixed $sensor_name, mixed $sensor_value){
if (isset($_GET['value1'])) {
$value = $_GET['value1'];
} else {
$value = $sensor_value;
}
if (isset($_GET['checkbox_value1'])) {
$checkbox_value = $_GET['checkbox_value1'];
} else {
$checkbox_value = '';
}
?>
<form method="GET" id="myForm1">
<?php echo $sensor_name;
echo " ";
echo $unit_of_measurement;
?>
<input type="text" name="value1" value="<?php echo $value; ?>"
<?php
if (empty($checkbox_value)) {
echo 'disabled';
}
?>>
<input type="checkbox" id="myCheckbox1" name="checkbox_value1" value="1"
<?php
if (!empty($checkbox_value)) {
echo 'checked';
}
?>>
<input type="submit" value="Send" <?php if (empty($checkbox_value)){echo 'disabled';}?>>
</form>
<script>
function sendForm() {
document.getElementById("myForm1").submit();
}
document.querySelector('#myCheckbox1').addEventListener('change', function() {
const inputValue = document.querySelector('input[name="value1"]');
if (!this.checked) {
inputValue.value = <?php echo $sensor_value; ?>;
inputValue.disabled = true;
} else {
inputValue.disabled = false;
}
sendForm();
});
if (document.querySelector('#myCheckbox1').checked) {
document.querySelector('input[name="value1"]').disabled = false;
} else {
document.querySelector('input[name="value1"]').disabled = true;
}
</script>
</body>
</html>
<?php
}
?>
файл Form_2.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<?php
function form_function_2(mixed $unit_of_measurement, mixed $sensor_name, mixed $sensor_value){
if (isset($_GET['value2'])) {
$value = $_GET['value2'];
} else {
$value = $sensor_value;
}
if (isset($_GET['checkbox_value2'])) {
$checkbox_value = $_GET['checkbox_value2'];
} else {
$checkbox_value = '';
}
?>
<form method="GET" id="myForm2">
<?php echo $sensor_name;
echo " ";
echo $unit_of_measurement;
?>
<input type="text" name="value2" value="<?php echo $value; ?>"
<?php
if (empty($checkbox_value)) {
echo 'disabled';
}
?>>
<input type="checkbox" id="myCheckbox2" name="checkbox_value2" value="1"
<?php
if (!empty($checkbox_value)) {
echo 'checked';
}
?>>
<input type="submit" value="Send" <?php if (empty($checkbox_value)){echo 'disabled';}?>>
</form>
<script>
function sendForm() {
document.getElementById("myForm2").submit();
}
document.querySelector('#myCheckbox2').addEventListener('change', function() {
const inputValue = document.querySelector('input[name="value2"]');
if (!this.checked) {
inputValue.value = <?php echo $sensor_value; ?>;
inputValue.disabled = true;
} else {
inputValue.disabled = false;
}
sendForm();
});
if (document.querySelector('#myCheckbox2').checked) {
document.querySelector('input[name="value2"]').disabled = false;
} else {
document.querySelector('input[name="value2"]').disabled = true;
}
</script>
</body>
</html>
<?php
}
?>
файл Settings_start:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Settings</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<?php
include "Form_1.php";
include "Form_2.php";
include "Db_get.php";
$table_Pressure=db_get('Pressure');
$table_Temperature=db_get('Temperature');
form_function_1($table_Pressure[0]['unit_of_measurement'],$table_Pressure[0]['sensor_name'],$table_Pressure[0]['value']);
form_function_2($table_Temperature[0]['unit_of_measurement'],$table_Temperature[0]['sensor_name'],$table_Temperature[0]['value']);
?>
</html>
Почему-то та функция, которою вызывают первой, работает не корректно. Переставлять вызов функции пытался,все равно проблема в функции которую вызывают первой. Некоректность работы функции заключается в том что при выборе чекбокса отправляется запрос (автоматически) и сразу чекбокс перестает быть выбраным, соответственно кнопка send стает недоступной, и вводить что нибудь в форму нельзя.
Ответы (1 шт):
Такого рода задачи сложно поддаются отладке, тут нужен опыт. Если открыть этот код в браузере, то будет видно, что при отправке первой формы в адресной строке пусто. То есть данные первой формы никогда не отправляются. Обычно это связано с косяком в JS, когда при копипасте обработчика ставятся неверные референсы - читается не та форма или не тот id. Но с этим в коде всё нормально. Только при пристальном изучении яваскрипта выясняется, что функция sendForm() перезаписывается, и в результате всегда отправляет только вторую форму.
Ну и исходная идея - иметь две формы, чтобы каждая при отправке сбрасывала другую - очень так себе. То есть даже после исправления этой опечатки мы всё равно вернёмся к тому, что одна из форм сбрасывается - только они будут меняться, а не всегда только первая.
Почему было не сделать одну форму, пусть даже отправляемую при каждом клике - загадка.