Ограничить счетчик мультиселекта HTML PHP - PullRequest
0 голосов
/ 31 октября 2011

Как я могу ограничить счетчик множественного выбора?Как я хочу, чтобы пользователь выбрал не более 3 элементов из множественного выбора.Если выбрано более 3, я выдам ему ошибку ...

Ответы [ 5 ]

3 голосов
/ 31 октября 2011

Вот полный пример, показывающий HTML-код простой формы и PHP, который позволяет выбирать только до трех вариантов - и дополнительный бонус клиентского JavaScript, объясняющий, как пользователь может сообщить об ошибке до отправки формы.

Вы можете использовать JavaScript, чтобы пользователь не проверял более трех вариантов, но учтите, что проверки на стороне клиента можно легко избежать, поэтому вам все равно придется использовать PHP для проверки на сервере.


HTML

<!doctype html>
<head>
    <meta charset="utf-8">
    <title>Multiselect example</title>
</head>

<p>Please make a selection below (maximum three options!)</p>

<form method="post">
    <select name="selection[]" multiple="multiple">
        <!-- Put <option> elements here -->
    </select>

    <input type="submit">
</form>

<script src="Script.js"></script>

JavaScript (в Script.js):

var formChange = function(e) {
    var i, 
        num = 0, 
        // Obtain a list of all selected options:
        nodeList = this["selection[]"];

    // Loop over all options, count how many are selected.
    for(i = 0; i < nodeList.length; i++) {
        if(nodeList[i].selected) {
            num ++;
        }
    }

    if(num > 3) {
        alert("Please do not select more than three options");
        e.preventDefault();
    }
};

// Attach the same function to the change and submit event.
// This will alert the user of more than three selections 
// as the fourth is selected, or as the form is submitted.
// ... it will also not allow the form to submit with
// more than three checked boxes.
document.forms[0].addEventListener("change", formChange);
document.forms[0].addEventListener("submit", formChange);

PHP:

if(isset($_POST["selection"])) {
    if(count($_POST["selection"]) > 3) {

         die("Error: More than three check boxes were checked.");
    }

    // $_POST["selection"] is an array of the checked values.
}
1 голос
/ 31 октября 2011

Если вы хотите сделать это на стороне сервера, посмотрите на функцию count().Например,

HTML:

<form ...>
  <select name="options[]" multiple="multiple">
    <!-- options here ... -->
  </select>
  ...
</form>

PHP:

<?php

if (isset($_POST['options']) && count($_POST['options']) <= 3) {
    // OK
} else {
    // Not OK
}

?>
1 голос
/ 31 октября 2011

Элемент множественного выбора в PHP возвращает массив, поэтому достаточно просто сравнить count () возвращаемого массива с максимальным значением, которое вы хотите разрешить, и сгенерировать какую-то ошибку, если число превышает предел (бросить исключение, вызвать ошибку и т. д.).

0 голосов
/ 17 апреля 2014

Я знаю, что это старый вопрос, но если кто-то пытается сделать то же самое сейчас и ищет ответы, лучше написать текущий ответ для этого.На данный момент лучше всего использовать AJAX (насколько я знаю):

HTML: form.html

    <form id="myForm" action="validate.php?q=1">
        <select name="options[]" multiple="multiple">
        <!-- options here ... -->
        </select>
        ...
    </form>

PHP: validate.php

    <?php
        switch($_REQUEST['q']){
            case 0:
                if(isset($_REQUEST['options']) && count($_REQUEST['options']) <=3){
                    echo true;
                }else{
                    echo false;
                }
            break;
            case 1:
                if(isset($_POST['options']) && !empty($_POST['options'])){
                    if(count($_POST['options']) <= 3){
                        //OK
                    }else{
                        //NOT OK
                    }
                }
            break;
        }
    ?>

JavaScript (jQuery): script.js

    var form = $("#myForm");
    var options = $("#select_menu option")
    var selected = [];

    $(options).each(function(key,option){
        if(option.selected){
            selected[key] = option;
        }
    });

    $.ajax({
        url: "validate.php",
        method: "GET",
        data: {
            options: selected,
            q: 0
        },
        success: function(Response){
            if(Response === true){
                //OK
            }else{
                //NOT OK
            }
        }
    });

Пожалуйста, исправьте меня, если где-то возникла ошибка.

0 голосов
/ 31 октября 2011

Посмотрите на эту функцию js, предположим, что ваш объект множественного выбора - "muSelect"

function checkSelected() {
 var i;
  var count = 0;
  for (i=0; i<muSelect.options.length; i++) {
    if (muSelect.options[i].selected) {
      count++;
    }
     if (count > 3) {
        alert("cant select more than three options";
        // any  other additionnal processing
      }
  }
}

, а затем вы можете добавить эту функцию как событие onClick

...