2012-05-17 52 views
1

我有一個php腳本,它正在編輯mysql表中的記錄。通過傳遞記錄號碼來刷新使用javascript的頁面時遇到問題。下面從php腳本問題調用javascript

PL檢查是我的PHP腳本的幾行:

if ($mode == "edit") 
{ 
$ids=$_POST[prs_rid]; 
$edt1=mysql_query("SELECT * FROM ECRDTL_edit WHERE id='$ids'"); 
$edt2=mysql_fetch_assoc($edt1); 

echo "<script>var x=document.getElementById('prs_rid').value</script>"; 
    echo "<script> alert (x);</script>"; 
echo "<script>document.location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x;</script>"; 
} 

我已經使用警告一下變數「x」是獲取記錄值或沒有,這工作正常。但是當我在下一行使用相同的內容時,它不會在我的php的編輯模式下顯示相同的記錄。

但如果我把這樣的瀏覽器的地址欄中同一行,它工作正常: http://www.mydomain.com/ecr-detail-edit.php?prs_mode=edit&prs_id=27

請檢查可能是什麼問題,或者是有提神傳遞記錄頁面的任何其他方式數。

+1

備註:請務必清理用戶輸入。目前,您基本上將POST變量插入到MySQL查詢中。你也可以向公衆發佈你的數據庫用戶名和密碼!看看[mysql_real_escape_string](http://php.net/manual/en/function.mysql-real-escape-string.php)。 –

+0

檢查我的答案,你有幾個錯誤,我已經修復它。 –

回答

0

當分配到相對URL的不工作location.href,它應該是絕對的或完全合格的。

在你的情況,絕對會做:

location.href = location.pathname + '?prs_mode=edit&prs_id=' + 
    encodeURIComponent(x) 

location.pathname給出了路徑(以/)到查詢分離器(問號)。

我也加了encodeURIComponent(x)以確保x的值在必要時可以正確轉義。

實施

echo "<script>location.href = location.pathname + '?prs_mode=edit&prs_id=' + encodeURIComponent(x);</script>"; 
+0

千斤頂你的代碼上面不是很清楚的實現,請給出一個精確的代碼來實現,這將有所幫助。 – user1114409

+0

@ user1114409更新了答案 –

+0

非常感謝你,這工作正常。 – user1114409

0
document.location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x; 

應該

location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x; 

,你也應該使用mysql_real_escape_string()逃脫惡意數據的用戶可以上傳遞給您的腳本。

因此改變

$ids = $_POST['prs_rid']; 

$ids = mysql_real_escape_string($_POST[prs_rid]); 

你缺少腳本類型,當你想使用JavaScript,你需要告訴該聲明的代碼瀏覽器的JavaScript,你需要改變

<script> 

<script type="text/javascript"> 

您在POST數據中缺少單引號。在下面添加單引號。

$ids = $_POST['prs_rid']; 

最後一件事是我永遠不會輸出javascript的PHP。最好讓JavaScript和PHP保持不同。例如你的上面的代碼可以更改爲。

<?php 
if ($mode == "edit"): 
    $ids = mysql_real_escape_string($_POST['prs_rid']); 
    $result = mysql_query("SELECT * FROM ECRDTL_edit WHERE id='$ids'") or die(mysql_error()); 
    $row = mysql_fetch_assoc($result); 
?> 
<script type="text/javascript"> 
    var x = document.getElementById('prs_rid').value 
    alert(x); 
    location.href = 'ecr-detail-edit.php?prs_mode=edit&prs_id='+x; 
</script> 
<?php endif; ?> 
+0

沒有事件,這不起作用,效果是一樣的。我已根據您的線路進行了更改。 – user1114409

+0

您正在使用哪個瀏覽器,如果您使用的是谷歌瀏覽器,請啓動開發者控制檯並檢查是否有任何javascript錯誤。確保你的html代碼放在你的html代碼之後,否則會給你HTML dom錯誤。 –

+0

即使這沒有幫助,警報顯示正確的記錄號,但問題仍然在下一行。 – user1114409

0

問題是window.location需要一個絕對的http:// URL。使用以下代碼:

window.location=window.location=location.protocol+'//'+location.host+location.pathname+"?get_variables_here"; 
+0

你給出的代碼不是很清楚。你能否更精確地爲我實施? – user1114409

0

只需使用它(如在MDN window.location指定)location.href對象所屬的window對象,而不是document

所以,你的代碼最後一行應該象:

echo "<script>location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x;</script>"; 

在另一方面,你使用腳本標記將得到更好的瀏覽器支持,<script type="text/javascript">

+0

事件不起作用。效果是相同的document.location.href或只是location.href,所以我還可以嘗試什麼。 – user1114409

0

試試這個..

echo "<script type='text/javascript'>window.location.href='ecr-detail-edit.php?prs_mode=edit&prs_id='+x;</script>"; 
+0

如果你可以解釋_爲什麼OP應該這樣做,這個答案會好得多。 – Ben

0

對於此行成功執行,在PHP var x=document.getElementById('prs_rid').value的HTML DOM應先加載否則它會給出一個錯誤,這可能是這裏的問題。