есть ли лучший способ закодировать форму предложения?

#php #javascript #mysql #multiple-select

#php #javascript #mysql #множественный выбор

Вопрос:

я ищу совет и, возможно, пример кода, ссылки, которые помогут мне улучшить мою форму предложения. текущий сценарий таков:-

для товаров (из базы данных mysql) генерируются динамические (выберите комбинированные) строки вместе с пустыми полями ввода для цены и количества. пользователь добавляет или удаляет строки на основе no. если требуются товары и заполняется цена, количество и т.д., А затем переносится во вторую форму со всеми вычисленными значениями и т.д., Чтобы он мог распечатать то же самое или отправить по электронной почте.

сейчас количество элементов составляет около 3500, поэтому, когда пользователь достигает 5-й или 6-й строки, добавление новой строки становится чрезвычайно медленным. мне нужно извлекать элементы mysql из базы данных, поскольку они время от времени продолжают увеличиваться.

любая помощь очень ценится. заранее спасибо.

ниже приведен код javascript для динамических строк, который я сейчас использую:-

 <SCRIPT language="javascript">
    function addRow(tableID) {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);
        var colCount = table.rows[0].cells.length;
        for(var i=0; i<colCount; i  ) {
            var newcell = row.insertCell(i);
            newcell.innerHTML = table.rows[0].cells[i].innerHTML;
            //alert(newcell.childNodes);
            switch(newcell.childNodes[0].type) {
                case "text":
                        newcell.childNodes[0].value = "";
                        break;
                case "checkbox":
                        newcell.childNodes[0].checked = false;
                        break;
                case "select-one":
                        newcell.childNodes[0].selectedIndex = 0;
                        break;
            }
        }
    }
    function deleteRow(tableID) {
        try {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        for(var i=0; i<rowCount; i  ) {
            var row = table.rows[i];
            var chkbox = row.cells[0].childNodes[0];
            if(null != chkbox amp;amp; true == chkbox.checked) {
                if(rowCount <= 1) {
                    alert("Cannot delete all the rows.");
                    break;
                }
                table.deleteRow(i);
                rowCount--;
                i--;
            }
        }
        }catch(e) {
            alert(e);
        }
    }
</SCRIPT>
  

ниже приведен php-код, который я использую для извлечения элементов mysql в поле со списком выбрать

 <?php
                $con = mysql_connect('connection details');
                if (!$con)  {
                die('Could not connect: ' . mysql_error());}
                $db=mysql_select_db('database',$con);
                $extract1=mysql_query("query")
                                    OR die(mysql_error());
                $numrows1=mysql_num_rows($extract1);
                echo "<select name='item[]' title='selectItemName'>";
                echo "
                        <option>Select Item Description</option>
                        ";
                while ($row1=mysql_fetch_assoc($extract1)) 
                {
                    $ic[]=$row1['ItemName'];
                }
                foreach ($ic as $i){
                echo "<option>".$i."</option>";
                }
                echo    "</select>";
                mysql_close($con);
                ?>
  

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

 <script type="text/javascript"> 

    $(document).ready(function() {
        $("select[multiple]").asmSelect({
            addItemTarget: 'bottom',
            animate: true,
            highlight: true,
            sortable: true
        });

    }); 

</script> 
  

Комментарии:

1. Вы должны опубликовать свой SQL-код в частности, поскольку вы можете извлекать их неэффективно, если это происходит так медленно.

2. вы проявили к нам слишком много любви… / шутка. давайте подождем какого-нибудь хорошего ответа

Ответ №1:

Я не вижу, где вызываются addRow и deleteRow , но я скажу, что здесь могут проявиться некоторые из ваших недостатков:

  1.  var table = document.getElementById(tableID);
 2.  var rowCount = table.rows.length;
 3.  var row = table.insertRow(rowCount);
 4.  var colCount = table.rows[0].cells.length;
  
  1. Каждый раз, когда вы добавляете строку, вы ищете таблицу в документе, что дорого, если вы работаете только с одной таблицей; рассмотрим глобальную переменную и сделаем что-то вроде var table = glob_table || document.getElementById(..);

  2. Несмотря на то, что это свойство и его не так дорого извлекать, это все равно может быть утомительно, когда вы можете увеличивать / уменьшать другую глобальную переменную.

  3. Я не уверен, что правильно добавлять строку в таблицу, прежде чем добавлять ячейки в строку. Мне пришлось бы изучить это обновление: я предполагаю, что это

  4. (то же, что # 2)


Кстати, вы используете jQuery внизу. Лично мне не нравится использовать jQuery, но если вы собираетесь его загружать, вы уже нанесли основной ущерб замедлению работы вашей страницы, так что вы можете также использовать его. На самом деле он довольно хорош в добавлении / удалении элементов, поэтому я бы посоветовал вам прочитать несколько руководств по jQuery.

Кроме того, если ваша база данных увеличивается, то вместо повторного создания параметров вы захотите обновить ее только элементами, которые еще не загружены. Следовательно, вам нужно использовать временную метку в записях вашей базы данных и сохранить эту временную метку в вашем JavaScript / page, чтобы «обновить с момента» ( where update_ts >= $last_update_param )

Комментарии:

1. Спасибо. ну, я только что смог экспортировать таблицу в текстовый файл, а затем поместить ее в параметры и, кажется, все в порядке. единственное, что мне придется время от времени обновлять файл новыми данными.

Ответ №2:

Комбинация выбора из ~ 3500 элементов? Ой. (умножьте N на количество строк? Двойной ой.)

Думаю, возможно, пришло время пересмотреть реализацию. Я бы, вероятно, создал всплывающее окно или что-то в этом роде для выбора элемента, который [при закрытии] заполняет поле формы. Сохраняйте форму, содержащую только значение, а не значение 3500 (умноженное на количество строк).

(Лучший пример, который я могу привести, — это phpBB, и когда вы в панели управления администратора выбираете пользователя, которым хотите управлять. Они выводятся со всей [фильтруемой] базой данных, а затем возвращают значение обратно в родительское окно. Я вижу, что это также выгодно для пользователя, чтобы найти элемент в пределах 3500 записей, а не прокручивать выбранную комбинацию)

Комментарии:

1. кристи привет, спасибо за ответ. я добавил код выбора jquery asm. есть ли способ, которым я могу связать это с дополнительными пустыми полями ввода. я думаю, что это было бы лучшей альтернативой. что вы скажете?

2. @mmdel: Вы могли бы использовать скрытый DIV на странице со значениями и использовать что-то вроде jQuery UI , чтобы открыть диалоговое окно с выбором (сохраняет все интегрированным). Затем просто повторно вызывайте параметры при отображении каждого диалогового окна. В любом случае, вам нужен только один экземпляр для 3500 значений, и вы оставляете в форме только выбранное значение.