EtnikKoenig Posté(e) le 14 avril 2008 Partager Posté(e) le 14 avril 2008 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 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 15 avril 2008 Partager Posté(e) le 15 avril 2008 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 More sharing options...
EtnikKoenig Posté(e) le 15 avril 2008 Auteur Partager Posté(e) le 15 avril 2008 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 More sharing options...
Mephisto Posté(e) le 15 avril 2008 Partager Posté(e) le 15 avril 2008 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 More sharing options...
EtnikKoenig Posté(e) le 16 avril 2008 Auteur Partager Posté(e) le 16 avril 2008 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 avril 2008 Partager Posté(e) le 16 avril 2008 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 16 avril 2008 Auteur Partager Posté(e) le 16 avril 2008 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é ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 avril 2008 Partager Posté(e) le 16 avril 2008 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 ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 17 avril 2008 Auteur Partager Posté(e) le 17 avril 2008 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' ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 17 avril 2008 Partager Posté(e) le 17 avril 2008 t'as installé php et tu l'as ajouté en tant que module à apache ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 17 avril 2008 Auteur Partager Posté(e) le 17 avril 2008 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 ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 17 avril 2008 Partager Posté(e) le 17 avril 2008 test le de chez toi, sur easyphp, tu dois pas avoir de php sur ton ftp Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 17 avril 2008 Partager Posté(e) le 17 avril 2008 Si phpbb fonctionne, je pense qu'il doit y avoir php. Mais du coup, ça explique pas pourquoi le php n'est pas interpreté. Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 17 avril 2008 Auteur Partager Posté(e) le 17 avril 2008 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? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 17 avril 2008 Partager Posté(e) le 17 avril 2008 C'est ta boucle while, tu lui a pas mis d'accolade. Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 17 avril 2008 Auteur Partager Posté(e) le 17 avril 2008 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 More sharing options...
Mephisto Posté(e) le 17 avril 2008 Partager Posté(e) le 17 avril 2008 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 More sharing options...
EtnikKoenig Posté(e) le 17 avril 2008 Auteur Partager Posté(e) le 17 avril 2008 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 18 avril 2008 Partager Posté(e) le 18 avril 2008 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 More sharing options...
EtnikKoenig Posté(e) le 18 avril 2008 Auteur Partager Posté(e) le 18 avril 2008 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? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 18 avril 2008 Partager Posté(e) le 18 avril 2008 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à. Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 18 avril 2008 Auteur Partager Posté(e) le 18 avril 2008 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
nemesis93_75 Posté(e) le 18 avril 2008 Partager Posté(e) le 18 avril 2008 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 ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 18 avril 2008 Partager Posté(e) le 18 avril 2008 Toujours une erreur dans ta requête. il faut que tu fasse ça : $search = "matable"; "SELECT * FROM $search WHERE num LIKE '".$value."'"; Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 18 avril 2008 Auteur Partager Posté(e) le 18 avril 2008 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 More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.