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

时间:2013-12-10 02:08:29

标签: javascript php jquery mysql sql

所以我的目标是尝试允许页面上的动态元素确定发送到我的数据库的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的结尾时,无效。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我试着向你展示正确的方向:

<强>第一

想想你想在mysql中做什么。谷歌为mysql注入。如果你把mysql查询从客户端(浏览器)带到你的服务器,每个人都可以把它改成像drop database这样的东西,相信我 - 你不想让别人丢弃你的数据库;)

<强>第二

看看这个PHP数据库访问。这是用PDO完成的。 PDO是一个PHP类,它可以防止mysql注入,并且在以后的许多其他情况下也会帮助你。

<?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代码的可能性!