【问题标题】:Javascript pass title attribute through functionJavascript通过函数传递title属性
【发布时间】:2012-08-12 23:29:53
【问题描述】:

我有一个函数可以获取选择菜单的值,这很好用。但我正在尝试为该函数添加另一个值。所以我想我会使用 title 属性作为选项(请参阅下面的代码)。问题是我的 JavaScript 函数中的用户名参数是undefined

有人知道我做错了什么吗?

表格

<form action="">
    <select id="acyear" name="acyear" onchange="showyearlogdays(this.value, this.title)">
    <option value="" label="">- Year -</option>
<?php

$is_business_result = mysql_query('SELECT DISTINCT(academic_year)FROM holiday_entitlement_business_manual WHERE employee = \'' . $username . '\''); 


    while($acyear_filter = mysql_fetch_array($is_business_result)) {
    echo '<option value="'.$acyear_filter['academic_year'].'" title="'.$username.'"';

    $datestr = $acyear_filter['academic_year'];
    $currentyear = substr($datestr, 0, 4);

    if(intval(substr($datestr,4,2)) < 8){$ayear = ($currentyear - 1).'/'.$currentyear;}
    else{$ayear = ($currentyear).'/'.($currentyear + 1);}       
        echo '>';

    echo $ayear;

    echo '</option>';
    }

?>    
    </select>
</form>

Javascript

   function showyearlogdays(str, username)
 {
 if (str=="")
   {
   document.getElementById("txtHint").innerHTML="";
   return;
   } 
 if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","days_yearlog.php?username="+username+"&q="+str,true);
 xmlhttp.send();
 }

【问题讨论】:

  • 使用mysql_query 并像这样连接一个不带引号的字符串是一个潜在的错误和安全问题。请改用参数绑定。
  • @Martijn 我认为如果你解释你在说什么,OP 会发现它更有帮助。
  • @starbeamrainbowlabs:阅读有关protecting MySQL from SQL injection attacks 的页面,了解有关 SQL 注入攻击以及如何保护您的代码免受攻击的更多信息。或查看this question
  • @Martijn 谢谢!这将很有用,尤其是对于像我这样对 mysql 不太了解的人:)

标签: javascript


【解决方案1】:

您需要获取所选选项的title 属性。您的代码指向select 标记的title 属性。在下面进行更改:

showyearlogdays(this.value, this.options[this.selectedIndex].title)

您还应该解决 cmets 中提到的安全问题。设置查询的方式会导致非常简单的 SQL 注入攻击。如果您不想按照评论者建议的方式重新构建它,我至少会转义 $username 以便无法注入 SQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2010-11-04
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多