Приветствую форумчан! Помогите с реальной задачей, плиз! В комментах уточнения, а в целом требуется проверить наличия АРМ в БД (это выполнено) и если есть, спросить оператора - а ты уверен, что не ошибся с именем хоста? Если он подтверждает, то выполнить функцию (ввод в домен, это решено). Кнопки не отрабатывают или отрабатывают неверно, весь инет облазил, но аякс не понял пока, и вообще, чета не выходит. Код (Text): <html> <head> <title>Форма ввода нового АРМ</title> <meta http-equiv="Content-Type" content="text/html"; charset="utf-8"> </head> <body> <!-- ID INT , hostname varchar(100) NOT null , username varchar(100), dep varchar(30) , osver varchar(30) --> <form name="parameters" method="POST" action="111.php"> <label>Доменное имя АРМ: <input type="text" name="hostname"></label> <label>Имя пользователя: <input type="text" name="username"></label> <label>Подразделение: <input type="text" name="dep"></label> <input type="submit" name="send" value="Отправить"> </form> </body> </html> ------------------------ Файл addhost.php Код (Text): <?php # передаваемые данные АРМ $hostname = $_POST['hostname']; $hostusername = $_POST['username']; $dep = $_POST['dep']; if(!isset($_POST['hostname']) || !isset($_POST['username']) || !isset($_POST['dep']) || trim($hostname) == '' || trim($hostusername) == '' || trim($dep) == '' ) { echo "Не все данные введены<br><br>"; # контроль ввода пустых значений } else { #... опрос БД на предмет наличия в БД if($_POST['hostname']){ $tsql = "select hostname from hosts_tbl where hostname = '" . $hostname . "'"; $result = $conn->query($tsql); $row = $result->fetch_assoc(); if($row['hostname'] and !isset($_POST['someAction'])) { echo "БД уже содержит hostname " . $row['hostname'] . " " . "<br>"; # Здесь нужно вставить форму диалога (кнопки?) - если "да", то выполнить функцию, нет - вернуться на input.html # но при нажатии на кнопки типа button ничего не делают, а submit вызывает при перезугрузке страницы"Не все данные введены". Как сделать на аяксе, я не знаю. # Все ниже обнуляет переменные POST $url = 'addhost.php'; ?> <!-- <form action="addhost.php" method="post"> <input type="submit" name="someAction" value="Да, ввести" /> </form> --> <form action="addhost.php" method="post"> <a href="#" onclick="parentNode.submit();">Кнопка для вызова функции</a> <input type="hidden" name="еее" value="'.url.'"/> </form> <?php #Другой вариант тоже не #echo "<form method='POST' name='test5' action='addho.php?hostname=" . $_REQUEST["hostname"] . "'><input type='submit' name='ttt' value='Кнопка для вызова функции'></form>"; # } else { # Функция! (ввод в БД и выполнение операций над контролируемым АРМ, функция готова) } } } ?>
При переходе со странички html на addhost.php данные через переменные POST передаются - если АРМ с таким именем уже есть в БД, выдается предупреждение "БД уже содержит $hostname, а если нет, то выполняется ветка else ( ввод в домен и запись в БД, здесь все ок). Но после выдачи предупреждения нужно по решению оператора либо продолжить то, что в ветке else - Функция! (ввод в БД и выполнение операций над контролируемым АРМ через ансибл). И вот в этом случае у меня не получается успешно выполнить это.
Приведи те строки, где кончается нормальная работа какая строка не работает --- Добавлено --- Ты написал функцию?
Вот это все не работает Код (Text): $url = 'addhost.php'; ?> <!-- <form action="addhost.php" method="post"> <input type="submit" name="someAction" value="Да, ввести" /> </form> --> <form action="addhost.php" method="post"> <a href="#" onclick="parentNode.submit();">Кнопка для вызова функции</a> <input type="hidden" name="еее" value="'.url.'"/> </form> <?php #Другой вариант тоже не #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): <?php # передаваемые данные АРМ $hostname = $_POST['hostname']; $hostusername = $_POST['username']; $dep = $_POST['dep']; if(!isset($_POST['hostname']) || !isset($_POST['username']) || !isset($_POST['dep']) || trim($hostname) == '' || trim($hostusername) == '' || trim($dep) == '' ) { echo "Не все данные введены<br><br>"; # контроль ввода пустых значений } else { #... опрос БД на предмет наличия в БД if($_POST['hostname']){ $tsql = "select hostname from hosts_tbl where hostname = '" . $hostname . "'"; $result = $conn->query($tsql); $row = $result->fetch_assoc(); if($row['hostname'] and !isset($_POST['someAction'])) { echo "БД уже содержит hostname " . $row['hostname'] . " " . "<br>"; # Здесь нужно вставить форму диалога ?> <form name="parameters" method="POST" action="addhost.php"> <label>Доменное имя АРМ: <input type="text" name="hostname" value="<?php echo $hostname ?>"</label> <label>Имя пользователя: <input type="text" name="username" value="<?php echo $hostusername ?>"</label> <label>Подразделение: <input type="text" name="Подразделение:" value="<?php echo $dep ?>"</label> <br><br> <input type="submit" name="send" value="Да, действие подтверждаю"> </form> <br><br><p><a href='http://10.0.0.246/ans/input.html' target='_blank'>Вернуться</a></p> <?php } } } ?>
У тебя из двух форм одна закомментирована. Может ее раскомментировать , а вторую наоборот? Вообще убери из файла лишнее в блокнот или в другой файл. Оставляй только то что нужно. Проверяй , добавляя по немногу. Твоя проблема в том, что ты много лишнего вставляешь в код. Комментируй, что ты делаешь при каждом действии. Строки длинные. Переноси на другую строчку - читать трудно. Вынеси форму в отдельный файл form.php и подключи в нужном месте require_once("form.php");
Ок, хорошо, сокращу алгоритм до упрощенного вида стр. input.html Код (Text): <html> <head> <title>Форма ввода нового АРМ</title> <meta http-equiv="Content-Type" content="text/html"; charset="utf-8"> </head> <body> <form name="parameters" method="POST" action="addhost.php"> <label>Доменное имя АРМ: <input type="text" name="hostname"></label> <input type="submit" name="send" value="Отправить"> </form> </body> </html> Вызываемая из input.html стр. addhost.php Код (Text): <?php # передаваемое из input.html имя АРМ $hostname = $_POST['hostname']; if(!isset($_POST['hostname']){ echo "Не все данные введены<br><br>"; # контроль ввода пустых значений #вернуться на страницу input.html } else { #... опрос БД на предмет наличия в БД # возвращает значение $row['hostname'] if($row['hostname']) { echo "БД уже содержит hostname " . $row['hostname'] . " " . "<br>"; # Здесь нужно вставить форму диалога "продолжить?" # Да - Выполнить функцию function inputARM() # Нет - вернуться на страницу input.html } else { # Выполнить функцию function inputARM() ввода в БД и выполнение операций над контролируемым АРМ, #функция написана, работает, здесь опущена) } } } ?>
Теперь начинай вставлять код под комментариями по одному кусочку и проверяй как работает каждый кусок. Дойдешь до неправильного результата - найдешь ошибку. Используй вставку файлов вместо увеличения одного файла. require("имя файла"); например if (условие){ require("form.php"); } else { require("другой файл"); } Конструкция будет понятной и простой.