-2

我如何调用,insertScore以便我可以传递值。我认为它看起来像这样。insertScore($name,$num_guess)但我把它放在哪里?

这是PHP 部分

function insertScore($name,$num_guess){
opendb();
$query = mysqli_query($GLOBALS['dbconn'],"INSERT INTO game VALUES (0,'$name',$num_guess");
closedb();}

这是Ajax 部分:

$("#user .button ul li #submit").click( function(){
$.post("utilities.php",{
    user_name:$("#user_name").val(),
    num_guess:$("#num_guess").val()
  },
  function(response){
      $("#msgbox #msg").html("Score Submitted");
      $("#msgbox").slideUp().slideDown("slow");
  }
);
return false;
});
4

5 回答 5

0

当您访问.php网页或向页面发送 ajaxPOSTGET请求.php时,当该PHP文件运行时,它可以访问两个重要的变量$_POST$_GET。您可以在PHP文件中的任何位置访问这些变量。

您所做的是定义一个带有insertScore两个参数但从未被调用的函数。在文件主要执行的某个时刻,utilities.php您需要insertScore使用正确的参数进行调用。

$_POST变量是一个关联数组,可让您访问通过 AJAX 发送的数据(实际上其他东西可以将该数据沙到您的 PHP 文件中)。要访问 AJAX 请求发送的 user_name 和 num_guess,可以使用$_POST变量,如下所示:

$name = $_POST['user_name'];
$num_guess = $_POST['num_guess'];

你可以使用这些变量,或者直接使用数组。你必须非常小心的是恶意的人。如果您要在 MySQL 查询中直接使用此处的输入,那么您很容易受到 SQL 注入攻击(这很常见),这将完全危及您的数据库服务器,因此您应该mysqli_real_escape_string事先使用您的数据。所以你的代码应该是这样的:

function insertScore($name,$num_guess){
  opendb();
  $name = mysqli_real_escape_string($GLOBALS['dbconn'],$name);
  $num_guess = mysqli_real_escape_string($GLOBALS['dbconn'],$num_guess);
  $query = mysqli_query($GLOBALS['dbconn'],"INSERT INTO game VALUES (0,'$name',$num_guess");
  closedb();
}

然后在文件的其他地方,你应该把这个:

if(isset($_POST['user_name']) && isset($_POST['num_guess'])){
  insertScore($_POST['user_name'],$_POST['num_guess']);
}

我建议进一步阅读数据库/网站安全性,有很多事情可以让你发现并让你容易受到攻击。这仍然不是写这篇文章的最佳方式,但它会让你开始。我建议查看mysqli_prepare以进一步阅读。

于 2013-03-30T19:47:44.543 回答
0

好吧,如果你将你的 php 文件命名为utility.php并访问它,假设你有你的 insertScore 函数定义。您想在文件末尾添加对该函数的调用,并在函数内部访问$_POST 变量。您将在 JS 端的 $.post 中访问从 ajax 调用发送的数据。

于 2013-03-30T19:25:31.613 回答
0

首先你的 php 代码不是一个有效的代码,因为 malconstructing mysql query

那么您要询问的 php 代码必须在关闭}php 文件中的函数后存在

它会是这样的:internetScore($_POST['user_name'],$_POST['num_guess']);

请试试这个并告诉我这是否能解决您的问题:)

请应用我会说的话并告诉我这是否有效:)

像这样更新您的 jquery 代码:

$("#user .button ul li #submit").click( function(){
$.post("utilities.php",{
'user_name':$("#user_name").val(),
'num_guess':$("#num_guess").val()
},
function(response){
  $("#msgbox #msg").html("Score Submitted");
  $("#msgbox").slideUp().slideDown("slow");
}
);
return false;
});

唯一的修改是您发布的变量周围的引用,请让我知道这是否有效:)

于 2013-03-30T19:29:01.760 回答
0

试试这个utilities.php-

insertScore($_POST['user_name'], $_POST['num_guess']);

基本上,您可以使用超全局访问通过 post 请求发送的所有值$_POST

但不要将此数据直接发送到您的数据库,因为它可能包含有害的SQL 注入。您应该清理输入或使用准备好的语句

于 2013-03-30T19:23:54.750 回答
0

POST 参数可以使用 PHP$_POST超全局访问。你可以这样做utilities.php

insertScore($_POST['user_name'], $_POST['num_guess']);

但是,该函数容易受到 SQL 注入的影响。您应该确保正确转义或使用准备好的语句!我绝对推荐使用 PHPs 内置数据库访问PDO。和函数通常被认为是不好的做法mysql_*mysqli_*

于 2013-03-30T19:24:22.297 回答