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 向服务器发送值的主要内容,如果未能解决你的问题,请参考以下文章

如果向服务器发送多值参数

用文件向服务器发送请求

每个会话不能有多个线程

即使应用程序关闭,也每 5 分钟向服务器发送纬度和经度

使用 jQuery AJAX PHP 的表单不会在电子邮件中发送字段输入

Ajax+PHP打造等待进度条效果