0

提前为菜鸟问题道歉:

我想要一个将 1) 用户定义变量和 2) 预定义变量传递给 php 脚本的 html 表单。

这是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') 和 pre-定义的变量('before_or_after')。当 update_db.php 被“before”表单调用时,我希望“before_or_after”为“1”,而当“after”表单调用时为“2”。

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

有什么建议么?

4

4 回答 4

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()); 
于 2013-10-04T03:29:25.737 回答
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 注入攻击是开放的。

于 2013-10-04T03:32:23.090 回答
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'];

于 2013-10-04T03:36:25.347 回答
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(例如,他们可以发布带有参数指出它的“评分后”表单是“评级前”)。如果用户发布一个表单而不是另一个表单没有多大意义,那么就这样做。

于 2013-10-04T03:37:24.540 回答