2009-05-16 17 views
0

Ive Programmierung eines Suchformulars mit drei Feldern, und derjenige, der mir Probleme gibt, ist derjenige, der die "LIKE" -Klausel in SQL verwenden. HierDivision durch Null Warnung

ist der Code:

  <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> 

// die SQL (nicht alle)

    $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'%''; 
       } 

Warum es mir nicht geben diesen Fehler zweimal?

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

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

Ich mache keine Division ... bin ich?

Vielen Dank im Voraus

Antwort

10

Ja, tun Sie. Die von LIKE verwendeten Zeichen % sind außerhalb der Zeichenfolge und werden daher als Modulooperator interpretiert. Entfernen Sie die zusätzlichen Zeichen.

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

(Hier habe ich eine Mischung aus einfachen und doppelten Anführungszeichen um das Problem zu sove. Eoin Campbell's Lösung die inneren Apostrophe zu entkommen genauso gültig ist. Sie werden oft feststellen, dass Sie (eine Kombination verwenden, müssen diese Techniken), wenn in PHP Programmierung.)

+0

oder benutzen sprintf. $ queryStr = sprintf ("tbl_clientes WHERE nome LIKE '%% s%'", $ nome); –

+0

und was ist mit Interpunktion? Manchmal, wenn ich im Eingabefeld etwas wie "A.Helper" schreibe und in der Datenbank der Name existiert, warum gibt es keine Ergebnisse? – dutraveller

+0

@Daniel: Sie müssten %% schreiben, um ein Literal% zu erhalten. – Stephan202

3

Ihr Fehler ist mit diesem Stück von SQL

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

Sie müssen die zusätzlichen Apostroph in Ihrem Zeichenfolge zu entkommen.

Ich nehme an, die PHP-Syntax hierfür ist der \ Charakter

z.B.

'tbl_clientes WHERE nome LIKE \'%'$nome'%\'' 
Verwandte Themen