Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX/PHP将值发送到服务器_Php_Mysql_Ajax_Insert_Pdo - Fatal编程技术网

AJAX/PHP将值发送到服务器

AJAX/PHP将值发送到服务器,php,mysql,ajax,insert,pdo,Php,Mysql,Ajax,Insert,Pdo,我尝试使用AJAX将值发送到PHP文件,然后PHP文件更新服务器上的mysql数据库。但由于某些原因,这些值不会传输到PHP文件 这是我使用的JS: function send_message() { var number = localStorage.getItem("number"); var message = prompt("Message:", ""); jQuery.ajax({ type: "POST", url: serviceURL + "message.php

我尝试使用AJAX将值发送到PHP文件,然后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。原因可能是什么?

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

替换:

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


使用
$\u POST
而不是
$\u GET

另外,您可以尝试使用
$\u REQUEST
全局数组来忘记它。它包含您发送到脚本的所有数据。

为了简化操作,只需在jQuery中为ajax调用使用方便的方法,如$.post或$.get即可:

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中使用了准备好的语句。但您可能还想添加:


并且为了增加安全性。

您可以将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));
?>

请不要使用
$\u请求
,除非该请求可能经常或动态更改。使用
$\u POST
$\u GET
可以准确地说明您的期望。
<?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));
?>