使用JS/JQuery修改PHP以与MySQL通信


Modifying PHP using JS/JQuery to communicate with MySQL

所以我的目标是允许页面上的动态元素来确定发送到数据库的SQL。

第一个比特是JS,它包含在我的主要HTML文档中:

var sub_condition = " AND artist=''ivoilic'' ";//$(".current_filter").attr("condition");
        $("<?php $conditions = 'WHERE owner=''ivoilic''"+ sub_condition+"'; include 'PHP/get_info.php';?>").appendTo(".collection tbody");

上面包含的文档get_info.php如下所示:

<?php
include "connect.inc.php";
parse_str($conditions,$test);
$info = mysql_query("SELECT * FROM cards ".$condition.";")or die(mysql_error());?>

我的问题是,当我只是回显SQL时,它看起来很好,而当我手动测试SQL时,却能正常工作。但无论出于什么原因,当我尝试使用这种方法插入SQL的末尾时,都没有任何效果。有人有什么想法吗?

我试图向您展示正确的方向:

第一个

想想你想在mysql中做什么。谷歌为mysql注入。如果您将mysql查询从客户端(浏览器)带到服务器,每个人都可以将其更改为类似drop database的内容,相信我——您不希望有人丢弃您的数据库;)

第二次

看看这个PHP数据库访问。这是用PDO完成的。PDO是一个防止mysql注入的PHP类,稍后在许多其他情况下也会对您有所帮助。

<?php
$id = $_GET['id'];
$ownerName = $_GET['ownerName'];
$db = new PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
$query = $db->prepare('SELECT * FROM `cards` WHERE `id` = :ID AND `owner` = :OWNER');
$query->execute(array(
  ':ID' => $id,
  ':OWNER' => $owner
));
$result = $query->fetchAll(); //$result is now an array of search result objects

您可以看到,您只是通过javascript向php脚本发送值。当然,您可以在php脚本中有几个查询字符串,并且可能会得到一个带有特殊查询ID和开关的字符串?由你决定。

示例:

<?php
  $queryNum = (int)$_GET['queryNum'];
  $value1 = $_GET['val1'];
  $value2 = $_GET['val2'];
  switch($queryNum){
    case 1:
        $query = 'SELECT * FROM `cards` WHERE `id` = :ID AND `owner` = :OWNER';
        $queryVals = array(':ID' => $value1, ':OWNER' => $value2);
      break;
    case 2:
        $query = 'SELECT * FROM `cards` WHERE `color` = :COLOR AND `size` = :SIZE';
        $queryVals = array(':COLOR' => $value1, ':SIZE' => $value2);
      break;
    default:
         $query = 'SELECT * FROM `cards`';
         $queryVals = array();
      break;
  };
  $db = new PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
  $query = $db->prepare($query);
  $query->execute($queryVals);
  $result = $query->fetchAll(); //$result is now an array of search result objects

第三次

只将数据库查询的值从javascript或HTML表单发送到php脚本。

摘要

这是非常基础的知识,我的脚本示例只是简单的示例,可以向您指明正确的方向。永远不要忘记防止用户以任何方式更改数据库查询或php代码的可能性!

相关文章: