Javascript 函数从JS发送到PHP
我试图传递删除记录的“隐藏”值。但是JS函数发送数据,但是mysql代码不起作用。 使用“insert to”可以工作,但奇怪的是,相同的代码不能工作Javascript 函数从JS发送到PHP,javascript,php,jquery,mysql,Javascript,Php,Jquery,Mysql,我试图传递删除记录的“隐藏”值。但是JS函数发送数据,但是mysql代码不起作用。 使用“insert to”可以工作,但奇怪的是,相同的代码不能工作 This is my code. <script type="text/javascript"> function invia() { var hides = document.getElementById('hide').value; $.ajax({
This is my code.
<script type="text/javascript">
function invia()
{
var hides = document.getElementById('hide').value;
$.ajax({
type: 'POST',
url: "note_db_php/delete_db_note.php",
data: {"hide": hides},
success: function(data){
console.log("Dati inviati");
},
error: function(data) {
console.log("Dati non inviati");
}
});
};
</script>
这是我的代码。
函数invia()
{
var hides=document.getElementById('hide').value;
$.ajax({
键入:“POST”,
url:“note_db_php/delete_db_note.php”,
数据:{“隐藏”:隐藏},
成功:功能(数据){
控制台日志(“Dati inviati”);
},
错误:函数(数据){
console.log(“Dati非inviati”);
}
});
};
这是删除页面
<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";
$hide = $_POST["hide"];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// sql to delete a record
$sql = "DELETE FROM note WHERE id='$hide'";
if ($conn->query($sql) === TRUE) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $conn->error;
}
$conn->close();
?>
我认为问题在于sql查询-$sql=“DELETE FROM note WHERE id=$hide”
你能把$hide放在单引号里试试吗
$sql=“从注释中删除,其中id='$hide'”//这将起作用这里是您的sql语法问题,还有一行
在这里输入代码
否则,请打开导致错误的代码
更新了这里的查询,它的工作
// sql to delete a record
$sql = "DELETE FROM note WHERE id='$hide'";
if ($conn->query($sql) === TRUE) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $conn->error;
}
缺少属性数据类型
,并且类型
应该是方法
$.ajax({
url:"note_db_php/delete_db_note.php",
method:'POST',
dataType:'json',
data:{
"hide": hides
},
success:function(data) {
console.log("Dati inviati");
},
error: function (request, status, error) {
console.log("Dati non inviati");
}
});
替换您的查询-
$sql=“从注释中删除,其中id='$hide'代码>
低于一个-
$sql = "DELETE FROM note WHERE id = ".$hide;
在ajax端,请控制您的数据。如果出现错误,请回显您的查询(回显$sql),然后在PHPMyAdmin中复制并运行查询。我不知道您的代码为什么不起作用——您没有详细描述您收到的错误消息。但您还有一个问题,就是您将自己置于SQL注入攻击的环境中,因此您应该使用一个准备好的语句。如果这也解决了您的问题(可疑),那么这是一个额外的好处:
$stmt = $conn->prepare("DELETE FROM note WHERE id=?");
/* Bind our parameter: */
$stmt->bind_param('i', $hide); // assuming $hide is an integer value, else use 's' for string
$success = $stmt->execute(); // execute the statement
if (!$success) {
error code here
}
$stmt->close();
它以什么方式“不起作用”?浏览器的开发控制台上是否存在JavaScript错误?在开发工具中,是否提出了AJAX请求?它是否包含您期望的数据?服务器的响应是什么?您的代码对SQL注入非常开放,那么实际执行的确切运行时查询是什么呢?您可以在发送AJAX请求之前先将console.log隐藏值,然后检查该值是否存在,或者是否传递空值。此外,隐藏值是字符串或整数类型?如果我处理请求并将1或1
作为hide
的值发送,您认为会发生什么?这是一个SQL注入的例子!我认为hide
的麻烦值应该是1'或'1
,这会产生:从注释中删除id='1'或'1'
。但@Wiimm的要点是,您需要使用预先准备好的语句,否则您将面临SQL注入攻击。在本例中,有意或无意输入的“错误”值将导致删除所有行(假设其余代码正常工作)。似乎您发布了敏感/私人信息。请重置您的密码和/或撤销API密钥和令牌,因为它们在发布到internet时被视为已被破坏。您到底更改了什么,为什么更改?请对你的答案进行编辑,添加一些解释,以便其他人可以从中学习。不,问题仍然存在,我不明白,它可以工作的代码,但是使用函数时不要删除。但删除页面工作。您能否提供页面链接,以便我们检查或完成您如何调用函数的代码,以及调试中出现的错误?直到你不会报告调试错误,我们将如何检查它,你只是投票反对所有的答案,如我所见,那么为什么这是必要的?问题是,我没有错误的消息,只是这段代码不删除数据库上的记录。这很奇怪,因为如果没有JS,它会工作@CarloPennetta:那么现在是进行调试的时候了。依赖JavaScript中的success
处理程序只能告诉您响应是成功的HTTP代码。看看您的服务器端代码,它没有理由不做出这样的响应。但你也需要检查一下反应中的内容。使用浏览器的调试工具观察服务器的完整AJAX响应。里面有什么?在服务器端代码中添加有用的输出(例如回显$sql
)并在调试工具中观察。里面有什么?您需要调试。JavaScript代码日志记录是“Dati ivati”还是“Diati non invati”或两者都不记录?您知道您是否正在将其备份到PHP代码中吗?“echo”语句将被发送回AJAX请求,这样您就不会在屏幕上看到它们。您可以尝试使用file\u put\u contents
将一些输出写入日志文件,而不是使用echo
。但是你真的应该用一个准备好的语句来替换你的代码。请阅读我对原始问题的评论,该问题涉及为hide
传递值1'或'1
。