2013-10-04 91 views
0

爲noob問題提前道歉:是否可以通過html表單傳遞非用戶信息?

我想要一個html表單,它將1)用戶定義的變量和2)預定義變量傳遞給一個php腳本。

這裏的HTML:

<form action="update_db.php" method="post"> 
Before Rating: <input type="number" name="rating"><br> 
<input type="submit"> 
</form> 

<form action="update_db.php" method="post"> 
After Rating: <input type="number" name="rating"><br> 
<input type="submit"> 
</form> 

這裏的update_db.php:

$rating=$_POST["rating"]; 
mysql_connect("localhost", "uname", "password") or die(mysql_error()); 
mysql_select_db("dbname") or die(mysql_error()); 
mysql_query("INSERT INTO ratings_table 
(rating, before_or_after) VALUES($rating,$before_or_after)") 
or die(mysql_error()); 

正如你所看到的,我想打電話給同一個PHP腳本進行一個「前」評級表和'評分表'之後,然後用用戶定義的變量('rating')和預先定義的變量('before_or_after')更新數據庫。當'before'表單調用update_db.php時,我希望'before_or_after'爲'1','after'表單調用時爲'2'。

我確定有一個簡單的答案,或者我正在以完全錯誤的方式思考這個問題。

有什麼建議嗎?

+0

我可能需要更多的澄清......這聽起來像是你想要兩個不同的頁面共享大部分相同的HTML(通過require()或include()),或者一個頁面檢查$ _GET有條件確定用戶正在查看哪個視圖並進行微調。 – Katana314

回答

0

那麼爲什麼不在你的HTML中使用一個不同的post變量,並寫了一點額外的PHP?

<form action="update_db.php" method="post"> 
Before Rating: <input type="number" name="rating_before"><br> 
<input type="submit"> 
</form> 

<form action="update_db.php" method="post"> 
After Rating: <input type="number" name="rating_after"><br> 
<input type="submit"> 
</form> 

現在我們只需要檢查哪一個是在PHP設置。

if(isset($_POST["rating_after"])) $rating = $_POST["rating_after"]; 
if(isset($_POST["rating_before"])) $rating = $_POST['rating_before']; 
mysql_connect("localhost", "uname", "password") or die(mysql_error()); 
mysql_select_db("dbname") or die(mysql_error()); 
mysql_query("INSERT INTO ratings_table 
(rating, before_or_after) VALUES($rating,$before_or_after)") 
or die(mysql_error()); 
0

變化形式是:

<form action="update_db.php" method="post"> 
Before Rating: <input type="number" name="before_rating"> 
<input type="hidden" name="before_or_after" value="before"><br> 
<input type="submit"> 
</form> 
<form action="update_db.php" method="post"> 
After Rating: <input type="number" name="after_rating"> 
<input type="hidden" name="before_or_after" value="after"><br> 
<input type="submit"> 
</form> 

和你的PHP中使用$ _ POST [ 'before_or_after']

現在

的警告mysql_ *不應再使用,這是開放的到SQL注入攻擊。

0
<form action="update_db.php?mood=1" method="post"> 
Before Rating: <input type="number" name="rating"><br> 
<input type="submit"> 
</form> 

<form action="update_db.php?mood=2" method="post"> 
After Rating: <input type="number" name="rating"><br> 
<input type="submit"> 
</form> 

和update_db.php初始化$ before_or_after與 $before_or_after = $_GET['mood'];

0

您可能需要使用$ _GET來解決這個問題:

<form action="update_db.php?r=1" method="post"> 
Before Rating: <input type="number" name="rating"><br> 
<input type="submit"> 
</form> 
<form action="update_db.php?r=2" method="post"> 
After Rating: <input type="number" name="rating"><br> 
<input type="submit"> 
</form> 

然後在PHP中:

$r = (int)$_GET['r']; 
if($r==1){//it's before 

} 
else{//it's after 

} 

但是,請注意,$ _GET和'hidden'值s不能100%信任,而一些用戶可以故意用JavaScript代替它們(例如,他們可以發佈一個「評級後」的形式,參數指出它是「評級前」)。如果用戶發佈一個表單而不是另一個表單對於用戶來說意義不大,那就這樣做。

相關問題