【问题标题】:My php code is not updating my database我的 php 代码没有更新我的数据库
【发布时间】:2018-04-09 01:15:34
【问题描述】:

我一直在尽一切努力让它发挥作用。当我点击提交按钮时,没有任何反应。它只是坐在那里。

我有 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 用作您的个人调试器。仅供参考,使用 jQuery 上下文时使用 .val() 方法
  • 使用 $("#title").val(); 从 HTML 中获取价值。年份、导演、性别和运行时间相同。
  • $_POST['title11']
  • 您的代码可能容易受到 sql 注入攻击:stackoverflow.com/questions/60174/…
  • addslashes 对防止 SQL 注入几乎没有作用。

标签: javascript php html mysql database


【解决方案1】:

我的回答是基于您的 Javascript 函数 passData() 位于文件 refreshForm.js 中的假设。

这里有一些问题。

无法调用 Javascript 函数,因为它在另一个文件中声明

每个.js 文件都有自己的范围。解决此问题的最简单方法是将 passData() 函数分配给全局范围。这是最快的方法,但请注意还有更好的方法,例如 export

onclick调用Javascript函数不会阻止整个表单提交

您的函数被调用,但随后 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;
};

接下来,将 HTML 中的 onclick 处理程序更改为 onclick="return passData(event);"

【讨论】:

  • 我尝试了您的建议,但没有成功。该按钮也是按钮类型,而不是提交。如果我将相同的代码放在我的 html 文件中,它就可以工作。我至少收到了警报消息,但它没有执行 php 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2021-10-27
相关资源
最近更新 更多