PHP случайно ошибки неопределенного смещения
У меня проблема с неопределенными ошибками смещения. Я прочитал много связанных постов, и я знаю, что это потому, что ключ массива возвращает неопределенный. Однако структура моего кода "должна" гарантировать, что ключи ссылочного массива определены.
Я заполняю ввод HTML, используя следующее:
echo "<option>" . $row['year'] . "|" . $model . "|" . $row['date'] . "|" . $row['status'] . "</option>";
Столбцы даты года и состояния этого выбора имеют одинаковый размер, но модель имеет переменную длину, поэтому я использовал:
$model = str_pad($row['model'],10,".",STR_PAD_BOTH);
$model = str_replace(".", " ", $model);
Опция вывода выглядит так: 2004| R32 Golf |06.05.2014| Открыть. "." padding/replace сохраняет пробел между двумя словами в последующем коде.
Событие 'onchange' этого ввода вызывает javascript/ajax для другого php-файла, передавая значение опции. Этот файл, вызываемый ajax, делает следующее:
$Job=($_GET['job']);
$Job = htmlentities($Job);
$jobInfo = explode ( "|", $Job );
Вывод из этого выглядит следующим образом: 0->2004 1-> & nbsp; R32 Golf/ & nbsp; 2->06.05.2014 3-> Открыто. Итак, наконец, я заменяю & NBSP; снова с пустыми строками.
$model=str_replace(" ", "", $jobInfo[1]);
Ключи используются для запроса MySQL и заполнения полей формы.
Таким образом, проблема, когда я выбираю из своего списка, иногда (70%) он возвращается правильно и заполняет поля, а иногда (30%) он возвращает неопределенное смещение 1, неопределенное смещение 2 и неопределенное смещение 3. Кажется, что это совершенно случайно, но разделитель '|' и implode всегда должен возвращать массив с ключами 0,1,2 и 3.
Эта проблема кажется очень специфичной, но я новичок здесь и хотел предоставить как можно больше информации в надежде найти решение. Было трудно воспроизвести эту проблему без списка выбора и вызова ajax.
JS Ajax: (небрежно)
function getJob(jobInfo)
{
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status == 200)
{
results = xmlhttp.responseText.split("~");
document.getElementById('address').value = results[0];
//more results[]
} else {
alert("There was a problem while using XMLHTTP:\n" + xmlhttp.statusText);
}}}
xmlhttp.open("GET","getJob.php?job="+jobInfo,true);
xmlhttp.send();
}