几个月以来,我一直在为此苦苦挣扎,终于到了需要在我的项目中修复它的地步。
问题是,我正在向一个php文件发送ajax请求,我需要在其中读取当前的$ _GET ['user_id']值以插入查询。但是php不会从当前URL地址读取$ _GET ['user_id']值,就像它不存在一样。
这让我发疯,因为我不知道遵循用户帐户的任何其他方法都可以达到预期的结果。
这是一段代码,仅用于解释目的:
// PHP
<?php
require_once "db.php";
$query = "INSERT INTO followers(follower, following) ";
$query .= "VALUE('{$_SESSION['id_user']}','{$_GET['user_id']}' )";
$result = mysqli_query($connect_db, $query);
?>
// AJAX
<script>
$('.js-follow_user_btn').click(function(){
follow_unfollow_action();
});
function follow_unfollow_action(){
$.ajax({
type: 'POST',
url: 'follow_user.php',
success: function(data) {
alert('done');
}
});
}
</script>
答案 0 :(得分:2)
首先,正如人们已经指出的那样,您需要将方法从GET
更改为POST
。
第二,您需要在URL中实际指定user_id
参数。使用urlencode
函数对参数进行编码:
<script>
$('.js-follow_user_btn').click(function(){
follow_unfollow_action();
});
function follow_unfollow_action(){
$.ajax({
type: 'GET',
url: 'follow_user.php?user_id='.urlencode($user_id),
success: function(data) {
alert('done');
}
});
}
</script>
请记住urldecode
脚本中的follow_user.php
参数。
答案 1 :(得分:2)
您正试图从php文件访问$_GET
url参数,该文件不是直接从浏览器运行的。
为了让您在php ajax调用中使用该值,您需要使用此方法来获取该值
$.ajax({
type: 'POST',
url: 'follow_user.php',
data: { user_id: user_id },
success: function(data) {
alert('done');
}
});
//follow user
<?php
require_once "db.php";
$query = "INSERT INTO followers(follower, following) ";
$query .= "VALUE('{$_SESSION['id_user']}','{$_POST['user_id']}' )";
$result = mysqli_query($connect_db, $query);
?>
答案 2 :(得分:1)
PHP $_GET
超全局变量使用来自所请求URL的查询字符串的数据填充(与用于发出请求的HTTP方法无关)。
这是您使用的URL:
url: 'follow_user.php',
上面根本没有查询字符串。
可能您希望它从托管JavaScript的页面复制查询字符串。并非如此,您需要显式提供数据。
一点点:
您正在将数据插入数据库。您应该为此使用一个POST请求,但是您应该在请求正文中传递数据(否则,您很可能会意外地创建对GET请求做出不正确响应的内容。
所以首先要做的是:更改PHP以使用$_POST
代替$_GET
。
在编辑时,您的PHP容易受到SQL injection attacks的攻击。您需要学习如何从他们那里defend您的代码。
好,所以接下来您需要从当前页面的查询字符串中获取数据。
您可以使用JavaScript进行阅读。 This answer解释了几种方法。
一旦有了数据,就可以将其放入请求中
var user_id = (new URL(url_string)).searchParams.get("user_id");
// See the answer linked above to see how this works and for compatibility with old browsers
$.ajax({
type: 'POST',
url: 'follow_user.php',
data: { user_id: user_id },
success: function(data) {
alert('done');
}
});
…记住,这将其放入请求正文中,因此您需要使用$_POST
而不是$_GET
来读取它。
答案 3 :(得分:0)
只需在代码中通过GET更改POST +在数据或URL中传递变量即可。
$.ajax({
type: 'GET',
url: 'follow_user.php',
data: { user_id: "XXXXXX"}
success: function(data) {
alert('done');
}
});
或者更好!让POST进入您的JS代码,并使用$ _POST +获取数据
答案 4 :(得分:-1)
在ajax请求中,您使用的是POST方法类型,该方法类型将在php的$ _POST超全局变量中接收。如果要通过get获取它,请将其更改为GET方法类型,但是由于要将信息发送到数据库,因此我相信您最好坚持使用POST。
用网络语来表达,POST是“保存”数据,而GET是获得资源。
干杯!
答案 5 :(得分:-1)
由于ajax调用中有type: 'POST',
,因此将其设为type: 'GET',
或默认删除该行,因此该调用属于GET
方法