我有点紧张,这是我在这里的第一个问题,但我在这方面做得很努力,需要一些帮助。
我制作了一个处理草图,通过向php脚本发送查询来访问、排序和保存csv列表。它会获取排序后的列表并显示它们。(我以后才想谈xml或sql)
现在,我正在努力使对名单上的条目进行投票成为可能。
在下面的代码片段中,我有一个来自处理的查询,该查询通过发送字符串对条目进行投票。
我想对照数组中的字段检查处理过程中传递的输入字符串,并通过添加一票来调整分数。
下面的代码不会破坏我的其他运行代码,但也不会调整投票。我怀疑我在某种程度上没有正确访问字符串值,不知道是否有人可以建议我…
$ListV[]='score';
$ListV[]='entry';
<Snip>
if ($type == "voteUp") {
$Entry = $_GET['Entry'];
if(($handle = fopen("List.csv", 'r')) !== FALSE) {
set_time_limit(0);
while(($data = fgetcsv($handle,0,',')) !== FALSE) {
$ListV[$row]=$data;
$row++;
}
fclose ($handle);
$count = count($ListV);
for($i=0; $i<$count; $i++){ //foreach???
if ($rListV[$i][1]==$Entry || strcmp($rListV[$i][1],$Entry)==0) {
$score =int($rListV[$i][0]);
$rListV[$i][0]=$score+1;
}
}
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file.csv');
$listVote = fopen("List.csv",'w');
foreach ($ListV as $values) {fputcsv($listVote,$values);}
fclose($listVote);
}
}
我相信我已经构建了一个可行的2d数组,其中包含分数和入口字段。我把分数放在第一位的原因是,这样我就可以利用关键字排序,并在需要时使用数组索引(例如php中的索引)。
请注意,我并没有试图改变这个列表中的投票指数,只是分数。所以结果应该如下;
投票前:
2157 Kittenz
2157 Dogz
11羚羊
投票支持Dogz之后
2157 Kittenz
2158 Dogz
11羚羊
所以,Kittenz总是索引1,Dogz总是索引2,依此类推。。。。(键排序稍后会给出一个排序的数组)
调整计票的(过于复杂的)部分使用不存在的$rListV
,然后将原始$ListV
放回文件中。
做到了,我的回答姗姗来迟。
由于php中没有稳定的排序(没有额外的代码),我将表的排序和显示与主csv列表分开。
以下是从处理中获取条目并对其进行投票的代码;
else if ($type == "voteUp") { //vote up query
$eVote = $_GET['eVote']; //get voted string
$vList = loadCSV('List.csv'); //load main csv List
$count = count($vList); //string search and add to score
for($i=0; $i<$count; $i++){
if ($vList[$i]['entry']==$eVote || strcmp($vList[$i]['entry'],$eVote )==0) {
$vList[$i]['score'] += 1;
}
saveCSV('List.csv',$vList); //save new score to main csv List
}
}
以及加载和保存csv函数。。。
function loadCSV($file)
{
$handle = fopen($file, 'r');
$header = fgetcsv($handle, 0, ",");
$data = array();
while ($row = fgetcsv($handle, 0, ",")) {
$row_assoc = array();
foreach ($row as $key => $field) {
$row_assoc[$header[$key]] = $field;
}
$data[] = $row_assoc;
}
fclose($handle);
return $data;
}
function saveCSV($file,$array)
{
$handle = fopen($file, 'w');
$header = array("score","entry");
fputcsv ($handle, $header, ",");
foreach($array as $row){
fputcsv($handle, $row, ",");
}
fclose($handle);
}