2013-02-20 37 views
0

這裏可能是一個簡單的解決方案,我很迷惑自己。我有一個<select>,它通過一個MySQL數據庫的用戶數組來填充。那裏沒問題。我也有一個腳本,當選擇某個用戶時,我可以通過AJAX用戶的user_id。我的問題是,將該用戶標識放入變量$ assigned_to中,以包含在URL中。
對不起,編碼是如此特殊。如果有要求,我可以把它分解成更簡單的版本。 這裏是我到目前爲止有:AJAX提供的PHP變量更新網址

<script type="text/javascript"> 
function showData(str) 
{ 
if (str=="") 
    { 
    document.getElementById("showData").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("showData").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getdata.php?assign_to="+str,true); 
xmlhttp.send(); 
} 
</script> 

// 
//This gets the user_id value from the `<select>` when a user selects it. 
// 

<?php 

// 
//Here is the function that displays my users: 
// 

function userlist() 
{    
echo "<select name=\"assigned_to\" onChange=\"showData(this.value)\">"; 
echo "<option default value=\"\">Assignee</option>"; 

$mysqli = new mysqli("xxx", "xxx", "xxx", "xxx"); 
$userlist = "SELECT * FROM users where user_level = 2"; 
$result = $mysqli->query($userlist); 

while($row = $result->fetch_assoc()) { 
echo "<option value=\"".$row['user_id']."\">".$row['first_name']." ".$row['last_name']."</option>"; 
} 
echo "</select>&nbsp;"; 
} 
echo "<p>"; 
echo userlist(); 

echo "<a id=\"show\" href=\"index.php?page=overview&location=advance&assignee=\"".$assign_to."\">Assign</a></p>"; 
?> 
<!-- The line below **will** display the correct user_id value when selected --> 
<div id="showData">User Id Shows Here</div> 

這最後URL變量$ assign_to是我想從$行時選擇返回[「user_ID的」]的值。

我明白理解所有這些的理想方法是將表單發佈到php頁面並使用_POST檢索所有這些變量。不幸的是,在這種情況下,我需要URL中的變量。

一如既往的感謝。

+0

你在做什麼已經將發送變量在URL中。你可以用'$ _GET [「assign_to」]來訪問它' – 2013-02-20 20:19:23

+1

試試jquery和ajax,它更容易! – jcho360 2013-02-20 20:21:55

+0

這似乎不適用於當前頁面。它當然會在getdata.php中工作。 – dcclassics 2013-02-20 20:23:40

回答

0

你在這裏做什麼應該已經做你想做的事情。當選擇框被改變,你showData函數被調用,選擇框的當前選擇的值:

<select name=\"assigned_to\" onChange=\"showData(this.value)\"> 
在showData功能檢索參數「STR」包含此值

,你追加它的網址:

xmlhttp.open("GET","getdata.php?assign_to="+str,true); 

你應該看到它在您的首選調試工具(螢火蟲,Chrome開發者工具)的網絡選項卡,或者你可以只將其記錄到控制檯/ ALERT它

alert("getdata.php?assign_to="+str); 
console.log("getdata.php?assign_to="+str); 

,你會看到它的工作原理

編輯:

重定向到與帕拉姆當前頁面可以這樣做(即使我不明白爲什麼你想這樣做...):

var current_url = document.location.href; 
var separator = current_url.indexOf('?') === -1 ? '?' : '&'; 
document.location.href = current_url + separator + 'assign_to=' + str; 

EDIT2:

添加此功能,您的腳本:

function setLinkAssignee(assignee) { 
    var i, newParams = [], link = document.getElementById('show'), 
     href = link.getAttribute('href') 
     linkArr = href.split('?') 
     params = (linkArr[1] || '').split('&'); 

    for(i=0; i < params.length; i++) { 
    if(params[i].indexOf('assignee=') === -1) { 
     newParams.push(params[i]); 
    } 
    } 
    link.setAttribute('href', linkArr[0] + '?' + newParams.join('&') + '&assignee='+assignee); 
} 

並調用它,如果你不想做Ajax請求:

<select name=\"assigned_to\" onChange=\"setLinkAssignee(this.value)\"> 

或你這樣的showData內:

function showData(str) { 
    // your stuff here 
    setLinkAssignee(str); 
+0

請參閱我在答案底部的編輯 – hereandnow78 2013-02-20 21:26:00

+0

對不起,我意識到這沒有意義。我只是無法理解如何在生成請求的原始頁面上獲取$ _GET ['assigned_to']變量。 – dcclassics 2013-02-20 21:27:12

+0

但你是在該頁面上,對不起,我真的不明白你的問題在哪裏...... – hereandnow78 2013-02-20 21:39:41