PHP отправить форму с условием выбора опции - PullRequest
0 голосов
/ 12 июня 2018

Я хочу отправить данные формы в базу данных, но сначала они должны быть отфильтрованы по опции выбора перед вставкой.Ниже мое представление формы:

<form method="POST">
<input type="text" name="name" placeholder="Your Name" />
<input type="text" name="username" placeholder="Username"/>
<select name="choose">
    <option value="1">One</option>
    <option value="2">Two</option>
</select>
<button type="submit" name="submit">Submit</button>
<!-- <input type="submit" name="submit" value="Submit" /> -->

И это форма процесса:

<code>if(isset($_POST['submit'])) {
switch(true) {
    case  ( isset($_POST['choose']) == "1" ):
        echo "you choose 1";
        break;
    case  ( isset($_POST['choose']) == "2" ):
        echo "you choose 2";
        break;
    case  ( isset($_POST['choose']) == "" ):
        echo "you didn't choose anything";
        default;
}
echo "<pre>";
print_r($_POST);
echo "
";

}

Например, если я выберу Two, результат будет:

you choose 1
Array
(
    [name] => aaaaaaaa
    [username] => bbbbbbbbb
    [choose] => 2
    [submit] => 
)

То, что все еще показывает you choose 1 относится к первому случаю. Что я должен сделать, чтобы отфильтровать данные перед отправкой в ​​базу данных?По крайней мере, как я могу узнать состояние данных, будь то 1, 2, или you didn't choose anything? Имеет смысл?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Вам необходимо переделать регистр коммутатора, коммутатор должен быть переменной, которая может принимать разные значения, и регистры имеют следующие значения:

switch($_POST['choose']){
    case "1":
        echo "you choose 1";
        break;
    case "2":
        echo "you choose 2";
        break;
    case "":
        echo "you didn't choose anything";
        break;
}

Ключевое слово default может использоваться какпоследний случай, когда ни один из случаев не соответствует значению, он действует как «else» в сценарии переключения:

switch($some_val){
    case "1":
        echo "you entered a 1!";
        break;
    default:
        echo "You didn't enter a 1!!";
        break;
}
0 голосов
/ 12 июня 2018

В вашем фрагменте вы не правильно используете переключатель.Это должно быть так:

switch($_POST['choose']) { // what is being compared
    case 1: // what if it's 1
        echo "you choose 1";
        break;
    case 2: // what if it's 2
        echo "you choose 2";
        break;
    default: // what else
        echo "you didn't choose anything";
        break;
}

Но по умолчанию в вашем случае ничего не значит, потому что у вас есть фиксированные параметры.

Кроме того, isset() только для того, чтобы узнать, существует ли переменная.Это не скажет вам ценность этого.Предполагается, что он будет делать что-то вроде

if(isset($_POST['variable'])){
    $variable = $_POST['variable'];
}else{
    $variable = "";
}

Тогда вы будете использовать новый $variable.

Это полезно, потому что некоторый код не будет работать, если вы попытаетесь получить неопределенные переменные.

РЕДАКТИРОВАТЬ (спасибо GrumpyCrouton):

Или короткая версия:

$variable = isset($_POST['variable']) ? $_POST['variable'] : '';

Где сначала (после =) вы говорите условиепосле ? вы говорите значение, если true, а после : вы говорите значение, если false.

0 голосов
/ 12 июня 2018

Измените это:

if(isset($_POST['submit'])) {
switch(true) {
    case  ( isset($_POST['choose']) == "1" ):
        echo "you choose 1";
        break;
    case  ( isset($_POST['choose']) == "2" ):
        echo "you choose 2";
        break;
    case  ( isset($_POST['choose']) == "" ):
        echo "you didn't choose anything";
        default;
    }
}

на это:

if(isset($_POST['submit'])) {
$choose = isset($_POST['choose']) ? $_POST['choose'] : '';
switch($choose) {
    case  "1" :
        echo "you choose 1";
        break;
    case  "2" :
        echo "you choose 2";
        break;
    default;
        echo "you didn't choose anything";            
    }
}

isset() возвращает только значения true / false.Это может привести к неожиданному / непреднамеренному поведению при использовании так, как вы его используете.Если вы собираетесь использовать коммутатор, вам нужно что-то проверить.и true не является надлежащим тестом.true только когда-либо будет 1. Потому что 0 - ложь, а любое другое значение - истина.Но ключевое слово true на самом деле просто 1.

Так что присвоение значения переменной намного безопаснее, чем тестирование с использованием $_POST['choose'] в переключателе.Теперь у нас есть подходящая переменная для тестирования, и мы можем достичь одного из 3 тестовых случаев.А использование тернарного оператора - это просто сокращение для оператора if else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...