У меня странный вопрос, и я понятия не имею, что не так. Я кодирую интерактивную карту Соединенных Штатов. Пользователь щелкает состояние и щелчок записывает в текстовом файле. Затем общее количество кликов отображается на карте. Это в основном быстрый обход полной базы данных.
Код работает. Каждый раз, когда вы щелкаете по состоянию, оно добавляется в текстовый файл. Если состояние еще не существует, для него делается запись. Если это так, то количество кликов просто обновляется. Вот файл:
<?php
// get the input from AJAX
@$state = $_GET['state'];
// get the txt file where all of the states are
$file = 'state_count.txt';
//if state_count.txt exists
if($fopen = fopen($file, 'c')){
//open it and check if the name of the state is recorded or not
if($strpos= strpos(file_get_contents($file), $state)){
//if so, add 1 to the value after the state's name
// in the formate State:#
//cut the text file into an array by lines
$lines = file($file);
//foreach line, parse the text
foreach($lines as $l => $k){
// create a new array $strings where each key is the STATE NAME and each value is the # of clicks
$strings[explode(':', $k)[0]] = explode(':', $k)[1];
}
// add 1 to the # of clicks for the state that was clicked
$strings[$state] = $strings[$state]+1;
// move cursor to the end of the state's name and add 1 to accomodate the :
fseek($fopen, $strpos+strlen($state)+1, SEEK_SET);
// overwrite number in file
fwrite($fopen, $strings[$state]);
// debug print($strings[$state]);
}
//if not, add it with the value 1
else{
file_put_contents($file, $state.":1\n", FILE_APPEND);
}
}
//if does not exist
else{
die('Cannot create or open file.');
}
?>
Проблема, с которой я столкнулся, состоит в том, что код работает для всех состояний, кроме состояния FIRST, по которому выполняется щелчок (т. Е. Текстовый файл пуст, пользователь щелкает одно состояние, это состояние является первым состоянием). В этом случае он никогда не обновляет изначально нажатое состояние, он просто создает для него несколько отдельных записей. В конечном итоге это выглядит так (при условии, что я сначала нажал на Пенсильванию):
Pennsylvania:1
Pennsylvania:1
Utah:1
Colorado:1
Kansas:1
Nebraska:1
Wyoming:1
Indiana:1
Ohio:3
Virginia:1
West Virginia:2
Kentucky:8
Tennessee:1
Georgia:1
Alabama:2
Mississippi:1
Pennsylvania:1
Pennsylvania:1
Pennsylvania:1
Pennsylvania:1
Pennsylvania:1
Я не уверен, почему он это делает, поэтому я надеюсь, что пара свежих глаз может указать на что-то очевидное … У меня есть ощущение, что это связано с линией, если заявление в if($strpos= strpos(file_get_contents($file), $state)){
, но я не могу быть уверен. Кажется странной проблемой, что код работает на 100% правильно для всего, НО первое состояние, которое вы щелкаете. Я знаю, что это первое состояние только потому, что я пробовал это много раз с разными состояниями в качестве первого.
Есть идеи или предложения?
Обратите внимание, что когда вы используете strpos, чтобы увидеть, существует ли строка, вы должны проверить на булево:
if (strpos(....) !== false) { ... }
Иначе у вас будет ложноотрицательный результат, когда ваш strpos вернет 0, как в вашем случае.
В вашем коде вы можете подойти как:
$strpos= strpos(file_get_contents($file), $state);
if ($strpos !== false) {...
Других решений пока нет …