提前为菜鸟问题道歉:
我想要一个将 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")和预定义变量(before_or_after)更新数据库。我希望"before_or_after"在"之前"形式调用时update_db.php为"1",当"之后"形式调用时为"2"。
我确信这个问题有一个简单的答案,或者我正在以完全错误的方式思考这个问题。
有什么建议吗?
那么为什么不在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());
将形式更改为:
<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注入攻击。
<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'];
您可能希望使用 $_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 和"隐藏"值不能 100% 信任,而一些用户可以故意替换它们,例如,用 JavaScript(例如,他们可以发布一个"评级后"表单,参数指出它是"评级前")。如果用户发布一个表单而不是另一个表单没有多大意义,那么请这样做。