2015-12-01 6 views
1

Я получаю следующую ошибку из моего сценария.PHP Ошибка undefined index, search script

[Tue Dec 01 09:17:10 2015] [error] [client xxxx] PHP Notice: Undefined index: search in xxx/search.php on line 3, referer: http://xx/ 

Кроме того, я получаю следующую ошибку иногда и

PHP Notice: Undefined offset: 4 in xxx/search.php on line 21, referer: http://xxx/search.php?search=C8053A-B&submit=Search 

Код для search.php является

<?php 
// Words 
$words = trim($_GET["search"], ' '); 
echo '<br>'; 
echo '<div align="center">'; 
echo '<form method="get" action="search.php?" id="searchform">'; 
echo '<input type="text" name="search">'; 
echo '<input type="submit" name="submit" value="Search">'; 
echo '</form>'; 
echo '</div>'; 
if ($words != '') 
{ 
echo 'Search Results for <b>'.$words.'</b>:'; 
$file = fopen('inv.csv', 'r'); 
$crossw = $words; 
$words = array($words); 
$words = array_map('preg_quote', $words); 
$regex = '/'.implode('|', $words).'/i'; 
print('<table border="1"><tr><td width="150">Primary Part #</td><td width="75">Price</td><td width="75">Qty Avail</td><td width="105">Searched #</td><td width="375">Description</td></tr></table>'); 
while (($line = fgetcsv($file)) !== FALSE) { 
list($part, $price, $qty, $cross, $desc) = $line; 
if(preg_match($regex, $cross)) { 
    print('<table border="1"><tr><td width="150">'.$part.'</td><td width="75">'.$price.'</td><td width="75">'.$qty.'</td><td width="105">'.$crossw.'</td><td width="375">'.$desc.'</td></tr></table>'); 
} 
} 
if ($crossw != '') 
{ 
echo 'End of results.'; 
}} 
?> 

Я хочу, чтобы избавиться от ошибок, не выключая вход в систему мой php.ini.

Что является источником/причиной ошибки?

+0

Возможный дубликат [PHP: «Notice: Undefined переменной» и «Примечание: Неопределенный индекс»] (http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – Sean

+1

'if (isset ($ _ GET [" search "])) 'ваш друг – Sean

+0

Возможно, вы не обращаетесь к странице с поиском строки запроса, например:' http: //yourpage.com/? search = blabla', поскольку упоминание Шона 'isset' - это способ пойти :) –

ответ

1

В этом уведомлении вы должны учесть возможность того, что параметр url search не всегда установлен (возможно, когда вы впервые просматриваете эту страницу поиска?).

$words = trim($_GET["search"], ' '); 

Вы предполагаете здесь, что переменная ̀$_GET["search"] всегда доступна для использования, что это не так.

Этот случай должен быть надлежащим образом в PHP с isset() построить с тройным оператором (сокращенное, если/другое заявление) как так:

$words = isset($_GET["search"])?trim($_GET["search"], ' '):''; // $words will be set to an empty string in case the search param is not set. 
+0

Спасибо, это исправлено. Как я уже сказал, я полный новичок, но стараюсь учиться! – Jesse

+0

добро пожаловать, пожалуйста, подумайте о принятии ответа. – Calimero

+0

Сделай, как только я найду, где это сделать! Любые мысли о неопределенной ошибке смещения? – Jesse