AJAX/PHP 向服务器发送值
Posted
技术标签:
【中文标题】AJAX/PHP 向服务器发送值【英文标题】:AJAX/PHP send values to server 【发布时间】:2012-07-11 20:05:57 【问题描述】:我正在尝试使用 AJAX 将值发送到 php 文件,然后更新服务器上的 mysql 数据库。但由于某种原因,这些值不会传输到 PHP 文件中。
这是我使用的 JS:
function send_message()
var number = localStorage.getItem("number");
var message = prompt("Message:", "");
jQuery.ajax( type: "POST",
url: serviceURL + "message.php",
data: 'number='+number+'&message='+message,
cache: false,
success: function(response)
alert("message sent");
);
这是message.php
<?php
include 'config.php';
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
// new data
$number = $_GET['number'];
$message = $_GET['message'];
// query
$sql = "INSERT into table
SET condition=0, change=1, change_time=NOW(), recieve=999,
number=?, message=?";
$q = $conn->prepare($sql);
$q->execute(array($number, $message));
?>
除了数字和消息为空外,其他所有内容都插入到 mysql 中。这可能是什么原因?
【问题讨论】:
【参考方案1】:您可以将您的 php 文件更改为;
<?php
include 'config.php';
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
// new data
$number = $_POST['number'];
$message = $_POST['message'];
// query
$sql = "INSERT into table
SET condition=0, change=1, change_time=NOW(), recieve=999,
number=?, message=?";
$q = $conn->prepare($sql);
$q->execute(array($number, $message));
?>
【讨论】:
【参考方案2】:为了让事情更简单,只需在 jQuery 中使用 $.post 或 $.get 之类的便捷方法进行 ajax 调用:
function send_message()
var number = localStorage.getItem("number");
var message = prompt("Message:", "");
$.post(serviceURL + "message.php", 'number' : number, 'message' : message,
function(response)
alert("message sent");
);
然后在你的 php 中:
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
//if you used $.get you will also have to use $_GET here
$number = $_POST['number'];
$message = $_POST['message'];
// query
$sql = "INSERT into table
SET condition=0, change=1, change_time=NOW(), recieve=999,
number=?, message=?";
$q = $conn->prepare($sql);
$q->execute(array($number, $message));
?>
我可以看到您在 PDO 中使用准备好的语句。但您可能还想添加:
Filter Vars 和 Filter Input 以提高安全性。
【讨论】:
【参考方案3】:使用$_POST
代替$_GET
。
另外,您可以尝试使用$_REQUEST
全局数组来忘记它。它包含您发送到脚本的所有数据。
【讨论】:
请不要使用$_REQUEST
,除非它可能经常或动态变化。使用 $_POST
或 $_GET
可以明确您的期望。【参考方案4】:
您正在使用 POST 通过 AJAX 发布数据。为了在 PHP 中监听这些值,您需要...
替换:
$number = $_GET['number'];
$message = $_GET['message'];
与:
$number = $_POST['number'];
$message = $_POST['message'];
【讨论】:
以上是关于AJAX/PHP 向服务器发送值的主要内容,如果未能解决你的问题,请参考以下文章