За последние 24 часа нас посетили 37819 программистов и 7849 роботов. Сейчас ищут 1777 программистов ...

Выполнить функцию по кнопке

Тема в разделе "PHP для новичков", создана пользователем ФAtmel, 10 ноя 2022.

  1. ФAtmel

    ФAtmel Новичок

    С нами с:
    12 мар 2021
    Сообщения:
    6
    Симпатии:
    0
    Приветствую форумчан!
    Помогите с реальной задачей, плиз! В комментах уточнения, а в целом требуется проверить наличия АРМ в БД (это выполнено) и если есть, спросить оператора - а ты уверен, что не ошибся с именем хоста? Если он подтверждает, то выполнить функцию (ввод в домен, это решено).
    Кнопки не отрабатывают или отрабатывают неверно, весь инет облазил, но аякс не понял пока, и вообще, чета не выходит.

    Код (Text):
    1. <html>
    2. <head>
    3.     <title>Форма ввода нового АРМ</title>
    4. <meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
    5. </head>
    6.  
    7. <body>
    8. <!-- ID INT  , hostname varchar(100) NOT null , username varchar(100), dep varchar(30)  , osver varchar(30) -->
    9. <form name="parameters" method="POST" action="111.php">
    10.     <label>Доменное имя АРМ: <input type="text" name="hostname"></label>
    11.     <label>Имя пользователя: <input type="text" name="username"></label>
    12.     <label>Подразделение:  <input type="text" name="dep"></label>
    13.     <input type="submit" name="send" value="Отправить">
    14. </form>
    15. </body>
    16. </html>
    ------------------------
    Файл addhost.php
    Код (Text):
    1. <?php
    2. # передаваемые данные АРМ
    3. $hostname = $_POST['hostname']; $hostusername = $_POST['username']; $dep = $_POST['dep'];
    4.  
    5. if(!isset($_POST['hostname']) || !isset($_POST['username']) || !isset($_POST['dep']) || trim($hostname) == '' || trim($hostusername) == '' || trim($dep) == '' ) {
    6.     echo "Не все данные введены<br><br>"; # контроль ввода пустых значений
    7. } else {
    8.  
    9.    #... опрос БД на предмет наличия в БД
    10.  
    11.     if($_POST['hostname']){
    12.  
    13.     $tsql = "select  hostname  from hosts_tbl where hostname = '" . $hostname . "'";
    14.     $result = $conn->query($tsql);
    15.     $row = $result->fetch_assoc();
    16.  
    17.     if($row['hostname'] and !isset($_POST['someAction'])) {
    18.  
    19.         echo "БД уже содержит hostname " . $row['hostname'] . "  "  . "<br>";
    20.         # Здесь нужно вставить форму диалога (кнопки?) - если "да", то выполнить функцию, нет - вернуться на input.html
    21.         # но при нажатии на кнопки типа button ничего не делают, а submit вызывает при перезугрузке страницы"Не все данные введены". Как сделать на аяксе, я не знаю.
    22.         # Все ниже обнуляет переменные POST    
    23.         $url = 'addhost.php';
    24.         ?>
    25.         <!-- <form action="addhost.php" method="post">
    26.             <input type="submit" name="someAction" value="Да, ввести" />
    27.         </form> -->
    28.    
    29.         <form action="addhost.php" method="post">
    30.             <a href="#" onclick="parentNode.submit();">Кнопка для вызова функции</a>
    31.             <input type="hidden" name="еее" value="'.url.'"/>
    32.         </form>
    33.         <?php
    34.         #Другой вариант тоже не
    35.         #echo "<form method='POST' name='test5' action='addho.php?hostname=" . $_REQUEST["hostname"] . "'><input type='submit' name='ttt' value='Кнопка для вызова функции'></form>"; #
    36.     }
    37.     else {
    38.         # Функция! (ввод в БД и выполнение операций над контролируемым АРМ, функция готова)
    39.  
    40.     }
    41. }
    42.  
    43. }
    44.  
    45. ?>
     
  2. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Что данные? Поступают на сервер?
     
  3. ФAtmel

    ФAtmel Новичок

    С нами с:
    12 мар 2021
    Сообщения:
    6
    Симпатии:
    0
    При переходе со странички html на addhost.php данные через переменные POST передаются - если АРМ с таким именем уже есть в БД, выдается предупреждение "БД уже содержит $hostname, а если нет, то выполняется ветка else ( ввод в домен и запись в БД, здесь все ок). Но после выдачи предупреждения нужно по решению оператора либо продолжить то, что в ветке else - Функция! (ввод в БД и выполнение операций над контролируемым АРМ через ансибл). И вот в этом случае у меня не получается успешно выполнить это.
     
  4. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Приведи те строки, где кончается нормальная работа какая строка не работает
    --- Добавлено ---
    Ты написал функцию?
     
  5. ФAtmel

    ФAtmel Новичок

    С нами с:
    12 мар 2021
    Сообщения:
    6
    Симпатии:
    0
    Вот это все не работает
    Код (Text):
    1.         $url = 'addhost.php';
    2.         ?>
    3.         <!-- <form action="addhost.php" method="post">
    4.             <input type="submit" name="someAction" value="Да, ввести" />
    5.         </form> -->
    6.  
    7.         <form action="addhost.php" method="post">
    8.             <a href="#" onclick="parentNode.submit();">Кнопка для вызова функции</a>
    9.             <input type="hidden" name="еее" value="'.url.'"/>
    10.         </form>
    11.         <?php
    12.         #Другой вариант тоже не
    13.         #echo "<form method='POST' name='test5' action='addho.php?hostname=" . $_REQUEST["hostname"] . "'><input type='submit' name='ttt' value='Кнопка для вызова функции'></form>";
    Я попробовал таким образом перезагрузить страницу, а она уже 404.

    Пробовал также по кнопке выполнять функцию, но по нажатию кнопки функция (упрощенная для теста - вывод контрольная текста - ничего не выполняется
    function control() {
    echo "Функция выполнена";
    }) ,
    --- Добавлено ---
    Во так еще попробовал, после нажатия на кнопку - теперь получаю по нажатия на кнопку "Да, подтверждаю" "Не все данные введены", хотя в форме поля заполнены значениями value="<?php echo $... ?>
    -
    Код (Text):
    1. <?php
    2. # передаваемые данные АРМ
    3. $hostname = $_POST['hostname']; $hostusername = $_POST['username']; $dep = $_POST['dep'];
    4. if(!isset($_POST['hostname']) || !isset($_POST['username']) || !isset($_POST['dep']) || trim($hostname) == '' || trim($hostusername) == '' || trim($dep) == '' ) {
    5.     echo "Не все данные введены<br><br>"; # контроль ввода пустых значений
    6. } else {
    7.    #... опрос БД на предмет наличия в БД
    8.     if($_POST['hostname']){
    9.     $tsql = "select  hostname  from hosts_tbl where hostname = '" . $hostname . "'";
    10.     $result = $conn->query($tsql);
    11.     $row = $result->fetch_assoc();
    12.     if($row['hostname'] and !isset($_POST['someAction'])) {
    13.         echo "БД уже содержит hostname " . $row['hostname'] . "  "  . "<br>";
    14.         # Здесь нужно вставить форму диалога ?>
    15.         <form name="parameters" method="POST" action="addhost.php">
    16.             <label>Доменное имя АРМ: <input type="text" name="hostname" value="<?php echo $hostname ?>"</label>
    17.             <label>Имя пользователя: <input type="text" name="username" value="<?php echo $hostusername ?>"</label>
    18.             <label>Подразделение:  <input type="text" name="Подразделение:" value="<?php echo $dep ?>"</label>
    19.             <br><br>
    20.             <input type="submit" name="send" value="Да, действие подтверждаю">
    21.  
    22.  
    23.         </form>
    24.         <br><br><p><a href='http://10.0.0.246/ans/input.html' target='_blank'>Вернуться</a></p>
    25. <?php
    26.     }
    27. }
    28. }
    29. ?>
     
    #5 ФAtmel, 11 ноя 2022
    Последнее редактирование: 11 ноя 2022
  6. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    У тебя из двух форм одна закомментирована. Может ее раскомментировать , а вторую наоборот?
    Вообще убери из файла лишнее в блокнот или в другой файл. Оставляй только то что нужно. Проверяй , добавляя по немногу. Твоя проблема в том, что ты много лишнего вставляешь в код.
    Комментируй, что ты делаешь при каждом действии. Строки длинные. Переноси на другую строчку - читать трудно. Вынеси форму в отдельный файл form.php и подключи в нужном месте
    require_once("form.php");
     
    #6 antoniii, 11 ноя 2022
    Последнее редактирование: 11 ноя 2022
  7. ФAtmel

    ФAtmel Новичок

    С нами с:
    12 мар 2021
    Сообщения:
    6
    Симпатии:
    0
    Ок, хорошо, сокращу алгоритм до упрощенного вида

    стр. input.html
    Код (Text):
    1. <html>
    2. <head>
    3.     <title>Форма ввода нового АРМ</title>
    4. <meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
    5. </head>
    6. <body>
    7. <form name="parameters" method="POST" action="addhost.php">
    8.     <label>Доменное имя АРМ: <input type="text" name="hostname"></label>
    9.     <input type="submit" name="send" value="Отправить">
    10. </form>
    11. </body>
    12. </html>
    Вызываемая из input.html стр. addhost.php
    Код (Text):
    1. <?php
    2. # передаваемое из input.html имя АРМ
    3. $hostname = $_POST['hostname'];
    4. if(!isset($_POST['hostname']){
    5.     echo "Не все данные введены<br><br>"; # контроль ввода пустых значений
    6.     #вернуться на страницу input.html
    7. } else {
    8.    #... опрос БД на предмет наличия в БД
    9.    # возвращает значение $row['hostname']
    10.     if($row['hostname']) {
    11.         echo "БД уже содержит hostname " . $row['hostname'] . "  "  . "<br>";
    12.         # Здесь нужно вставить форму диалога "продолжить?"
    13.         # Да - Выполнить функцию function inputARM()
    14.         # Нет - вернуться на страницу input.html
    15.     }
    16.     else {
    17.         # Выполнить функцию function inputARM() ввода в БД и выполнение операций над контролируемым АРМ,
    18.         #функция написана, работает, здесь опущена)
    19.     }
    20. }
    21. }
    22.  
    23. ?>
     
  8. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Теперь начинай вставлять код под комментариями по одному кусочку и проверяй как работает каждый кусок. Дойдешь до неправильного результата - найдешь ошибку. Используй вставку файлов вместо увеличения одного файла. require("имя файла");
    например
    if (условие){
    require("form.php");
    }
    else
    {
    require("другой файл");
    }
    Конструкция будет понятной и простой.