Posté(e) le 14 avril 200817 a 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 ! 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 ... Modifié le 1 mai 200817 a par EtnikKoenig
Posté(e) le 15 avril 200817 a 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
Posté(e) le 15 avril 200817 a Auteur 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?
Posté(e) le 15 avril 200817 a 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
Posté(e) le 16 avril 200817 a Auteur 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...
Posté(e) le 16 avril 200817 a 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
Posté(e) le 16 avril 200817 a Auteur 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é ...
Posté(e) le 16 avril 200817 a 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 )
Posté(e) le 17 avril 200817 a Auteur Le problème ne vient pas de la, je fais mes tests directement sur mon ftp 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' ...
Posté(e) le 17 avril 200817 a Auteur Moi personnellement non, mais je fais mes tests directement sur le ftp de mon hébergeur, donc le problème ne doit pas venir de la. En plus, j'utilise un forum phpbb sur cet hébergeur donc il y a bien le support du php ...
Posté(e) le 17 avril 200817 a Si phpbb fonctionne, je pense qu'il doit y avoir php. Mais du coup, ça explique pas pourquoi le php n'est pas interpreté.
Posté(e) le 17 avril 200817 a Auteur 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 ... 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?
Posté(e) le 17 avril 200817 a Auteur 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.
Posté(e) le 17 avril 200817 a 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
Posté(e) le 17 avril 200817 a Auteur 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 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 5Warning: 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
Posté(e) le 18 avril 200817 a 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...
Posté(e) le 18 avril 200817 a Auteur 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 17NomNumé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?
Posté(e) le 18 avril 200817 a Ca vient d'un problème au niveau de ta requête. Ta variable $search n'est pas définie, je pense que ça vient de là.
Posté(e) le 18 avril 200817 a Auteur Ah oui exact, en fait c'est le nom de ma table, donc a mettre entre simple quote. Aller, on continu dans les erreurs : Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /.../search.php on line 21
Posté(e) le 18 avril 200817 a il est pas d'accord sur ton mysql_fetch_assoc..... mais alors pourquoi.... c'est pas un mysql_fetch_array qu'il faut faire? (je débute en php )
Posté(e) le 18 avril 200817 a Toujours une erreur dans ta requête. il faut que tu fasse ça : $search = "matable"; "SELECT * FROM $search WHERE num LIKE '".$value."'";
Posté(e) le 18 avril 200817 a Auteur 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
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.