2013-12-09 5 views
0

Мне интересно, есть ли способ проверить, какой тип ввода использовался для информации $ _POST. Я хочу использовать этот тип для проверки. Например, если тип ввода = «текст», то я хотел бы иметь возможность создавать определенные проверки для этого типа ввода.PHP введите тип ввода для проверки

Так что это мой код, чтобы создать форму:

$fields = array(
    array(
     'label' => 'Name:', 
     'id' => $meta.'_nhm_lead_name', 
     'class' => 'field-name input', // optional 
     'wrapper_class' => 'four columns', // optional 
     'type' => 'text', 
     'required' => true, 
    ), 
) 

и это, как я генерировать HTML:

public function make_fields(){ 
    foreach($this->fields as $field => $value){ 
     switch ($value['type']) { 
      case 'text': 
       $inputs .= '<li class="field '.$value['wrapper_class'].'">'; 
       $inputs .= '<input type="text" name="'.$value['id'].'" class="'.$value['class'].'" />'; 
       $inputs .= '<span class="error-message"></span>'; 
       $inputs .= '</li>'; 
      break; 
     } 
    } 
    } 
+2

Нет. Клиентская сторона является waaay, чтобы ее легко манипулировать. Я бы никогда не использовал его ... – qwertynl

+0

Используйте валидатор на стороне клиента, такой как jQuery Validate. –

+0

Нет, но вы уже знаете это, так как вы его написали, поэтому вы можете написать подтверждение на стороне сервера –

ответ

1

При получении данных из $ _POST передаются только значения. Однако вы можете использовать следующую структуру:

$Fields = array( 
    array('type' => 'text', 'name' => 'name'), 
    array('type' => 'text', 'name' => 'password'), 
    array('type' => 'number', 'name' => 'age')); 

Затем сгенерируйте html-форму. Итак, вы можете использовать эту же переменную для генерации проверки. Тем не менее, это обычно слишком много работы для нескольких форм (движок для генерации входных данных формы из массива), и это предпочтительнее сделать его «жестко запрограммированным», если вы не используете уже фреймворк с этой функциональностью.

Чтобы дать Вам идею, форма будет, как:

<form method = "POST" action = "/post.php"> 
    <?php foreach ($Fields as $Input) { 
    switch($Input['type']) { 
     case "text": 
     echo "<input type = 'text' name = '" . $Input['name'] . "'>"; 
     break; 
     case "number": 
     echo "<input type = 'number' name = '" . $Input['name'] . "'>"; 
     break; 
     } 
    } 
    ?> 
</form> 

, а затем в post.php:

foreach ($Fields as $Input) { 
    $Name = $Input['name']; 
    if (array_key_exists($Name, $_POST) && 
     // You need to define this: 
     checktype($_POST[$Name], $Input['type'])) { 
    $Posted = $_POST[$Name]; 
    } 
    } 
+0

То, что я делаю. Вот пример массива я использую для создания HTML: $ полей = массив ( \t \t массив ( \t \t \t 'метка' => 'Имя:', \t \t \t 'ID' => $ мета .'_ nhm_lead_name», \t \t \t 'класс' => 'имя поля ввода', // опциональный \t \t \t 'wrapper_class' => 'четыре столбца', // опциональный \t \t \t 'тип' = > 'text', \t \t \t «требуется» => правда, \t \t), –

+0

К сожалению, я не знаю, почему он не отображается в виде кода, но то общее представление о том, что я использую –

+0

Там нет входа в комментариях ни «правильный код», вы можете делать только одну строку. Я попытаюсь дешифровать его (но, возможно, вы захотите положить это в свой OP, чтобы другие знали, что вы сделали до сих пор. –

0

Вы хотели бы сделать это на основе имени ключа в массиве $ _POST. Пользователь может отправлять данные без использования какого-либо типа (например, Javascript), создавая то, что вы просите сделать непрактичным. Они будут отправлять данные, которые не имеют типа.

Данные, отправленные на вашу страницу, могут происходить из любого места.

Для повторного использования создайте объект данных для отправки формы, содержащей валидации для каждого из входов или напишите функцию проверки. Храните это на сервере, чтобы злоумышленник не мог манипулировать данными и изменять способ подтверждения того, что отправляется.

0

Вы могли бы написать скрипт JQuery, который проверяет prop на входе и затем добавляет его в $_POST. Что-то вроде:

HTML:

<form method="POST" action = "here.php" id="myform"> 
    <input type="text" value="hello" id= "input1" /> 
</form> 

JQuery:

var input1type="&input1type=" + $('#input1').prop('type'); 
$.post('here.php', $('#myform').serialize()+input1type); 

Это было бы лучше всего использовать, если вы не можете повлиять на БЕРУЩИХ HTML.

Обратите внимание, что это опасно, и вы не можете доверять данным с www, но это может работать в защищенной (такой как интрасеть) системе.

Смежные вопросы