Aller au contenu

[Résolu]Formulaire de recherche


Messages recommandés

Bonjour a tous !

Je voudrais mettre en place un formulaire de recherche qui irait prendre les résultats dans une base de donnée SQL.

Le but est simple et fonctionne comme un annuaire. Si on donne un nom, la recherche aboutira sur un numéro et inversement, si on donne un numéro la recherche aboutira sur un nom. Je compte sur cette fonction de recherche pour éviter que la liste des noms et numéros ne soit visible dans sa totalité.

Je n'ai absolument pas les compétences pour faire ca moi même, c'est pourquoi je me tourne vers vous en espérant que quelqu'un puisse m'aider.

J'espère avoir été assez clair, mais si ce n'est pas le cas, n'hésitez pas à me demander des précisions ...

Merci d'avance ! :ouioui:

EDIT : j'ai oublié de préciser que si possible, j'aimerais que seules les personnes enregistrées sur le forum (phpbb) puisse faire des recherches. Je ne sais pas trop si c'est faisable mais je l'ajoute au cas ou ... ;)

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 71
  • Créé
  • Dernière réponse

je suppose que phpbb tourne avec les variables de session, donc c'est faisable (dans ton php, tu colle un session_start() et tu fais un if $_SESSION['quelquechose'] (pour le "quelquechose", regarde dans la source de phpbb, histoire de trouver une variable de session qui existe, ca devrait trainer quelquepart au niveau des fonctions de login)

pour ton script, rien de complique, et tu peux le faire:

un formulaire avec un champ a renseignner (numero ou nom), le bouton 'rechercher' et ton script verifie si le champs renseignee l'a ete avec une chaine numerique ou alphabetique et fait soit un SELECT * FROM users WHERE num LIKE "%$_POST['value']%" (t'es pas oblige de mettre les '%', suivant si tu veux que l'user rentre le numero exact ou non) ou WHERE name LIKE "%$_POST['value']%"

bonne chance

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci pour ta réponse Mephisto. J'ai encore un peu de mal avec tout ca mais j'avance dans mon projet.

En cherchant à droite à gauche, je suis tombé sur quelque chose qui ressemble énormément à ce que je veux faire à cette adresse. Je n'aurais qu'a changer quelques petits morceaux pour avoir à la place de Entreprise,TelDétaxé, TelSurtaxé : Nom TelPrivé TelPublique...

Comment puis je arriver à un tel résultat sans tout avoir à coder?

C'est possible de récupérer ce formulaire?

Lien vers le commentaire
Partager sur d’autres sites

sans tout aavoir a coder... haem

- payer quelqu'un (c'est pas avec la danse de la piue que le code va spawner)

- trouver un exemple qui colle suffisemment dans des cours de php

mais t'as de la chance, j'ai pas grand chose a faire cette apres-midi

mais, c'est comme tout, la version gratuite est minimaliste ;)

en gros, tu peux faire ta partie php comme ca:

if (isset($_POST['value']))
 {
$value = mysql_real_escape_string($_POST['value']);
  if (is_numeric($value))
  $sql = "SELECT * FROM $table WHERE num LIKE '".$value."'";
else
  $sql = "SELECT * FROM $table WHERE name LIKE '%".$value."%'";
$res = mysql_query($sql);
eco "<tr><th>nom</th><th>numero de telephone</th></tr>";
$sql = 0;
while ($row = mysql_fetch_assoc($res) && $sql++)
  echo "<tr><td>$row['name']</td><td>$row['num']</td></tr>";
if ($sql)
  echo "<tr><td colspan=2><i>pas de resultats correspondant a votre recherche</i></td></tr>";
echo "</table>";
 }

et ton html ressemblerait a ca

<html><head></head><body><form method=post action=nom_de_fichier.php><input type=text name=value /><input type=submit value=chercher></form></body></html>

tu peux coller ton php en plein milieu de la partie heml, ca changera rien (et dans ce cas, tu peux virer l'attribut "action" du <form>)

nota: le php implique que ta connexion a la BDD soit permanante.

autrement, tu peux rajouter avant la requete: $fd = mysql_connect($server, $username, $passwd); et mysql_select_db($dtabase); (ou mysql_select_db($dtabase, $fd); pour faire propre)

et en fin de script, tu rajoute un mysql_close($fd);

Bonne continuation

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci Mephisto d'avoir pris le temps pour m'aider. J'ai de plus en plus la certitude que je n'y serais jamais arrivé seul ...

Donc, j'ai utilisé ce que tu m'a donné. J'ai mes deux fichier : le php et le html.

J'ai ajouter le code pour la connexion à la bdd au début du fichier php, en remplaçant "server, username, passwd" par mes identifiants et "dtabase" par le nom de ma base.

Et pour que ca fonctionne, il faut que je créé des tables dans ma bdd avec les numéros et le noms, c'est bien ca? Dans ce cas, j'aurais encore probablement besoin d'aide pour la syntaxe... :transpi:

Lien vers le commentaire
Partager sur d’autres sites

CREATE TABLE matable (id INT NOT NULL PRIMARY KEY, name VARCHAR(50), num VARCHAR(50));

et pour remplir: INSERT INTO matable (name, num) VALUES ('le name', 'la value');

des que tu insert des strings, pense au (doubles) quotes, le reste, tu peux le laisser tel quel

tu n'es pas oblige d'avoir un id, ni de le mettre en primary key (c'est juste si tu envisage de faire des relations avec d'autres tables, ...)

Bonne chance :transpi:

Lien vers le commentaire
Partager sur d’autres sites

Et donc si je veux différencier deux types de numéros (privé / publique), je dois faire comme ca :

CREATE TABLE matable (id INT NOT NULL PRIMARY KEY, name VARCHAR(50), num VARCHAR(50), num2 VARCHAR(50));

Et pour remplir :

INSERT INTO matable (name, num, num2) VALUES ('le name', 'le num', 'le num2');

C'est bien ca?

Par contre, je n'ai pas bien compris l'histoire des doubles quotes avec les strings ...

EDIT : je viens de faire un essai en utilisant ce que tu m'a donné précédemment et lorsque je clique sur chercher, j'ai simplement le fichier search.php qui s'affiche a l'écran (le code du fichier), et non pas le nom et le numéro demandé ... :chinois:

Lien vers le commentaire
Partager sur d’autres sites

ton erreure, ca peut venir du fait que tu test ton truc.... sans serveur apache (easyphp sur google devrait t'aider)

et en ce qui concerne le sql, c'est bon

ce que j'ai dit au sujet des strings: en gros, une chaine de caractere est toujours entoure de quote (c'etait juste pour expliquer pourquoi a certains endroits on en met, et a d'autres non ; mais c'etait pas vraiment un commentaire indispensable: tu vera bien, quand ca plantera, c'est de la que ca viendra :pleure2:)

Lien vers le commentaire
Partager sur d’autres sites

Le problème ne vient pas de la, je fais mes tests directement sur mon ftp :iloveyou:

Donc, étant donné que ca plante, j'ai essayé de mettre des guillemets à la place de simple quote, mais ca n'arrange rien.

J'ai toujours le code du search.php qui s'affiche a l'écran dès que j'appuie sur 'Chercher' ...

Lien vers le commentaire
Partager sur d’autres sites

Voila, j'ai enfin résolu ce probleme, c'était juste une erreur de syntaxe. J'ai du aller trop vite et je n'avais pas fais attention que j'avais oublié le ? de <?php ... :sucre::D

Maintenant, autre probleme : Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING dans le fichier search.php à la ligne 17 :

<?php

$fd = mysql_connect($localhost, $login, $pass);
mysql_select_db($mabase, $fd);

if (isset($_POST['value']))
 {
$value = mysql_real_escape_string($_POST['value']);
  if (is_numeric($value))
  $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'";
else
  $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'";
$res = mysql_query($sql);
echo "<tr><th>Nom</th><th>Numéro de téléphone</th><th>Numéro de téléphone 2</th></tr>";
$sql = 0;
while ($row = mysql_fetch_assoc($res) && $sql++)
  echo "<tr><td>$row['name']</td><td>$row['num']</td><td>$row['num2']</td></tr>";
if ($sql)
  echo "<tr><td colspan=2><i>Pas de résultats correspondant à votre recherche</i></td></tr>";
echo "</table>";
 }

mysql_close($fd);

?>

Je n'ai pas vu de quote anormale ou de parenthèse pas refermée, je ne sais pas d'où vient l'erreur?

Lien vers le commentaire
Partager sur d’autres sites

Il y a quelque chose que je ne comprend pas ...

Je débute l'accolade du while après les conditions entre parenthèse, donc juste avec le echo, mais je dois le fermé à quel moment? Je l'ai mis à la fin du premier echo mais j'ai toujours la même erreur. Dans la doute, j'ai quand meme essayé de le fermé plus loin mais idem.

Lien vers le commentaire
Partager sur d’autres sites

pour une boucle ou condition a une ligne, tu n'as pas besoin d'accolades

j'ai deconne

on ne passe pas une case de tableau comme ca...

while ($row = mysql_fetch_assoc($res) && $sql++ && $toto = $row['name'] && $tata = $row['num'] && $pouet = $row['num2'])
 echo "<tr><td>$toto</td><td>$tata</td><td>$pouet</td></tr>";

toutes mes confuse, j'avais pas vu pour phpBB

Lien vers le commentaire
Partager sur d’autres sites

En modifiant le echo comme ca, ca marche :

echo '<tr><td>' . $row['name'] . '</td><td>' . $row['num'] . '</td><td>' . $row['num2'] . '</td></tr>';

Je vois que tu n'a pas fais la même syntaxe, il y en a une préférable a l'autre?

Maintenant que ce problème est réglé, en voici un autre :craint:

J'obtient ca :

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'user1665'@'localhost' (using password: NO) in /.../search.php on line 5

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /.../search.php on line 5

Warning: mysql_query() [function.mysql-query]: Access denied for user 'user1665'@'localhost' (using password: NO) in /.../search.php on line 10

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /.../search.php on line 10

NomNuméro de téléphone Numéro de téléphone 2

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /.../search.php on line 13

Lien vers le commentaire
Partager sur d’autres sites

ta syntaxe est mieux (l'alcool, .... sans commentaires)

et, tes erreures, c'est juste que t'es pas connecte a la db

tu t'es mit en local finalement ? t'as un serveur sql de lance ? avec un compte ?

ou tu es reste sur ton ftp ? ca m'etonnerai qu'il n'y ait pas de passwd pour acceder a la db...

Lien vers le commentaire
Partager sur d’autres sites

Je test directement sur le ftp de mon hébergeur, j'ai donc un compte avec login et mdp pour la bdd.

J'ai un peu modifié le script, qui du coup présente moins d'erreur, mais qui me renvoit :

Notice: Undefined variable: search in /.../search.php on line 17

NomNuméro de téléphone surtaxéNuméro de téléphone détaxé

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /.../search.php on line 21

<?php
error_reporting(E_ALL);

$connection = mysql_connect("localhost","login","pass");
if ( ! $connection )
die ("connection impossible"); 

$mabasededonnee="mabase";
mysql_select_db($mabasededonnee) or die ("pas de connection"); 

if (isset($_POST["value"]))
 {
$value = mysql_real_escape_string($_POST["value"]);
  if (is_numeric($value))
  $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'";
else
  $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'";
$res = mysql_query($sql);
echo "<tr><th>Nom</th><th>Numéro de téléphone</th><th>Numéro de téléphone 2</th></tr>";
$sql = 0;
while ($row = mysql_fetch_assoc($res) && $sql++)
  echo '<tr><td>' . $row['name'] . '</td><td>' . $row['num'] . '</td><td>' . $row['num2'] . '</td></tr>';
if ($sql)
  echo "<tr><td colspan=2><i>Pas de résultats correspondant à votre recherche</i></td></tr>";
echo "</table>";
 }

mysql_close($connection);

?>

J'ai utilisé le error_reporting(E_ALL); pris dans un tuto, et j'ai modifié la connection a la bdd.

Qu'est ce qui ne va pas maintenant?

Lien vers le commentaire
Partager sur d’autres sites

Je l'ai modifié comme ceci mais j'ai toujours une erreur :

<?php
error_reporting(E_ALL);

$connection = mysql_connect("localhost","login","mdp");
if ( ! $connection )
die ("Connection impossible"); 

$mabasededonnee="mabase";
mysql_select_db($mabasededonnee) or die ("Pas de connection"); 

if (isset($_POST["value"]))
 {
$value = mysql_real_escape_string($_POST["value"]);
  if (is_numeric($value))
$search = "search";
 $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'";
else
 $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'";
$res = mysql_query($sql);
echo "<tr><th>Nom</th><th>Numéro de téléphone surtaxé</th><th>Numéro de téléphone détaxé</th></tr>";
$sql = 0;
while ($row = mysql_fetch_array($res) && $sql++)
  echo '<tr><td>' . $row['name'] . '</td><td>' . $row['num'] . '</td><td>' . $row['num2'] . '</td></tr>';
if ($sql)
  echo "<tr><td colspan=2><i>Pas de résultats correspondant à votre recherche</i></td></tr>";
echo "</table>";
 }

mysql_close($connection);

?>

Parse error: syntax error, unexpected T_ELSE in /.../search.php on line 17

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...