【问题标题】:Dynamically change MYSQL query within a PHP file using jQuery .post?使用 jQuery .post 在 PHP 文件中动态更改 MYSQL 查询?
【发布时间】:2010-04-26 20:58:26
【问题描述】:

尝试这个已经有一段时间了,我需要帮助。基本上我有一个查询数据库的 PHP 文件,我想根据登录的用户名更改查询。

在我的网站上发生的情况是用户使用 Twitter Oauth 登录,我可以显示他们的详细信息(Twitter 用户名等)。我有一个用户向其中添加信息的数据库,我希望当用户使用 Twitter Oauth 登录时,我可以使用 jQuery 获取用户用户名并更新 mysql 查询以仅显示结果user_name = 那个特定的用户名。

目前mysql查询为:

"SELECT * FROM markers WHERE user_name = 'dave'"

我尝试过类似的方法:

"SELECT * FROM markers WHERE user_name = '$user_name'"

在 PHP 文件的其他地方我有 $user_name = $_POST['user_name'];。在一个单独的文件中(用户通过 Twitter 登录后被重定向到的文件)我有一些这样的 jQuery:

$(document).ready(function(){
$.post('phpsqlinfo_resultb.php',{user_name:"<?PHP echo $profile_name?>"})});

$profile_name 已在该页面前面定义。

我知道我显然做错了什么,我还在学习。有没有办法实现我想要使用 jQuery 将用户用户名发布到 PHP 文件以更改 mysql 查询以仅显示与登录用户相关的结果。我已将 PHP 文件包含在下面的查询中:

    <?php
// create a new XML document
//$doc = domxml_new_doc('1.0');
$doc = new DomDocument('1.0');

//$root = $doc->create_element('markers');
//$root = $doc->append_child($root);
$root = $doc->createElement('markers');
$root = $doc->appendChild($root);
$table_id = 'marker';
$user_name = $_POST['user_name'];
// Make a MySQL Connection
include("phpsqlinfo_addrow.php");
    $result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'")
    or die(mysql_error());
// process one row at a time
//header("Content-type: text/xml");
header('Content-type: text/xml; charset=utf-8');
while($row = mysql_fetch_assoc($result)) {
    // add node for each row
  $occ = $doc->createElement($table_id);
  $occ = $root->appendChild($occ);
  $occ->setAttribute('lat', $row['lat']);
  $occ->setAttribute('lng', $row['lng']);
  $occ->setAttribute('type', $row['type']);
  $occ->setAttribute('user_name', utf8_encode($row['user_name']));
  $occ->setAttribute('name', utf8_encode($row['name']));
  $occ->setAttribute('tweet', utf8_encode($row['tweet']));
  $occ->setAttribute('image', utf8_encode($row['image']));
} // while
$xml_string = $doc->saveXML();
$user_name2->response;
echo $xml_string;
?>

这是与我试图做的谷歌地图混搭一起使用的。如果你能帮助我,非常感谢。如果我的问题不够清楚,请说,我会尽力为你澄清。我敢肯定这是一个简单的解决方法,我只是相对缺乏经验。在这里呆了两天,不幸的是我的时间不多了。

【问题讨论】:

  • 你在哪里设置 $profile_name ?
  • 我将它设置在页面顶部的一段php中。 $profile_name= "{$user->screen_name}"; {$user->screen_name} 使用同样位于页面顶部的 Twitter Oauth php 代码设置。

标签: php jquery mysql .post


【解决方案1】:

首先,您应该将直接插入到查询中的 $_POST 转义:

'SELECT * FROM markers WHERE user_name = `' . mysql_real_escape_string($user_name) . '`';

正如 Erik 建议的那样,不要把最有用的警告扔出窗外——很可能答案会马上出现。

但我不太确定的是混搭的工作方式。如果您只在 php 本身内完成所有工作,完全省略 javascript,它会变得容易得多。您可能还想检查 OAuth 回调 - 应该给您 twitter id 或用户名。

【讨论】:

  • 您的建议-“如果您只在 php 本身内完成所有工作,它会变得容易得多。” - 工作!不知道为什么我从来没想过。学过的知识。非常感谢 Mikulas!
【解决方案2】:

没有错:

$result = mysql_query("SELECT * FROM markers WHERE user_name = '$user_name'");

其他的 SQL 注入已经成熟 - 它应该可以工作。您可能想直接在数据库上尝试查询,看看结果是否符合您的预期。

我还建议在开发过程中打开错误报告。将以下行添加到文档顶部:

error_reporting(E_ALL);
ini_set("display_errors", 1);

它将帮助您发现许多错误。

【讨论】:

  • 未定义索引:user_name....第 14 行出现。那就是 $user_name = $_POST['user_name'];我的一点 jQuery 应该可以满足它,但似乎没有。如果我改变 $user_name = $_POST['user_name'];到 $user_name = 'dave';并使用 Mikulas 提供的代码可以正常工作。我认为问题出在 jQuery 上。
  • 确保你的表单元素被命名为'user_name'——这是我对问题的猜测。
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
相关资源
最近更新 更多