Итак, у меня есть эта форма для добавления человека в базу данных:
<div id = "formDiv">
<form id = "form1" method = "post" action = "#">
<input type = "text" name = "title" placeholder = "Title">
<br>
<input type = "text" name = "firstname" placeholder = "First Name">
<br>
<input type = "text" name = "lastname" placeholder = "Last Name">
<br>
<input type = "text" name = "group" placeholder = "Group">
<br>
<input type = "text" name = "company" placeholder = "Company">
<br>
<select name = "sex" required>
<option value = "" disabled selected>Sex/option>
<option value = "male">male</option>
<option value = "female">female</option>
</select>
<br>
<button type = "submit" id = "insert" name = "insert">Insert</button>
</form>
</div>
И файл php, который обрабатывает вставку данных в базу данных:
<?php
include($_SERVER['DOCUMENT_ROOT'].'/website/dbConnection.php');
include($_SERVER['DOCUMENT_ROOT'].'/website/administrator/components/com_backend/backend.php');
if (isset($_POST['insert'])){
$title = $_POST['title'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$group = $_POST['group'];
$company = $_POST['company'];
$sex = $_POST['sex'];
if ($sex == "male"){
$sex = 0;
}
else{
$sex = 1;
}
$query = "INSERT INTO members (Title, Firstname, Lastname, Group, Company, Sex)
VALUES('$title', '$firstname', '$lastname', '$group', '$company', '$sex')";
mysqli_query($GLOBALS['connect'], $query);
}
Я знаю, что между двумя файлами существует проблема. Потому что 2-й файл не получает POST от 1-го файла.
Когда я использую первый файл и нажимаю кнопку отправки, он перезагружает страницу и ничего не вводит в базу данных.
Когда я перехожу непосредственно ко второму файлу, я могу использовать форму, так как я включаю первый файл. Итак, я заполняю форму, нажимаю кнопку отправки и, как по волшебству, там все работает!
Я проверял путь при включении 1-го файла 100 раз. Это верно. Я 100 раз проверял путь при подключении к базе данных. Это верно. Я выполнил запрос прямо в своей базе данных. Это верно.
Я предполагаю, что совершил небольшую ошибку, которую не могу заметить, но код настолько мал и прост, что это просто невозможно.
я думаю, тебе следует перезапустить свой сервер
Ваш php ожидает поле формы с именем insert, но кнопка без атрибута value не отправляет значение на сервер, поэтому условие if (isset($_POST["insert"])) не выполняется.






<form id = "form1" method = "post" action = "your_php_file.php">
Это укажет на ваш php-файл и отправит запрос POST от вашего внешнего интерфейса к внутреннему. Согласно вашему коду, вы ничего не отправляете в свой php файл. Таким образом, код, который у вас есть, может работать, но ваш запрос никогда не отправляется в ваш php-файл, поэтому в базу данных ничего не помещается.
Редактировать
Чтобы не перезагружать страницу, как вы просили, вы не должны отправлять форму, но вы должны сделать ajax-вызов на стороне сервера.
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<div id = "formDiv">
<input type = "text" name = "title" placeholder = "Title">
<br>
<input type = "text" name = "firstname" placeholder = "First Name">
<br>
<input type = "text" name = "lastname" placeholder = "Last Name">
<br>
<input type = "text" name = "group" placeholder = "Group">
<br>
<input type = "text" name = "company" placeholder = "Company">
<br>
<select name = "sex" required>
<option value = "" disabled selected>Sex/option>
<option value = "male">male</option>
<option value = "female">female</option>
</select>
<br>
<button type = "button" id = "insert" name = "insert">Insert</button>
</div>
<script>
$( "#insert" ).click(function() {
let title = $("input[name=title]").val();
let firstname = $("input[name=firstname]").val();
let lastname = $("input[name=lastname]").val();
let group = $("input[name=group]").val();
let company = $("input[name=company]").val();
let sex = $("input[name=sex] option:selected").text();
$.ajax({
method: 'POST',
url: 'your_php_file.php',
data: {'title': title, 'firstname': firstname, 'lastname': lastname, 'group': group, 'company': company, 'sex': sex},
success: function (response) {
console.info(works)
},
error: function (jqXHR, textStatus, errorThrown) {
console.info(JSON.stringify(jqXHR));
console.info("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});
})
</script>
Таким образом, данные будут отправлены на ваш сервер, и вы сможете обрабатывать их так же, как и вы. Он в формате json, поэтому не забудьте при необходимости декодировать.
Да, я думал об этом, но проблема в том, что затем он переходит к этому файлу в браузере. Я хотел бы отправить запрос, но оставайтесь на месте. Как это сделать?
@ w00ds98, затем используйте концепцию отправки формы ajax
Это другое дело. В этом случае вам понадобится ajax, если вы не хотите, чтобы ваша страница обновлялась.
О, так я использую неправильную технологию. Да, я работаю с Ajax на своем веб-сайте, но предполагал, что это будет работать без перехода на другую страницу. Спасибо! Я буду гуглить!
Я отредактирую свой ответ, чтобы дать вам подсказку, как это должно быть.
<div id = "formDiv">
<form id = "form1" method = "post" action = "#">
<input type = "text" name = "title" placeholder = "Title">
<br>
<input type = "text" name = "firstname" placeholder = "First Name">
<br>
<input type = "text" name = "lastname" placeholder = "Last Name">
<br>
<input type = "text" name = "group" placeholder = "Group">
<br>
<input type = "text" name = "company" placeholder = "Company">
<br>
<select name = "sex" required>
<option value = "" disabled selected>Sex/option>
<option value = "0">male</option>
<option value = "1">female</option>
</select>
<br>
<button type = "submit" id = "insert" name = "insert">Insert</button>
</form>
</div>
<script>
$('#form1').submit(function (e) {
e.preventDefault();
var senddata = $(this).serializeArray();
var sendto = $(this).attr("action");
$.ajax({
url: sendto,
type: 'POST',
data: senddata,
success: function (data) {
$('.messages').html(data);
},
error: function (error) {
$('.messages').html(error);
}
});
});
</script>
вы можете отправлять пол в виде значений: <option value = "0"> male </option> <option value = "1"> female </option>