Можно ли передавать не пользовательскую информацию через HTML-форму?

0

Извините заранее за вопрос о нобе:

Я хочу 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", когда вызывается формой "после".

Я уверен, что есть легкий ответ на этот вопрос или что я думаю об этом совершенно неправильно.

Какие-либо предложения?

  • 0
    Возможно, мне понадобится больше пояснений по этому вопросу ... Это звучит так, как будто вы хотите, чтобы у вас было две разные страницы, которые в основном используют один и тот же HTML (через require () или include ()), или одна страница, которая проверяет условие $ _GET на определите, какой вид просматривает пользователь, и внесите небольшие коррективы.
Теги:
forms

4 ответа

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 before 

}
else{//it after

}

Однако, пожалуйста, будьте осторожны, что $ _GET и "скрытые" значения не могут быть на 100% доверены, в то время как некоторые пользователи могут преднамеренно их заменить, например, с помощью JavaScript (например, они могут публиковать форму "после оценки" с параметром, указывающим его "до рейтинга"). Если пользователям нечего толковать одну форму вместо другой, то сделайте это.

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']

теперь для WARNINGS mysql_ * больше не нужно использовать, и это доступно для атаки SQL-инъекции.

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'];

0

Итак, почему бы просто не использовать другую переменную 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()); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню