0

我有一个 HTML选择使用 SELECT DISTINCT 由 SQL 查询填充的表单......这个想法是不显示数据库中的重复值,它几乎可以工作,但在某些情况下它会出现问题。为了填充 SQL 列,我使用 PHP 读取带有分隔符和分解功能的 TXT 文件。如果我在 TXT 文件中有 10 个重复的列,在我的 HTML 上它显示 2,而不是只有 1...我注意到 1 包含来自数据库的 9 个条目,而另一个有 1 个条目始终是TXT 文件的最后一行。恢复:TXT 文件的最后一行总是在 HTML 选择表单上重复。检查数据库,一切正常,我真的不知道为什么它总是在最后一个重复。我讲述了制作 SQL 条目的 PHP,因为我 我不确定问题出在包含 HTML 选择的 PHP 中还是在填充数据库的 PHP 中……我相信问题出在带有 HTML 选择的 PHP 中,因为我正在查看数据库并且一切正常. 这个 php 中的 SQL 查询是这样的:

<td class="formstyle"><select name="basenamelst" class="formstyle" id="basenamelst">
<option value="Any">Any</option>
<?
$sql = mysql_query("SELECT DISTINCT basename FROM dumpsbase where sold=0");
while($row = mysql_fetch_assoc($sql))
  {
    if($row['basename'] == "")
     {
    echo '<option value="'.htmlspecialchars($row['basename'], ENT_QUOTES, 'UTF-8').'">unknOwn</option>'; 
     }
    else
     {
       echo '<option value="'.htmlspecialchars($row['basename'], ENT_QUOTES, 'UTF-8').'">'.htmlspecialchars($row['basename'], ENT_QUOTES, 'UTF-8').'</option>'; 
     }
   }
?>
</select>

请记住:如果我将 10 个重复列上传到数据库,它会在选择时显示 2。一个有 9 个条目,另一个有 1 个条目(始终是我的 TXT 文件的最后一行)......好吧,很多人告诉我修剪()列并且它仍然显示重复......所以我得出的结论是为数据库加载 TXT 时遇到一些问题。这是我将值放入数据库的代码:

$file = fopen($targetpath, "r") or exit("Unable to open uploaded file!");

while(!feof($file))
 {
   $line = fgets($file);
   $details = explode(" | ", $line);

   foreach($details as &$value) // clean each field
    {
      $value = mysql_real_escape_string($value);
      if($value == "")
     {
       $value = "NONE";
     }
     }
   unset($value);
 mysql_query("INSERT INTO dumpsbase VALUES('NULL', '$details[0]', '$details[1]', '$details[2]', '$details[3]', '$details[4]', '0', '$price', 'NONE', now(), 'NONE', 'NONE')") or die ("Uploading Error!");
4

2 回答 2

2

在我看来,错误是当您从文件中填充表格时,其中一个值最终与其他值略有不同。

最后一行不同的事实让我想知道每个值中是否包含换行符(最后一行除外)。

如果是这种情况,您应该能够通过trim()在数据库中运行或类似的方法来纠正它。

[编辑] 理想情况下,您希望尽早执行此操作,即更正数据,而不是在访问时记住它是错误的。如果您找不到初始导入的原因,您可以在之后立即更正数据UPDATE dumpsbase SET basename = TRIM(basename)

于 2013-04-18T22:03:13.627 回答
1

尝试将您的查询更改为以下内容:

SELECT DISTINCT TRIM(basename) FROM dumpsbase WHERE sold=0

希望这可以帮助。

于 2013-04-18T22:05:07.553 回答