提前为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'。
我确信这方面有一个简单的答案,或者我以完全错误的方式思考这个问题。
有什么建议吗?
答案 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(例如,他们可以使用参数发布“评级后”表单指出它是“评级前”)。如果用户发布一个表单而不是另一个表单没有多大意义,那么就这样做。