我正在尝试将一些数据写入MySQL表,但.post调用返回时出现500服务器错误。任何正确方向的帮助都会很棒。
我认为这与_POST变量无法正确发送有关。
以下是代码:
JS:
function write_table(response) {
var data = {
'user_id' : response.id,
'user_email' : response.email,
'user_first' : response.first_name,
'user_last' : response.last_name
};
console.log(data);
$.ajax({
'url': './includes/php/login_facebook.php',
'data': data,
'type': 'POST',
'beforeSend': function(xhr, settings) {
console.log('ABOUT TO SEND');
},
'success': function(result, status_code, xhr) {
console.log('SUCCESS!');
},
'complete': function(xhr, text_status) {
console.log('Done.');
},
'error': function(xhr, text_status, error_thrown) {
console.log('ERROR!', text_status, error_thrown);
}
});
}
PHP:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$host = 'localhost';
$un = 'root';
$pw = 'root';
$db = 'bikelouis';
$user_id = $_POST['user_id'];
$user_email = $_POST['user_email'];
$user_first = $_POST['user_first'];
$user_last = $_POST['user_last'];
$conn = mysql_connect($host, $un, $pw) or die(mysql_error());
if ($conn) {
echo '<script> alert("connected!");</script>';
mysql_select_db($db) or die(mysql_error());
$sql = "INSERT INTO users (user_id, user_email, user_first, user_last) VALUES ($user_id, $user_email, $user_first, $user_last)";
} else {
echo 'Connection failed.';
}
?>
我正在使用facebook connect,这就是'响应'的来源。这非常有效。
答案 0 :(得分:3)
$ .post()只是$ .ajax()的包装器,所以如果你想要更多地控制和了解正在发生的事情,我强烈建议使用$ .ajax()代替。
$ .post()的data
参数应该是键/值对的对象,而不是列表。也就是说,我不确定将data
对象放到user_info
列表中的是什么,这可能是你问题的根源。
试试这个,让我知道它是如何为你服务的:
function write_table(response) {
var data = { // This is the format $.post() expects.
'user_email' : response.email,
'user_id' : response.id,
'user_first' : response.first_name,
'user_last' : response.last_name
};
console.log(data);
$.post('./includes/php/login_facebook.php', data, function(result, status, xhr) {
console.log(status, result);
});
}
通过$.ajax()
执行相同的请求:
function write_table(response) {
var data = {
'user_email' : response.email,
'user_id' : response.id,
'user_first' : response.first_name,
'user_last' : response.last_name
};
$.ajax({
'url': './includes/php/login_facebook.php',
'data': data,
'type': 'POST',
'beforeSend': function(xhr, settings) {
console.log('ABOUT TO SEND');
},
'success': function(result, status_code, xhr) {
console.log('SUCCESS!',
},
'complete': function(xhr, text_status) {
console.log('Done.');
},
'error': function(xhr, text_status, error_thrown) {
console.log('ERROR!', text_status, error_thrown);
}
});
}
首先,我强烈建议您使用<?php
而不是<?
打开PHP,因为后者未在所有设置中启用。
其次,而不是接收内部服务器错误,实际上在浏览器中显示错误是如此清晰。在任何希望显示潜在错误的PHP脚本的开头,包括以下内容:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
至于您收到的500内部服务器错误,很可能是因为您在第8行的$
前面错过$_POST
。
Instead of:
$user_id = _POST['user_id'];
It should read:
$user_id = $_POST['user_id'];
试试这个:
$sql = "
INSERT INTO users
(user_id, user_email, user_first, user_last) VALUES (
'" . mysql_real_escape_string($user_id) . "',
'" . mysql_real_escape_string($user_email) . "',
'" . mysql_real_escape_string($user_first) . "',
'" . mysql_real_escape_string($user_last) . "'
)
";