2009-05-16 7 views
0

J'ai programmé un formulaire de recherche avec trois champs, et celui qui me pose problème est celui qui utilise la clause "LIKE" dans sql.Division par zéro Avertissement

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

// sql (pas tous)

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

Pourquoi il me donne cette erreur deux fois?

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

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

Je ne fais pas de division ... suis-je?

Merci d'avance

Répondre

10

Oui, vous le faites. Les signes % utilisés par LIKE sont en dehors de la chaîne, et donc interprété comme l'opérateur modulo. Supprimer les signes supplémentaires.

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

(Ici, j'utilise un mélange de guillemets simples et doubles pour Sove le problème. Solution Eoin Campbell's d'échapper aux apostrophes internes est tout aussi valable. Vous trouverez souvent que vous aurez besoin d'utiliser (une combinaison de) ces techniques lors de la programmation en PHP.)

+0

Ou utilisez sprintf. queryStr $ = sprintf ("tbl_clientes OÙ nome 's %%%' LIKE", nome $); –

+0

et qu'en est-il de la ponctuation? Parfois, si j'écris dans la boîte de saisie quelque chose comme "A.Helper" et dans la base de données le nom existe, pourquoi il n'y a pas de résultats? – dutraveller

+0

@Daniel: vous devez écrire %% pour obtenir un% littéral. – Stephan202

3

votre erreur est avec ce morceau de SQL

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

Vous devez échapper aux apostrophes supplémentaires dans votre chaîne.

Je suppose que la syntaxe PHP pour c'est le caractère \

par exemple

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