0

При выборе первого выпадающго списка подгружается база, выдаёт сам список. Выбираю из него элемент - это тип кабеля с параметрами. Параметры должны автоматически переключить нужные поля. Строки 96-98 этот вопрос решают - но все поля не реагируют потом на выбор. Я так понимаю, значения просто регулярно забиваются назад, не дав получить новые..

Потому я сейчас закомментировал эти строки - теперь форма не активирует параметры кабеля. Как решить эту проблему без JavaScript? Я всё ещё далёк от него. И да, в файле немного лишнего - это фрагмент из уже отлаженной части проекта.

<?php
require_once"init.php";
?>

<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="test.css" />
</head>
<BODY>

<?php
if ($_POST['type']<>"") {
        $type = $_POST['type'];
}
if ($_POST['modules']<>"") {
        $modules = $_POST['modules'];
        $arrayModules[$id]= $modules;
}
if ($_POST['fibers']<>"") {
        $fibers = $_POST['fibers'];
        $arrayFibers[$id] = $fibers;
}
if ($_POST['fibcolor']<>"") {
        $fibcolor = $_POST['fibcolor'];
        $arrayFibcolor[$id] = $fibcolor;
}
if ($_POST['cable']<>"") {
        $cable = $_POST['cable'];
}
if (($type=="") or ($modules=="") or ($fibers=="") or ($fibcolor=="")) {
        $cablescreate="disabled"; // НЕ РАБОТАЕТ ДИЗАБЛЯ КНОПКИ ПО УСЛОВИЮ. убрал
} else {
        $cablescreate="enabled";
}
if ($_POST['create']<>"") {     // обработчик сабмита формы СОЗДАТЬ
        $link = mysqli_connect($host, $user, $pass, $base);
        $sql= "INSERT INTO ".$base.".cables"." (type, modules, fibers, fibcolor)
                        VALUES ('{$type}','{$modules}','{$fibers}','{$fibcolor}');";
        mysqli_query($link, $sql);
        mysqli_close($link);
        $resultat= "<br>Тип кабеля ".$type." ДОБАВЛЕН в базу!";
}
if ($_POST['delete']<>"") {     // Обработчик сабмита формы УДАЛИТЬ
        $link = mysqli_connect($host, $user, $pass, $base);
        $sql = "DELETE FROM cables WHERE id=".$cable.";";
        mysqli_query($link, $sql);
        mysqli_close($link);
        $cable=0;
        $resultat= "<br>Тип кабеля ".$type." УДАЛЁН из базы!<br>Текст запроса: ".$sql;
}
if ($_POST['edit']<>"") {       // Обработчик сабмита ИЗМЕНИТЬ
        $link = mysqli_connect($host, $user, $pass, $base);
        $sql = "UPDATE IGNORE cables SET modules=".$modules.", fibers=".$fibers.
        ", fibcolor=".$fibcolor." WHERE id=".$cable.";";

        mysqli_query($link, $sql);
        mysqli_close($link);
        $resultat= "<br>Тип кабеля ".$type." ИЗМЕНЁН!<br>Текст запроса :".$sql;
}

?>

<div class="diagnostic"">
<?php
echo "РЕЗУЛЬТАТ: ".$resultat;
?>
</div>



<div class="editor">
Форма для ИЗМЕНЕНИЯ ТИПА КАБЕЛЯ<br><br>
<form id="cablesedit" name="cablesedit" action="" method="POST">
<select required id="cable" name="cable" size="1" onchange="submit()" >
        <option <?php if ( $cable == 0 ) echo ' selected="selected"'; ?>>Выберите тип кабеля для ИЗМЕНЕНИЯ</option>
<!--        ЗДЕСЬ ВЫБОР КАБЕЛЯ-->
<?php
        $link = mysqli_connect($host, $user, $pass, $base);
        if ($result = mysqli_query($link, 'SELECT * FROM cables ORDER BY id')) {
                        while( $row = mysqli_fetch_assoc($result) ){
                                // цикл вычитки таблицы, пока есть строки
                                // $row - строка из базы, массив
                        $id=$row['id'];                                 // Получаем ID и пляшем от него
                        $arrayType[$id] = $row['type'];                 // в массивы под номером id вносим
                        $arrayModules[$id] = $row['modules'];           // все характеристики кабелей
                        $arrayFibers[$id] = $row['fibers'];
                        $arrayFibcolor[$id] = $row['fibcolor'];
                        };
        };
        mysqli_close($link);
// Сбор списка кабелей завершён, выводим список
foreach($arrayType as $id => $type) {           // Пока есть значения в массиве..
        if ($id == $cable){                         // Если поле выбрано..
        echo " <option value=".$id.' selected="selected" >'.$type."</option>";   // то выбираем
         // $modules=$arrayModules[$id];                // И назначаем старые данные
         // $fibers=$arrayFibers[$id];                  // ..загруженные в массив из базы
         // $fibcolor=$arrayFibcolor[$id];              // ..для вывода стартовой позиции для изменения.
} else {
        echo " <option value=".$id.">".$type."</option>";   // Или нет, если нет
}
}
?>
        </select><br>
<select id="modules" name="modules" size="1" onchange="submit()">
        <option value="1" <?php if (( $modules == 0 ) or ($modules == 1)) echo ' selected="selected"'; ?>>1 модуль</option>
        <option value="2" <?php if ( $modules == 2 ) echo ' selected="selected"'; ?>>2 модуля</option>
        <option value="4" <?php if ( $modules == 4 ) echo ' selected="selected"'; ?>>4 модуля</option>
        <option value="6" <?php if ( $modules == 6 ) echo ' selected="selected"'; ?>>6 модулей</option>
        <option value="8" <?php if ( $modules == 8 ) echo ' selected="selected"'; ?>>8 модулей</option>
        </select>
        <select id="fibers" name="fibers" size="1" onchange="submit()">
        <option value="1" <?php if (( $fibers == 0 ) or ($fibers == 1)) echo ' selected="selected"'; ?>>1 Волокно</option>
        <option value="2" <?php if ( $fibers == 2 ) echo ' selected="selected"'; ?>>2 Волокна</option>
        <option value="4" <?php if ( $fibers == 4 ) echo ' selected="selected"'; ?>>4 Волокна</option>
        <option value="8" <?php if ( $fibers == 8 ) echo ' selected="selected"'; ?>>8 Волокон</option>
        <option value="12" <?php if ( $fibers == 12 ) echo ' selected="selected"'; ?>>12 Волокон</option>
        <option value="16" <?php if ( $fibers == 16 ) echo ' selected="selected"'; ?>>16 Волокон</option>
        <option value="24" <?php if ( $fibers == 24 ) echo ' selected="selected"'; ?>>24 Волокна</option>
        </select><br>
        <select id="fibcolor" name="fibcolor" size="1" onchange="submit()">
        <option <?php if ( $fibcolor == 0 ) echo ' selected="selected"'; ?>>Выберите раскладку волокон</option>
<!--        Здесь будет добавлен выбор раскладки вариантами для выбранного количества волокон-->
<?php
        $link = mysqli_connect($host, $user, $pass, $base);
        $id=1;
        if ($result = mysqli_query($link, 'SELECT * FROM fibcolor ORDER BY id')) {
                        while( $row = mysqli_fetch_assoc($result) ){
                                // цикл вычитки таблицы, пока есть строки
                                // $row - строка из базы, массив
                        if ($row['colcolors']==$fibers){            // Если количество волокон совпадает
                                $array[$id] = $row['name'];             // в массив под номером id вносим псевдоним набора
                        }
                        $id=$id+1;                                  //  наращиваем счётчик строк
                                };
        };
        mysqli_close($link);
// Выборка по количеству волокон завершена, выводим список
foreach($array as $id => $name) {                       // Пока есть значения в массиве делаем строки списка
        if ($fibcolor==$id) {                               // Если строка выбрана
        echo " <option value=".$id.' selected="selected" >'.$name."</option>";       // то выбираем

} else {
        echo " <option value=".$id.">".$name."</option>";   // Или нет, если нет
}
}
?>
        </select>


        <input id="edit" name="edit" type="submit" value="Изменить">

</form>
</div>


</BODY>
</html>
  • Окей, то есть Вы проверяете $_POST['type']<>"" и получается что если $_POST['type'] != '', то Вы определяете переменную $type, ниже Вы проверяете $type=="", но саму переменную $type Вы определяете только когда значение в $_POST['type'] != '', не находите здесь никакого противоречия? Это же касается и всех остальных проверок. – Simon Feb 10 '24 at 22:07
  • Нет, противоречий не нахожу. Формы, по факту, работают в цикле. То есть при выборе варианта типа кабеля в выпадающем меню переменная $type получает значение по пришитому к селектору событию submit(). Это всё работает! Не работает оно, если раскомментировать три строки с присвоением значений параметров из массива, полученные из БД. Зато эти значения прекрасно включаются в форме.. Я же подробно расписал в посте, чего хочу добиться..И да, проверка $type на равенство '' - это в данный момент не работающий модуль и к делу не относится, ни на что не влияет. – Mihundrik Feb 11 '24 at 08:24
  • Вот об этих строках речь: // $modules=$arrayModules[$id]; // И назначаем старые данные // $fibers=$arrayFibers[$id]; // ..загруженные в массив из базы // $fibcolor=$arrayFibcolor[$id]; // ..для вывода стартовой позиции для изменения. – Mihundrik Feb 11 '24 at 08:27
  • 1
    На данный момент я вывел в блок div diagnostics, куда до этого результат выводился, все переменные- теперь отслеживаю их на каждом этапе. Так вот переменные $type и $id , главные в этой части кода, в принципе, возвращают пустые значения. Думаю, я на правильном пути:) Пользуясь твоей, Симон, ссылкой я понял, что юзаю Дедовский метод:) Ну, я и есть дед, если подумать - я начинал "кодить" на бейсике лет 25 назад. А вот сейчас решил за php взяться. – Mihundrik Feb 11 '24 at 09:27

0 Answers0