2013-07-09 307 views
0

我在單個PHP頁面上有幾種形式。所有看起來像這樣:將PHP變量傳遞給JavaScript getElementById

<form id="test_form_1" action="test_submit.php" method="post" name="test_form"> 
    <label>This is Question #1:</label> 
    <p> 
     <label> 
     <input type="radio" name="Question1" value="ans1" id="Question1_0"> 
     Answer1</label> 
     <br> 
     <label> 
     <input type="radio" name="Question1" value="ans2" id="Question1_1"> 
     Answer2</label> 
     <br> 
<button type="submit" name="btnSubmit" id="btnSubmit">Submit</button> 
    </form> 

ID每種形式是不同的,就像test_form_1test_form_2test_form_3,等等。一旦PHP決定用戶屬於哪個ID,我就通過HEREDOCS調用這些表單。

然後我使用JavaScript在5秒後自動提交表單。

這裏是here文檔:

$test1= <<<HTML 
<table>Month 1 Test.</table> 
HTML; 
$test2= <<<HTML 
<table>Month 2 Test.</table> 
HTML; 
//and so on... 

,這裏是PHP的一部分:

<?php 
if($user_category == test1){ 
echo"test1"; 
} 
if($user_category == test2){ 
echo"test2"; 
} 

我的問題:是否有可能通過ID這種形式的getElementById只到用戶實際上屬於?這樣它只會將該表單提交給用戶實際所屬的數據庫。或者有沒有更好的選擇來實現這一目標?

回答

1

試試這個:

<script> 
    var userID = "<?php echo $userID ?>"; // For example 

    window.setTimeout(function() { 
    document.getElementById('test_form_'+ userID).submit(); 
    }, 5000); 
</script> 
+0

什麼,如果在情況下,我想改變整個變量名?我可以這樣做:'document.getElementById(userID).submit();'??? – user2561597

+0

是的,這將工作。但是在這個答案中,我沒有看到你的問題的PHP部分? – trizz

+0

我已經將HEREDOCS和PHP添加到代碼中... – user2561597

1

我不知道你的PHP代碼,但你可以做這樣的事情(假設ID住在$ ID)

<script> 
window.setTimeout(function() { 
    document.getElementById('test_form_<?=$ID;?>').submit(); 
}, 5000); 
</script> 
+0

這應該是一個明顯的,但對於一些它不是。請注意,如果你把它放在一個外部JavaScript文件中,它不會將該文件解析爲PHP,因此你最終會得到一個「test_form_ 」的文件。如果您想在外部JS文件中使用它,請參閱一個變量,並在加載外部JS文件之前使用腳本進行設置。 – h2ooooooo

+0

保持PHP標籤不在引號內,否則會變成字符串! –

+1

@MohammadAreebSiddiqui Nope - 在瀏覽器甚至可能接近它之前,PHP會解析文檔,PHP不會對任何不在PHP標籤中的東西給予任何詛咒。瀏覽器將把它作爲'document.getElementById('test_form_2')。submit()'提供。 – h2ooooooo

1

如果USER_ID存儲在會話,那麼你可以做這樣的:

<script> 
    <?php session_start(); ?> 
    var id= <?php echo $_SESSION['user_id']; ?> 

    window.setTimeout(function() { 
    document.getElementById('test_form_'+ id).submit(); 
    }, 5000); 
</script> 
+0

這不會工作 - 你忘了你的PHP標籤。 :) – h2ooooooo

+0

@ h2ooooooo THanks,編輯:) –

+0

你忘了'echo';) – trizz

0

是連接到的?在PHP腳本中跟蹤哪個用戶是session variable不是更容易嗎?這樣,你不能在劇本中欺騙你的方式,併爲別人投票。

因爲如果你保留腳本中的變量的用戶ID,可以很容易地改變它到他/她想要的。反過來,投票給他/她想要的任何用戶。

因此,當一個用戶登錄時,做這樣的事情:

<?php 
session_start(); 
$_SESSION['sess_userID'] = $userID_of_the_loggedin_user; 
?> 

然後在遠程腳本文件,test_submit.php

<?php 
session_start(); 
// Grab $_POST data and such 
// Then perform something with $_SESSION['sess_userID']; 
// Like SQL; "UPDATE votes SET answer=10 WHERE userID=$_SESSION['sess_userID']" 
// But have in mind the SQL-injection. 
?>