Мой php-код не обновляет мою базу данных

Я пробовал все, чтобы это работало. Когда я нажимаю кнопку отправки, ничего не происходит. Он просто сидит там.

У меня есть html-вызов javascript, который отправляет данные в файл php, чтобы веб-страница не обновлялась. Мне просто нужно сообщение об успешном выполнении и обновление базы данных.

Но когда я нажимаю «Отправить», база данных не обновляется, и сообщения об успешном выполнении не появляются. Я проверял это снова и снова. Я звоню им неправильно? Пожалуйста помоги!

function passData() {
	//getting values from HTML
	var title= $("#title").value;
	var year= $("#year").value;
	var director= $("#director").value;
	var genre= $("#genre").value;
	var runtime= $("#runtime").value;

	if (title == '' || year == '' || director == '' || genre == '' || runtime == '') {
		alert("Please fill all fields");
	} else {
		// AJAX code to submit form.
		$.ajax({
			type: "POST",
			url: "insert_DVD.php",
			data: {
				title1: title,
				year1: year,
				director1: director,
				genre1: genre,
				runtime1: runtime},
			cache: false,
			success: function(html) {
				alert(html);
			}
		});
	}
	return false;
}
<?php
//getting values from JS
$title = $_POST['title11'];
$year = $_POST['year1'];
$director = $_POST['director1'];
$genre = $_POST['genre1'];
$runtime = $_POST['runtime1'];

$title = addslashes($title);
$director = addslashes($director);
$year = addslashes($year);
$genre = addslashes($genre);
$runtime = addslashes($runtime);

//connecting to server
$connection = mysql_pconnect($host,$user,$pass); 
if (!($db = mysql_select_db($database))) 
   echo "<p> could not connect to database </p><br>");

//open database
if (!mysql_select_db($table,$db)) 
   echo "<p> could not open collection database </p><br>"); 
 
//insert query
if (isset($_POST['title1'])) {
	$query = "INSERT INTO `collection` (`title` , `year` , `director` , `genre` , `runtime` ) VALUES ('$title', '$year', '$director', '$genre', '$runtime')";
	if (!$results = mysql_query($query, $db){
		print("<p> could not excute query </p>");
	} else {
		echo "succuess";
	}
}else {
	echo "Something went wrong";
}

//close connection
mysql_close($connection); 
?>
<!DOCTYPE html>
<html>
  <head>
	<meta charset = "utf-8">
	<title>test</title>
	<script type = "text/javascript" src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
	<script type = "text/javascript" src = "refreshForm.js"></script>
  <link rel = "stylesheet" href = "webpage.css">
  </head>
  <body class = "subStyle">	
	<form id = "form" method = "post">
		If there is more than one director, seperate with comma.
		<table border=0>
		<tr>
		<th>Movie Title</th>
		<th>Year Made</th>
		<th>Director</th>
		<th>Genre</th>
		<th>Runtime(Minutes)</th>
		</tr>
		
		<tr>
		<td><input type=text name = "title"    id = "title"    maxlength=100 size=30></td>
		<td><input type=text name = "year"     id = "year"     maxlength=4   size=10></td>
		<td><input type=text name = "director" id = "director" maxlength=100 size=30></td>
		<td><input type=text name = "genre"    id = "genre"    maxlength=20  size=20></td>
		<td><input type=text name = "runtime"  id = "runtime"  maxlength=4   size=20></td>
		</tr>
		
		<tr><td>
		<input type = "submit" id = "submit" name = "submit" onclick = "passData();" value = "Update Database"></td></tr>
		</table>
	</form>
	
	<div id = "results">
		<!-- All data will display here  -->
	</div>
   </body>
</html>

не соглашайтесь только на он просто сидит там, вам нужно знать, что происходит, первый шаг - заглянуть под капот, всегда открывать консоль разработчика при использовании JS, не используйте SO в качестве личного отладчика. FYI, используйте метод .val() при использовании контекста jQuery

Kevin 09.04.2018 03:21

Используйте $("#title").val();, чтобы получить выгоду от HTML. То же самое для года, директора, пола и времени выполнения.

Justinus Hermawan 09.04.2018 03:31
$_POST['title11'] <- опечатка
Karlo Kokkak 09.04.2018 03:36

Возможно, ваш код уязвим для инъекций sql: stackoverflow.com/questions/60174/…

Karlo Kokkak 09.04.2018 03:39
addslashes очень мало делает для предотвращения SQL-инъекции.
ceejayoz 09.04.2018 04:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
55
1

Ответы 1

Мой ответ основан на предположении, что ваша функция Javascript passData() находится внутри файла refreshForm.js.

Здесь есть несколько проблем.

Функцию Javascript нельзя вызвать, потому что она объявлена ​​в другом файле.

Каждый файл .js имеет свою собственную область видимости. Самый простой способ исправить это - назначить функцию passData() глобальной области видимости. Это самый быстрый способ, но учтите, что есть гораздо лучшие способы, например export.

Вызов функции Javascript из onclick не препятствует отправке всей формы

Ваша функция вызывается, но затем Javascript продолжает отправку формы, поскольку это поведение кнопки submit по умолчанию. Вам понадобится какой-то способ сообщить Javascript, чтобы предотвратить выполнение этого действия по умолчанию.

// refreshForm.js

window.passData = function (e) { // <-- Assign passData to the global scope
    e.preventDefault(); // <-- Tell Javascript to prevent the default action of form submission

    //getting values from HTML
    var title= $("#title").value;
    var year= $("#year").value;
    var director= $("#director").value;
    var genre= $("#genre").value;
    var runtime= $("#runtime").value;

    if (title == '' || year == '' || director == '' || genre == '' || runtime == '') {
        alert("Please fill all fields");
    } else {
        // AJAX code to submit form.
        $.ajax({
            type: "POST",
            url: "insert_DVD.php",
            data: {
                title1: title,
                year1: year,
                director1: director,
                genre1: genre,
                runtime1: runtime},
            cache: false,
            success: function(html) {
                alert(html);
            }
        });
    }
    return false;
};

Затем измените обработчик onclick в вашем HTML на onclick = "return passData(event);".

Я безуспешно опробовал ваше предложение. Также кнопка относится к типу кнопки, а не к отправке. Если я помещу тот же код в свой html-файл, он вроде работает. Я, по крайней мере, получаю предупреждающие сообщения, но он не выполняет вызов php.

Ruttle Head 10.04.2018 04:36

Другие вопросы по теме