是否可以通过html表单传递非用户信息?

时间:2013-10-04 03:23:01

标签: php html forms

提前为noob问题道歉:

我想要一个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脚本,然后使用用户定义的变量(“评级”)更新数据库,并且一个预定义的变量('before_or_after')。我希望'before_or_after'在'before'形式调用update_db.php时为'1',在'after'形式调用时调用'2'。

我确信这方面有一个简单的答案,或者我以完全错误的方式思考这个问题。

有什么建议吗?

4 个答案:

答案 0 :(得分: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()); 

答案 1 :(得分: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注入攻击是开放的。

答案 2 :(得分: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'];

答案 3 :(得分: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'值不能100%受信任,而有些用户可以有意替换它们,例如,使用JavaScript(例如,他们可以使用参数发布“评级后”表单指出它是“评级前”)。如果用户发布一个表单而不是另一个表单没有多大意义,那么就这样做。