Dark Sephiroth Posté(e) le 18 avril 2008 Partager Posté(e) le 18 avril 2008 Normal, t'as un if sans accolades qui contient deux instructions. Remonte ton $search = "search"; d'une ligne (juste au dessus du if) 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 En effet, c'est mieux comme ca :) Dernier petit problème, pour remplir ma bdd... Je créer la table : CREATE TABLE search (id INT NOT NULL PRIMARY KEY, name VARCHAR(50), num VARCHAR(50), num2 VARCHAR(50)); Et pour la remplir : INSERT INTO search (name, num, num2) VALUES ('le name', 'le num', 'le num2'); J'ai donc fais un test en entrant : INSERT INTO search (name, num, num2) VALUES ('Test', '0185858585', '0685858585'); Mais rien ne s'affiche quand j'effectue la recherche ... 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 montre nous le contenu de ta base (les db, les tables de la db utilise, le contenu de ta table search) es-tu surs d'avoir bien rempli ta base ? fais un 'or die' sur le mysql_query pour voir 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 Voila une capture de ma bdd : J'ai ajouté le 'or die' mais ca ne change rien, j'ai toujours Nom Num Num2 suivi de 'Pas de résultat...' qui s'affiche. 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 base de donnee, c'est pas mabase, c'est _look Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 19 avril 2008 Auteur Partager Posté(e) le 19 avril 2008 Oui ca je sais, et elle est correctement entrée dans mon script. J'ai mis un 'or die' après la connexion à la base donc le problème ne vient pas de là ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 20 avril 2008 Partager Posté(e) le 20 avril 2008 apres le if/ese, fais un echo $sql."\n"; apres le mysql_query, fais un print_rr($res); Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 21 avril 2008 Auteur Partager Posté(e) le 21 avril 2008 Le echo $sql."\n"; ne pose pas de problème mais j'obtiens une erreur avec le print_rr($res); et j'arrive pas à la corriger ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 21 avril 2008 Partager Posté(e) le 21 avril 2008 c'est print_r($res), Mephisto a fait une faute de frappe Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 22 avril 2008 Partager Posté(e) le 22 avril 2008 effectivement, desole (dans le doute, verifie tes fonctions sur php.net) Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 22 avril 2008 Auteur Partager Posté(e) le 22 avril 2008 Je penserais a vérifier la prochaine fois, je n'ai pas encore acquis les bons réflexes ... Maintenant, ca me donne ca : SELECT * FROM search WHERE name LIKE '%Test%' Resource id #3 Suivi de nom, num, num2, pas de résulat... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 22 avril 2008 Partager Posté(e) le 22 avril 2008 a, c'est vrai, *sql-query renvoit une ressource... les or die, tu les as mis comment et ou ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 22 avril 2008 Auteur Partager Posté(e) le 22 avril 2008 Voila le fichier search.php : <?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"]); $search = "search"; if (is_numeric($value)) $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'"; else $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'"; echo $sql."\n"; $res = mysql_query($sql) or die (Probleme); print_r($res); 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_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); ?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 22 avril 2008 Partager Posté(e) le 22 avril 2008 C'est quoi ce $sql++ dans while ($row = mysql_fetch_array($res) && $sql++) ? Ca m'étonnerai même pas que ça soit ça qui foute la merde. Enlève le pour tester. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 22 avril 2008 Partager Posté(e) le 22 avril 2008 Vire le et remplace le par mysql-num-rows Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 22 avril 2008 Auteur Partager Posté(e) le 22 avril 2008 Ah ca avance on dirait. Quand je remplace : while ($row = mysql_fetch_array($res) && $sql++) Par : while ($row = mysql_fetch_array($res)) Je vois les données de la base apparaître mais avec encore un petit probleme : SELECT * FROM search WHERE name LIKE '%Test%' Resource id #3NomNuméro de téléphone Numéro de téléphone 2Test01858585850685858585 Sinon, quand je remplace : while ($row = mysql_fetch_array($res) && $sql++) Par : while ($row = mysql_fetch_array($res) && mysql_num_rows($res)) Je la meme chose mais sans les données de la base. Lien vers le commentaire Partager sur d’autres sites More sharing options...
nemesis93_75 Posté(e) le 22 avril 2008 Partager Posté(e) le 22 avril 2008 tu met jamais d'accolade toi après un while il y a des accolades, après un if aussi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 pas obligatoire si t'as qu'une instruction dans ton bloc if/while/for mets ça : while ($row = mysql_fetch_array($res)) echo '<tr><td>' . $row['name'] . '</td><td>' . $row['num'] . '</td><td>' . $row['num2'] . '</td></tr>'; if (mysql_num_rows($res) == 0) echo "<tr><td colspan=2><i>Pas de résultats correspondant à votre recherche</i></td></tr>"; echo "</table>"; Ensuite je vois pas de <table>, je sais pas si t'en a mis un avant tout ça ou pas, sinon il faut le mettre avant echo "<tr><th>Nom</th><th>Numéro de téléphone</th><th>Numéro de téléphone 2</th></tr>"; Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 il me semble qu'il y en a un les accolades ne sont effectivement pas necessaires pour une ligne de traitement par contre, j'ai fait un amalgame avec le C, apparemment, rajouter le $sql++ dans les conditions de la boucle ne doit pas etre une bonne idee alors, pour rester sur le C, et pour le plaisir de ne pas mettre d'accolades for ($sql = 0; $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=3><center><i>Pas de résultats correspondant à votre recherche</i></center></td></tr>"; (enfin, c'est exactement la meme chose qu'a fait Dark Sephiroth) juste penser a changer le 2 en 3 dans le colspan (maintenant que t'affiches plusieurs numeros, t'as plus de colonnes) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 Perso je préfère éviter les accolades en C ou php lorsqu'il n'y a qu'une instruction, ça permet de rendre le code plus lisible. Quand l'instruction est très courte, on peut même mettre tout sur une ligne (if ($blah%2) echo "truc" Par contre en perl c'est obligatoire, sauf à mettre la condition après l'instruction. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 Moi c'est le contraire, je trouve le code plus lisible avec les accolades, même pour une instruction Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 ca part peut-etre un peut trop en hors sujet, mais un defenseur des accolades inutiles, ca merite le buchet, ou le goudron et les plumes :) c'est plus beau sans accolades (c'est quand tu imbrique tes ternaires dans l'affectation, les conditions et le traitement que ca devient un peut hard a la lecture, mais quand bien meme ce serait le cas, les accolades rendraient pas la chose plus lisible) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 chacun sa façon de coder [/fin du HS] Lien vers le commentaire Partager sur d’autres sites More sharing options...
EtnikKoenig Posté(e) le 23 avril 2008 Auteur Partager Posté(e) le 23 avril 2008 Bon et bien rien de nouveau avec vos interventions, j'obtiens toujours le même résultat : SELECT * FROM search WHERE name LIKE '%Test%' Resource id #3NomNuméro de téléphone Numéro de téléphone 2Test01858585850685858585 Que ce soit avec le code à Mephisto : <?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"]); $search = "search"; if (is_numeric($value)) $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'"; else $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'"; echo $sql."\n"; $res = mysql_query($sql) or die (Probleme); print_r($res); echo "</table>"; 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; for ($sql = 0; $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=3><center><i>Pas de résultats correspondant à votre recherche</i></center></td></tr>"; } mysql_close($connection); ?> Ou avec le code à Dark Sephiroth : <?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"]); $search = "search"; if (is_numeric($value)) $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'"; else $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'"; echo $sql."\n"; $res = mysql_query($sql) or die (Probleme); print_r($res); echo "</table>"; 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_array($res)) echo '<tr><td>' . $row['name'] . '</td><td>' . $row['num'] . '</td><td>' . $row['num2'] . '</td></tr>'; if (mysql_num_rows($res) == 0) echo "<tr><td colspan=2><i>Pas de résultats correspondant à votre recherche</i></td></tr>"; } mysql_close($connection); ?> En plus, Dark Sephiroth a raison, il n'y a pas de <table> avant, donc je place echo "</table>"; avant echo "<tr><th>Nom</th><th>Numéro de téléphone</th><th>Numéro de téléphone 2</th></tr>"; Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dark Sephiroth Posté(e) le 23 avril 2008 Partager Posté(e) le 23 avril 2008 Pour le table, t'as mal compris, je voulais dire de faire ça : <?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"]); $search = "search"; if (is_numeric($value)) $sql = "SELECT * FROM $search WHERE num LIKE '".$value."'"; else $sql = "SELECT * FROM $search WHERE name LIKE '%".$value."%'"; echo $sql."\n"; $res = mysql_query($sql) or die (Probleme); print_r($res); [b] echo "<table>";[/b] 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_array($res)) echo '<tr><td>' . $row['name'] . '</td><td>' . $row['num'] . '</td><td>' . $row['num2'] . '</td></tr>'; if (mysql_num_rows($res) == 0) echo "<tr><td colspan=2><i>Pas de résultats correspondant à votre recherche</i></td></tr>"; [b]echo "</table>";[/b] } mysql_close($connection); ?> et là, tes données devraient être bien placé dans ton tableau (tu peux même ajouter <table border="1"> plutôt que <table> pour avoir une bordure) 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.