【问题标题】:Problems WIth Multiple Quotes in JavaScriptJavaScript 中的多引号问题
【发布时间】:2013-02-25 13:59:26
【问题描述】:

我在根据另一个选择的选项更改选择的选项时遇到问题,下面是有效的代码:

dropdown2.innerHTML = "<?php echo($SQLFormElements->GetColumnAsOptions('SELECT `field2` FROM `table2` WHERE `field1` = \'8\' ')); ?>";

说明:

我有两个数据库表:table1table2table1 具有 field1table2 具有字段 field2field1SQLFormElements 是一个 php 文件,它根据 mysql 查询回显 html 元素,在这种情况下,是 select 元素的选项。 dropdown1 包含 field1 值。 dropdown2 应根据field1 的值显示field2 值,即dropdown1 的选定项。

无论如何,上面的代码工作正常,但是我已经硬编码而不是获取值,因为当我做这样的事情时:

var selectedItem = document.getElementById("ddField1");
dropdown2.innerHTML = "<?php echo($SQLFormElements->GetColumnAsOptions('SELECT `field2` FROM `table2` WHERE `field1` = \'" + selectedItem + "\' ')); ?>";

它不起作用,知道为什么!我有点难过。提醒一下,第一个代码 sn-p 有效。

我尝试了以下方法:

  • 将变量解析为整数(我表中的field1是整数类型)
  • 在 where 子句中省略引号
  • 省略引号,但在 where 子句中硬编码值有效

【问题讨论】:

  • 您可能有一个巨大的 SQL 注入漏洞。切勿在 SQL 代码中直接使用未经清理的用户值!
  • 这不是引号问题,您正在可怕地尝试将 JavaScript 与 PHP 混合使用。想想他们每个人的执行时间和地点(通过什么)。该解决方案称为“AJAX”,您会在网络上找到大量关于此的帮助。
  • 我知道 Ajax,但我刚刚开始学习 PHP 和 JavaScript。所以现在学习 Ajax 有点退步。但如果我需要它,我想我将不得不走那条路
  • SQL注入问题?我不太明白。请解释。也许我可以解决它。
  • 好的,刚刚检查过了!就是 SQL 注入,而且非常严重!安全性一直是我的克星,但现在我要忽略它,因为它是我正在开发的一个内部网站,主要是为了我自己,但这是一个我必须认真考虑的问题,谢谢@asawyer。

标签: javascript quotes


【解决方案1】:

我认为您错过了 selectedItem 中的值。

var selectedItem = document.getElementById("ddField1");改成var selectedItem = document.getElementById("ddField1").value;

【讨论】:

  • 对,在这里查看答案:stackoverflow.com/questions/1085801/…
  • 我会试一试的。并让你知道。谢谢:)
  • 没用 :( 当我使用 alert(selectedItem) 时,它显示了它被选中的内容,但是当我连接 selectedItem 时,它不起作用。天哪,这让我发疯。
【解决方案2】:

所以@Bergi 建议的 AJAX 方法成功了:

这里是:

dropdown1 的 onchange 事件:

onchange="AJAXItemChangeEvent(this.value)"

...

JavaScript 函数

function AJAXItemChangeEvent(selectedValue)
{
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function(){
    document.getElementById("dropdown2").innerHTML = xmlhttp.responseText;
    };

    xmlhttp.open("GET","Getter.php?field1=" + selectedValue,true);
    xmlhttp.send();
}

...

Getter.php

<?php
  mysql_connect("dbhost","username","password");
  mysql_select_db("dbname");

  $field1 = $_GET["field1"];
  $sql = "SELECT field2 FROM table2 WHERE field1 = '".$field1."'";

  $result = mysql_query($sql);
  echo "<option></option>";

  while($row = mysql_fetch_array($result))
  {
      echo "<option>".$row[0]."</option>";      
  }         
?>

注意 - 我的 ajax 代码不适合旧浏览器\向后功能

【讨论】:

  • 这仍然没有解决 SQL 注入问题,而且如果您写入 DOM 的那些数据元素以任何方式来自用户输入,那么您可能会引入 XSS 攻击漏洞。例如 - 假设我使用客户端调试器将下拉列表的值编辑为 ' or 1=1; drop all; --,然后提交您的 Ajax 请求。会发生什么? bobby-tables.com
  • 啊哈我知道有一个巨大的安全漏洞。但这仅适用于一小部分最终用户。不到 10 人,他们以前甚至没有听说过 Linux。所以这不是一个真正的问题。但是,当我决定实施 id 时,必须解决这个问题。感谢 asawyer 提供的链接。
猜你喜欢
  • 1970-01-01
  • 2011-01-03
  • 2018-05-25
  • 1970-01-01
  • 2013-01-31
  • 2015-03-24
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多