Я хочу отправить форму и сказать, что она прошла успешно, и остаться на той же странице - PullRequest
0 голосов
/ 26 июня 2018

Вот мой файл lockcheckoutbeta.php для информации, вводимой в

<!DOCTYPE html>
<html>
<head>
<link href="lockproject.css" type="text/css" rel="stylesheet">
 <title>Locks Out Form</title>
 <h1>Facilities Departmental Lock Checkout Entry Form </h1>
 </head>
 <body>
 <h3> *All fields must be populated </h3>
 <form action="insert.php" method="post">
 <table style="width:100%">
 <thead>
<tr>
 <th>Lock Number</th>
 <th>Equipment # or description:</th>
<th>Work Order #:</th>
<th>Date OUT::</th>
<th>Supervisor Inital OUT:</th>
<th>Comments/Tradesmen:</th>
</tr>
</thead>
<tbody>
<td>
    <input type="text" name="lock_number" id="locknumber" 
  required="required">
    </td>
<td>
    <input type="text" name="equipment_number" id="equipmentnumber" 
 required="required">
</td>
<td>
    <input type="text" name="work_order" id="workorder" required="required">
</td>
<td>
    <input type="date" name="date_out" id="dateout" required="required">
</td>
<td>
    <input type="text" name="supervisor_out" id="supervisorout" 
required="required">
</td>
<td>
    <input type="text" name="comments_out" id="commentsout" 
required="required">
 </td>
 </tbody>
 </table>       
<input type="submit" value="Submit" >
 <br><br>
  <a href="http://152.116.203.115/lockcheckin2.php" target="_blank">Lock 
  Check 
  In 
  Form</a>
  <a href="http://152.116.203.115/dataout.php" target="_blank">Lock Check Out 
   History</a>
  </body>
  </html>

Вот мой файл insert.php, который я пытаюсь получить, чтобы вернуть сообщение об успешной отправке, но остаюсь по тому же URL.

<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "nick", "ramon", "lockout");

// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}

// Escape user inputs for security
$lock_number = mysqli_real_escape_string($link, $_REQUEST['lock_number']);
$equipment_number = mysqli_real_escape_string($link, 
$_REQUEST['equipment_number']);
$work_order = mysqli_real_escape_string($link, $_REQUEST['work_order']);
$date_out = mysqli_real_escape_string($link, $_REQUEST['date_out']);
$supervisor_out = mysqli_real_escape_string($link, 
$_REQUEST['supervisor_out']);
$comments_out = mysqli_real_escape_string($link, $_REQUEST['comments_out']);
$date_in = mysqli_real_escape_string($link, $_REQUEST['date_in']);
$supervisor_in = mysqli_real_escape_string($link, 
$_REQUEST['supervisor_in']);


 // attempt insert query execution
 $sql = "INSERT INTO form (lock_number, equipment_number, work_order, 
 date_out, 
  supervisor_out, comments_out, date_in, supervisor_in) VALUES 
   ('$lock_number','$equipment_number', '$work_order', '$date_out', 
 '$supervisor_out', '$comments_out', '$date_in', '$supervisor_in')";
 if(mysqli_query($link, $sql)){
 echo "Submit Successful";
sleep(1); 
header("location: index.php");
header("Location:http://152.116.203.115/lockcheckoutbeta.php");
} 
else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
 }

// close connection
mysqli_close($link);
?>

Я просто хочу, чтобы всплывающее сообщение сообщало об успешной отправке, а затем об очистке полей, чтобы в поля можно было ввести другой пример блокировки. Если бы кто-то мог помочь мне, это было бы здорово! Спасибо.

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Лучший способ сделать это - разместить HTML и PHP на одной странице. Это облегчает. Когда мы запрашиваем веб-страницу, браузер использует метод GET. Поскольку вы используете метод POST в своей форме, вы можете добавить как PHP, так и HTML-код на одной странице следующим образом.

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
   // handle the form
}
?>
<!-- now add the html -->

Обратите внимание, что ваша форма должна иметь пустой атрибут действия, чтобы браузер отправлял на ту же страницу

<form method="POST" action="">
    <!-- form elements -->
</form>

См. Демо

Кроме того, есть много преимуществ использования этой техники.

  1. Вы можете хранить весь код на одной странице.
  2. Вы можете создавать липкие формы, которые сохраняют ранее отправленные данные, если что-то пошло не так. Вот учебник
  3. Он автоматически показывает ту же страницу, что и вам.

Подробнее см. this .

0 голосов
/ 26 июня 2018

Прежде всего вы должны привести в порядок свой HTML. Вы не закрываете свои теги (теги form и input), и в вашей таблице нет строк. Ваша страница выглядит очень странно, когда я ее открываю.

Я очистил ваш html и добавил код javascript. Код использует jQuery. Если форма отправлена, обработчик вернет false, что предотвращает отправку формы. В то же время (асинхронный) ajax-запрос запускается и нацеливается на ваш php-файл. Он содержит входные данные в виде POST / GET данных в зависимости от атрибута method формы. Обратные вызовы success и error выполняются, если ajax завершен.

Примечание : Это, очевидно, здесь не работает, потому что нет insert.php.

Также вам нужно изменить insert.php. Не устанавливайте новый location -заголовок. Это испортит запрос AJAX. Просто распечатайте сообщение об ошибке или сообщение об успехе без перенаправления.

$(document).ready(function(){
	$('form').on('submit', function(){
		var data_array = $(this).serializeArray();
		var data = {};
		var method = $(this).attr('method');
		var action = $(this).attr('action');
		
		if(typeof method != 'string'){
			method = "POST";
		}
		if(typeof action != 'string'){
			action = window.location.href;
		}
		
		for(var i = 0; i < data_array.length; i++){
			data[data_array[i]["name"]] = data_array[i]["value"];
		}
		
		console.log(data);
		
		$.ajax(action, {
			data: data,
			// dataType: "html",
			success: function(rtrn){
				alert("Data inserted!");
			},
			error: function(){
				alert("Error, could not reach server '" + action + "'!");
			}
		});
		
		return false;
	});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h3> *All fields must be populated </h3>
<form action="insert.php" method="post">
  <table style="width: 100%;">
    <tr>
      <td>Lock Number</td>
      <td>
        <input type="text" name="lock_number" id="locknumber" required="required" />
      </td>
    </tr>
    <tr>
      <td>Equipment # or description:</td>
      <td>
        <input type="text" name="equipment_number" id="equipmentnumber" required="required" />
      </td>
    </tr>
    <tr>
      <td>Work Order #:</td>
      <td>
        <input type="text" name="work_order" id="workorder" required="required" />
      </td>
    </tr>
    <tr>
      <td>Date OUT::</td>
      <td>
        <input type="date" name="date_out" id="dateout" required="required" />
      </td>
    </tr>
    <tr>
      <td>Supervisor Inital OUT:</td>
      <td>
        <input type="text" name="supervisor_out" id="supervisorout" required="required" />
      </td>
    </tr>
    <tr>
      <td>Comments/Tradesmen:</td>
      <td>
        <input type="text" name="comments_out" id="commentsout" required="required" />
      </td>
    </tr>
  </table>       
  <input type="submit" value="Submit" />
  <br />
  <br />
  <a href="http://152.116.203.115/lockcheckin2.php" target="_blank">Lock Check In Form</a>
  <a href="http://152.116.203.115/dataout.php" target="_blank">Lock Check Out History</a>
</form>

Редактировать: Что этот код (в основном) делает

Ваш вопрос не является основным вопросом. Ваш опубликованный код - это "общий" способ работы веб-страниц и форм. Вы можете представить себе так:

  1. Пользователь находится на вашем бланке заявки на регистрацию блокировки в отделении учреждения страница
  2. Пользователь вводит значения для ваших входов и нажимает submit
  3. Клиент (= Пользователь) собирает данные во входах и находит в input.php
  4. input.php обрабатывает ваши входные данные
  5. input.php генерирует новый вывод html

Это означает, что если вы используете данные в input.php, ваш пользователь должен быть на веб-странице input.php! Нет абсолютно никакого способа выполнить файл php, если пользователь не открывает его. Таким образом, ваш пользователь должен иметь на странице input.php.

Решение, которое я предложил, использует ajax . Вы можете думать об этом как о «клоне» вашего пользователя. Он открывает страницу input.php в фоновом режиме. Вы не увидите html-вывод input.php (в визуализированном DOM). Итак, процедура теперь:

  1. Пользователь находится на вашем бланке заявки на регистрацию блокировки в отделении учреждения страница
  2. Пользователь вводит значения для ваших входов и нажимает на submit
    1. Открывается ajax-соединение, «создается ваш клон»
    2. ajax («ваш клон») получает доступ к input.php с данными всех входов, ваш пользователь остается на бланке заявки для проверки ведомственной блокировки страница
    3. input.php обрабатывает ваши входные данные
    4. input.php генерирует новый вывод html
    5. ajax ("пользовательский клон") получает выходные данные и отправляет их вашему реальному пользователю
  3. Реальный пользователь получает результат input.php от ajax, он все еще находится на бланке заявки на проверку ведомственной блокировки объектов страница

Этот код не является основным HTML-кодом. Если вы все еще учитесь, не используйте этот код.

Кодовое предложение

Для вас, как для новичка, я предлагаю другой код. Измените ваш input.php, чтобы он мог обрабатывать данные, а также отображать правильный HTML. Следующий код генерирует HTML, который вы хотите. Кроме того, он проверяет, была ли отправлена ​​форма.

Если пользователь нажмет на кнопку отправки, форма перезагрузит текущую страницу. $_REQUEST заполнены, поэтому значения будут сохранены. Затем выводится сообщение об успехе или ошибке. После этого ваш оригинальный HTML будет сгенерирован снова, поэтому пользователь увидит ту же страницу с сообщением об успехе. Если вы хотите иметь другую файловую структуру, взгляните на php's require function .

Примечание : Я немного изменил ваш php-код. Многие фрагменты кода, которые я использовал, являются личным вкусом. Мне нравится иметь операторы вставки в массиве, потому что, на мой взгляд, это очень чистый код. Также я по-своему исправил твои новые линии и стиль табуляции.

Также я удалил date_in и supervisor_in, потому что нет никаких полей ввода, определяющих эти значения. Вы тоже должны это исправить.

Следующий код должен работать для вас:

<!DOCTYPE html>
<html>
    <head>
        <link href="lockproject.css" type="text/css" rel="stylesheet">
        <title>Locks Out Form</title>
    </head>
    <body>
        <?php
            // check if the form is being submitted
            if( isset($_REQUEST['lock_number']) && isset($_REQUEST['equipment_number']) && 
                isset($_REQUEST['work_order']) && isset($_REQUEST['date_out']) && 
                // isset($_REQUEST['date_in']) && isset($_REQUEST['supervisor_in']) &&
                isset($_REQUEST['supervisor_out']) && isset($_REQUEST['comments_out'])){
                    // opening connection
                    $link = mysqli_connect("localhost", "nick", "ramon", "lockout");

                    // Check connection
                    if($link === false){
                        die("ERROR: Could not connect. ".mysqli_connect_error());
                    }

                    // prepare insert statement, the indices are the column names of your table, the values are 
                    // the corresponding values to insert
                    $insert = array(
                        'lock_number' => mysqli_real_escape_string($link, $_REQUEST['lock_number']),
                        'equipment_number' => mysqli_real_escape_string($link, $_REQUEST['equipment_number']),
                        'work_order' => mysqli_real_escape_string($link, $_REQUEST['work_order']),
                        'date_out' => mysqli_real_escape_string($link, $_REQUEST['date_out']),
                        // 'date_in' => mysqli_real_escape_string($link, $_REQUEST['date_in']),
                        // 'supervisor_in' => mysqli_real_escape_string($link, $_REQUEST['supervisor_in']),
                        'supervisor_out' => mysqli_real_escape_string($link, $_REQUEST['supervisor_out']),
                        'comments_out' => mysqli_real_escape_string($link, $_REQUEST['comments_out'])
                    );

                    // add quotes
                    $insert = array_map(function($value){
                        return "'".$value."'";
                    }, $insert);

                    // prepare sql
                    $sql = 
                        "INSERT INTO `form` (".implode(", ", array_keys($insert)).") ".
                        "VALUES (".implode(", ", $insert).");";

                    // print success/error message
                    if(mysqli_query($link, $sql)){
                        echo "Submitted successfully.";
                    } 
                    else{
                        echo "ERROR: Could not execute query. ".mysqli_error($link);
                    }

                    // close connection
                    mysqli_close($link);
            }
        ?>
        <h1>Facilities Departmental Lock Checkout Entry Form </h1>
        <div>*All fields must be populated</div>
        <form method="post">
          <table style="width: 100%;">
            <tr>
              <td>Lock Number</td>
              <td>
                <input type="text" name="lock_number" id="locknumber" required="required" />
              </td>
            </tr>
            <tr>
              <td>Equipment # or description:</td>
              <td>
                <input type="text" name="equipment_number" id="equipmentnumber" required="required" />
              </td>
            </tr>
            <tr>
              <td>Work Order #:</td>
              <td>
                <input type="text" name="work_order" id="workorder" required="required" />
              </td>
            </tr>
            <tr>
              <td>Date OUT::</td>
              <td>
                <input type="date" name="date_out" id="dateout" required="required" />
              </td>
            </tr>
            <tr>
              <td>Supervisor Inital OUT:</td>
              <td>
                <input type="text" name="supervisor_out" id="supervisorout" required="required" />
              </td>
            </tr>
            <tr>
              <td>Comments/Tradesmen:</td>
              <td>
                <input type="text" name="comments_out" id="commentsout" required="required" />
              </td>
            </tr>
          </table>       
          <input type="submit" value="Submit" />
          <br />
          <br />
          <a href="lockcheckin2.php" target="_blank">Lock Check In Form</a>
          <a href="dataout.php" target="_blank">Lock Check Out History</a>
        </form>
    </body>
</html>
0 голосов
/ 26 июня 2018

Для формы вы можете установить action равным

<form method="post" action="">

or    

<form method="post" action="lockcheckoutbeta.php">

Тогда для PHP используйте isset вот так:

<?php if (isset($_POST['submit'])) {
    include 'insert.php';
} else {
    echo '
    
    <!DOCTYPE html>
<html>
<head>
<link href="lockproject.css" type="text/css" rel="stylesheet">
 <title>Locks Out Form</title>
 <h1>Facilities Departmental Lock Checkout Entry Form </h1>
 </head>
 <body>
 <h3> *All fields must be populated </h3>
 <form action="insert.php" method="post">
 <table style="width:100%">
 <thead>
<tr>
 <th>Lock Number</th>
 <th>Equipment # or description:</th>
<th>Work Order #:</th>
<th>Date OUT::</th>
<th>Supervisor Inital OUT:</th>
<th>Comments/Tradesmen:</th>
</tr>
</thead>
<tbody>
<td>
    <input type="text" name="lock_number" id="locknumber" 
  required="required">
    </td>
<td>
    <input type="text" name="equipment_number" id="equipmentnumber" 
 required="required">
</td>
<td>
    <input type="text" name="work_order" id="workorder" required="required">
</td>
<td>
    <input type="date" name="date_out" id="dateout" required="required">
</td>
<td>
    <input type="text" name="supervisor_out" id="supervisorout" 
required="required">
</td>
<td>
    <input type="text" name="comments_out" id="commentsout" 
required="required">
 </td>
 </tbody>
 </table>       
<input type="submit" value="Submit" >
 <br><br>
  <a href="http://152.116.203.115/lockcheckin2.php" target="_blank">Lock 
  Check 
  In 
  Form</a>
  <a href="http://152.116.203.115/dataout.php" target="_blank">Lock Check Out 
   History</a>
  </body>
  </html>
    
    ';
0 голосов
/ 26 июня 2018

Добавьте полное insert.php в самом начале lockcheckoutbeta.php, используя это:

<?php include('insert.php') ?>

Внутри insert.php проверьте, установлена ​​ли кнопка отправки (добавьте name="lock_user" во входной тег отправки), используя:

if (isset($_POST['lock_user']))

изменить <form action="lockcheckoutbeta.php" method="post">

Что я в основном сделал, так это вставил полный файл insert.php в начале. Этот файл будет работать, только если установлена ​​кнопка отправки. Таким образом, после нажатия кнопки отправки вы будете перенаправлены на тот же URL-адрес, но отобразите файл insert.php. Надеюсь, это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...