2009-05-16 4 views
0

Я программировал форму поиска с тремя полями, и тот, который вызывает у меня проблемы, - это тот, который использует предложение «LIKE» в sql.Отдел с нулевым предупреждением

Вот код:

  <form method="post" action="<?php $_SERVER['PHP_SELF']?>"> 
      <p> 

      <label for="nome">Nome Empresa:</label> 
      <input type="text" name="nome" id="nome"/> 

      <label for="concelho">Concelho:</label> 
       <select name="concelho"> 
         <option id="" selected="selected" value="">Seleccione o Concelho</option> 
          <option value="1" id="1">Um</option> 
          <option value="2" id="1">Dois</option> 
       </select> 

      <label for="actividade">Actividade:</label> 
       <select name="actividade"> 
         <option id="" selected="selected" value="">Seleccione a actividade</option> 
          <option value="1" id="1">Actividade Um</option> 
          <option value="2" id="1">Actividade Dois</option>  
       </select> 
      </p> 
      <p> 
      <input type="submit" name="pesquisar" value="Pesquisar"/> 
      </p> 
      </form> 

// СКП (не все)

    $nome = mysql_real_escape_string($_POST['nome']); 



       // Pesquisa a partir da form 
       if (isset($_POST['pesquisar'])) { 

       $queryStr = 'SELECT * FROM '; 
       if(!empty($nome)){ 
        $queryStr .= 'tbl_clientes WHERE nome LIKE '%'$nome'%''; 
       } 

Почему это дает мне эту ошибку дважды?

Warning: Division by zero in .. on line .. 

Warning: Division by zero in .. on line .. 

Я не делаю дивизию ... я?

Заранее благодарен

ответ

10

Да, вы делаете. Знаками %, используемыми LIKE, являются вне строка, и, следовательно, интерпретируется как оператор modulo. Удалите дополнительные знаки.

$queryStr .= "tbl_clientes WHERE nome LIKE '%$nome%'"; 

(Здесь я использовал смесь одинарные и двойные кавычки, чтобы sove проблему. Eoin Campbell's решение спасаясь внутренние одиночные кавычки так же действует. Вы часто находите, что Вы должны будете использовать (сочетание) эти методы при программировании в PHP.)

+0

Или используйте Sprintf:. $ queryStr = Sprintf ("tbl_clientes ГДЕ нома LIKE '%% s%'", $ нома); –

+0

и как насчет пунктуации? Иногда, если я пишу в поле ввода что-то вроде «A.Helper», а в базе данных имя существует, почему нет результатов? – dutraveller

+0

@ Даниэль: вам нужно написать %%, чтобы получить литерал%. – Stephan202

3

вашей ошибка с этой частью SQL

'tbl_clientes WHERE nome LIKE '%'$nome'%'' 

Вам нужно, чтобы избежать лишнего апострофа внутри строки.

Я предполагаю, что PHP синтаксис для этого является \ характер

например

'tbl_clientes WHERE nome LIKE \'%'$nome'%\'' 
Смежные вопросы