PHP变量存储不同的值?

时间:2015-06-18 19:02:21

标签: javascript php html

我对这个问题毫无头绪。我有一个名为$opts的变量。我使用它来填充数据库查询(mysql)的结果。

<select id="User" name="User" >
<?php 
  $cons=array();
  $opts=getOptions("User",$cons,0);
  logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts are=".$opts);
  echo $opts;?>
</select>

这是有效的,并且选择中填充了用户名:

<option value="1">admin</option>
<option value="2">test</option>

我必须根据所选的用户名选择要填充的倍数。 这是文档就绪函数中的Javascript:

$(document).ready( function () {
    //  rootloc returns root url
    var $_GET = {},
    args = location.href.substr(0).split("/");
    var rootloc="http://"+args[2]+"/"+args[3]+"/";     

$("select").change(function() {
    console.log("select on change called.");
    var elem=this.id;     //this.id  id of the calling element
    console.log("Element= " + elem);
    var seluserid=$(this).val(); // returns userid of selected user
    console.log(seluserid);
    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) {
    }
    }
    xmlhttp.open("GET",rootloc+"DokumenteUserForm.php?seluserid="+seluserid,true);
    xmlhttp.send();
});
//after first load fire change event to fill lists      
console.log("call the onchange first")
obj = document.getElementById("User");
fireEvent(obj,'change');

});

现在我填写两个关于所选用户的列表,其中包含数据库中的值:(返回html和php)

<select id="Dokumente" name="Dokumente" multiple="multiple" size="10">
<?php 
   if (isset($_GET["seluserid"])){
     $seluserid=$_GET["seluserid"];
     logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - seluserid= ". $seluserid);
     $opts2=getListOptions("Dokumente",$seluserid,0);
     logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts are=".$opts2);
     echo $opts2;}
?>
</select>

第二个列表以相同的方式填充。

<select id="UserDoumente" name="Userdokumente" multiple="multiple" size="10">
<?php 
if (isset($_GET["seluserid"])){
  $opts3="";
  $opts3=(string)$opts3;
  $seluserid=$_GET["seluserid"];
  logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - seluserid= ".$seluserid);
  $opts3=getListOptions("Userdokumente",$seluserid,0);
  logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts3 are= ".$opts3);
  $opts=$opts3;
}
logge(date("Y-m-d H:i:s")." - ".$TAG." - ".$fn." - opts are=".$opts);
echo $opts;
?>

我的问题在最后一个选择多个列表中是正确的。我正在不同的地方记录构建的HTML代码。首先在被叫funciton getListOptions。结果有:

2015-06-18 17:45:22 - table.php - getListOptions - opts are=<option value="1">Doks/uploads/</option>

现在我正在记录,正如您在上面看到的那样,将其保存在$opts3之后:

2015-06-18 17:45:22 - DoksForm.php - mainhtml - opts3 are=<option value="1">Doks/uploads/</option>

然后我将$opts3放入$opts日志中说:

2015-06-18 17:45:22 - DoksForm.php - mainhtml - opts are=<option value="1">Doks/uploads/</option>

但是当回显那些$ opts时,第一个选择的值出现在框中(HTML源代码):

<select id="UserDokumente" name="Userdokumente" multiple="multiple" size="10">
  <option value="1">admin</option>
  <option value="2">test</option>
</select> 

这怎么可能?据我了解,我用新值覆盖了这个$ opts。我的日志也是这样说的......你有什么想法吗?我不知道如何描述问题或谷歌对这个问题有什么好处。所以我试着在这里解释一下。如果需要进一步的信息,我希望能提供。

如果我使用echo $opts3;,则列表中或html源代码中没有任何内容,因此它看起来像一个空变量。然后我得到一个PHP错误,说$opts3未定义。 isset if语句中的变量是否可以是外部的变量?或者可能是因为我的xampp安装可能已损坏?(但其他一切似乎都有效) - &gt;重新安装xampp - &gt;问题仍然存在

问题在于xmlhttp请求部分。我用ajax尝试了这个请求(用xmlhttp替换了它):

$.ajax({
type: 'post',
url: 'DokumenteUserForm.php?seluserid='+seluserid,
// data: $('form').serialize(),
success: function () {
  //alert('form was submitted');
}
});

我在php构建选项的html代码之前记录了url,它说:

2015-06-19 16:35:28 - DokumenteUserForm.php - mainhtml - absolute_url= http://localhost/testwebsite/DokumenteUserForm.php?seluserid=2 

如此受到怀疑。问题是,在浏览器本身中,网址没有改变。它仍然像以前一样http://localhost/testwebsite/DokumenteUserForm.php。 所以我认为网址只在服务器端改变,而不是在客户端。也许与我的$opts3变量相同?

1 个答案:

答案 0 :(得分:0)

我终于让它运转了,我想我知道它之前没有用的原因。 如果这是问题,这是一个简单的答案,我花了3天多才找到它。

我的问题是,我试图通过仅替换select中的选项来填充html选择(多个)。我没有在那里有一个div,但尝试使用divs让我进入这个线程:<div> and <select> tags

绕过div,我来到了设置元素内部html的解决方案。

所以现在我首先有一个空的select元素:

<select id="Dokumente" name="Dokumente" multiple="multiple" size="10">

</select>

然后在我的onchange javascript函数中我做一个ajax帖子并设置内部html的结果:

var url="getMselectopts.php";
var p1 = $.post(url,{what:"Dokumente",u:seluserid});
p1.done(function(data){
// console.log(data);
document.getElementById("Dokumente").innerHTML = data;
});

最后它有效。