как предотвратить дублирование данных, если данные поступают из БД? - PullRequest
0 голосов
/ 11 августа 2010

У меня есть форма, состоящая из двух текстовых полей и одного поля со списком. Я хочу предотвратить повторяющиеся данные ввода со стороны клиента. я получаю данные комбобокса из БД, например:

<select id="line" name="faline" >
<?php
   $sql="SELECT `Line_Name` FROM `prod_sch` WHERE `Line_Name` LIKE 'FA %' GROUP BY `Line_Name` ORDER BY `Line_Name`";
   if ($sql) {
               $res=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );
              }
   while ($dat = mysql_fetch_array($res, MYSQL_NUM)) {
           echo "\t\t\t\t\t\t\t\t<option value='".$dat[0]."'>".$dat[0]."</option>\n";
         }
?>
</select>

как объединить или изменить этот код:

<script language="javascript" type="text/javascript">
    $(function() {
        $("#Button1").click(function(e) {
            var itemExists = false;
            var txt = $("#Text1").val();
            e.preventDefault();
            $("#Select1 option").each(function() {
                if ($(this).text() == $.trim(txt)) {
                    itemExists = true;
                    alert('Item already exists');
                }
            });

          if (!itemExists) {
          $("#Select1").append("<option value=\"1\">" + txt + "</option>");
          $("#Text1").val('');
          }
        });
    });           
</script>   

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

Я считаю, что использование SELECT DISTINCT поможет.

1 голос
/ 11 августа 2010

Сначала создайте массив с Line_Name s:

<select id="line" name="faline" >
<?php
   $sql="SELECT `Line_Name` FROM `prod_sch` WHERE `Line_Name` LIKE 'FA %' GROUP BY `Line_Name` ORDER BY `Line_Name`";
   if ($sql) {
               $res=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );
              }

   $lineNames = array();
   while ($dat = mysql_fetch_array($res, MYSQL_NUM)) {
           $lineNames[] = $dat[0];
         }

Затем вызовите array_unique:

   $lineNames = array_unique($lineNames);

И, наконец, повторите итерацию еще раз:

   foreach ($lineNames as $lineName) {
           echo "\t\t\t\t\t\t\t\t<option value='".$lineName."'>".$lineName."</option>\n";
           }
?>
</select>
0 голосов
/ 11 августа 2010

Разве вы не можете просто использовать SQL, чтобы сделать это для вас? то есть с использованием отдельного ключевого слова

$sql="SELECT distinct `Line_Name` FROM `prod_sch` WHERE `Line_Name` LIKE 'FA %' GROUP BY `Line_Name` ORDER BY `Line_Name`";

Извините, у меня было уникальное, прежде чем я имел в виду разные.

...