Извините заранее за вопрос о нобе:
Я хочу 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" был "1", когда update_db.php вызывается формой "before" и "2", когда вызывается формой "после".
Я уверен, что есть легкий ответ на этот вопрос или что я думаю об этом совершенно неправильно.
Какие-либо предложения?
Вы можете использовать $ _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 before
}
else{//it after
}
Однако, пожалуйста, будьте осторожны, что $ _GET и "скрытые" значения не могут быть на 100% доверены, в то время как некоторые пользователи могут преднамеренно их заменить, например, с помощью JavaScript (например, они могут публиковать форму "после оценки" с параметром, указывающим его "до рейтинга"). Если пользователям нечего толковать одну форму вместо другой, то сделайте это.
измените форму на это:
<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']
теперь для WARNINGS 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'];
Итак, почему бы просто не использовать другую переменную post в вашем HTML и написать немного дополнительного 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());