【问题标题】:AJAX/PHP send values to serverAJAX/PHP 向服务器发送值
【发布时间】: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 中。这可能是什么原因?

【问题讨论】:

    标签: php mysql ajax insert pdo


    【解决方案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 VarsFilter Input 以提高安全性。

      【讨论】:

        【解决方案3】:

        使用$_POST 代替$_GET。 另外,您可以尝试使用$_REQUEST 全局数组来忘记它。它包含您发送到脚本的所有数据。

        【讨论】:

        • 请不要使用$_REQUEST,除非它可能经常或动态变化。使用 $_POST$_GET 可以明确您的期望。
        【解决方案4】:

        您正在使用 POST 通过 AJAX 发布数据。为了在 PHP 中监听这些值,您需要...

        替换:

        $number = $_GET['number'];
        $message = $_GET['message'];
        

        与:

        $number = $_POST['number'];
        $message = $_POST['message'];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-06
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          • 2015-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多