我有一个HTML 选择表单,使用SELECT DISTINCT填充SQL查询... 我们的想法是不显示数据库中的重复值,它几乎可以工作,但在某些情况下它会产生问题。为了填充SQL列,我正在使用PHP读取带有分隔符和爆炸功能的TXT文件。如果我在TXT文件中有10个重复的列,在我的HTML上显示2,而不是只有1 ...而且我注意到1是来自数据库的9个条目,而另一个有1个条目总是TXT文件的最后一行。 恢复:TXT文件的最后一行始终在HTML选择表单上重复。 检查数据库,一切看起来都不错,我真的不知道为什么它总是在最后一个重复。 我告诉PHP进入SQL条目,因为我不确定问题是在包含HTML选择的PHP中还是在填充数据库的PHP中...我相信问题出在PHP的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重复列,则会在select上显示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!");
答案 0 :(得分:2)
在我看来,错误就是当你从文件中填充表时,其中一个值与其他值的结果略有不同。
这是最后一行不同的事实让我想知道每个值中是否包含换行符(最后一行除外)。
如果是这种情况,您应该可以通过在数据库中运行trim()
或类似内容来纠正错误。
[编辑]理想情况下,您希望尽早执行此操作,即更正数据,而不是在访问数据时记住它是错误的。如果您无法找到导致初始导入混乱的原因,您可以使用UPDATE dumpsbase SET basename = TRIM(basename)
答案 1 :(得分:1)
尝试将您的查询更改为以下内容:
SELECT DISTINCT TRIM(basename) FROM dumpsbase WHERE sold=0
希望这有帮助。