2012-10-16 6 views
0

J'ai une configuration de base de données avec des informations "client". J'ai un formulaire PHP pour rechercher les chaînes, le prénom (nom), le nom (nom) et le numéro de téléphone (téléphone). Pour une raison quelconque, je ne suis même pas en train d'afficher les aides que les fonctions fonctionnent? J'ai relu ce code encore et encore et n'arrive pas à comprendre où il me manque quelque chose.Requête de recherche de chaîne PHP/MySQL

<form name="search" method="post" action="<?=$PHP_SELF?>"> 
Seach for: <input type="text" name="find" /> in 
<Select NAME="field"> 
<Option VALUE="fname">First Name</option> 
<Option VALUE="lname">Last Name</option> 
<Option VALUE="phone">Phone #</option> 
</Select> 
<input type="hidden" name="searching" value="yes" /> 
<input type="submit" name="search" value="Search" /> 
</form> 
<? 
//This is only displayed if they have submitted the form 
if ($searching =="yes") 
{ 
echo "<h2>Results</h2><p>"; 

//If they did not enter a search term we give them an error 
if ($find == "") 
{ 
echo "<p>You forgot to enter a search term"; 
exit; 
} 

// We preform a bit of filtering 
$find = strtoupper($find); 
$find = strip_tags($find); 
$find = trim ($find); 

//Now we search for our search term, in the field the user specified 
$data = mysql_query("SELECT * FROM customer WHERE upper($field) LIKE'%$find%'"); 

//And we display the results 
while($result = mysql_fetch_array($data)) 
{ 
echo $result['fname']; 
echo " "; 
echo $result['lname']; 
echo "<br>"; 
echo $result['phone']; 
echo "<br>"; 
echo "<br>"; 
} 

//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
$anymatches=mysql_num_rows($data); 
if ($anymatches == 0) 
{ 
echo "Sorry, but we can not find an entry to match your query<br><br>"; 
} 

//And we remind them what they searched for 
echo "<b>Searched For:</b> " .$find; 
} 
?> 
+1

Qui a écrit ce code? –

+0

S'il vous plaît, faites-vous plaisir, et arrêtez d'utiliser l'extension 'mysql_ *'. C'est déprécié. Utilisez PDO ou 'mysqli_ *', qui supportent le moyen le plus sûr: les instructions préparées. Votre code est largement ouvert aux attaques par injection. Mais j'ai le soupçon sournois que ce n'est qu'un des nombreux problèmes avec ce code. Je peux me tromper, bien que –

+0

Est-ce que PDO nécessite un plugin? Je suis un peu familier avec mysqli, semble assez solide. @ Ofir c'est sur le site php.about.com comme une simple recherche PHP. – smada

Répondre

2

il y a des erreurs dans votre script, je vais essayer de vous aider:

<? --> <?php 

alors votre formulaire transmet les paramètres par la méthode POST, vous devez vérifier la recherche comme ceci:

if ($_POST['searching'] =="yes") 

et vous avez la même erreur ici:

if ($_POST['find'] == "") 

et ici:

$find = strtoupper($_POST['find']); 

Bye!

+0

Fonta ... Je suis désolé de dire qu'il est tôt et je ne peux pas croire que j'ai manqué le tag d'ouverture. Merci de votre aide. – smada

0

Vous devez d'abord créer une chaîne de requête comme celle ci-dessous, puis utiliser cette chaîne à l'intérieur mysql_query espère que cela fonctionne.

str = "SELECT * FROM customer WHERE upper(".$field.") LIKE'%".$find%."'"; 
Questions connexes