Ajax Post 500服务器错误

时间:2013-06-19 00:27:12

标签: php mysql ajax facebook

我正在尝试将一些数据写入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,这就是'响应'的来源。这非常有效。

1 个答案:

答案 0 :(得分:3)

jQuery Side

$ .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 Side

首先,我强烈建议您使用<?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注入攻击也是一个好主意:

试试这个:

$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) . "'
  )
";