Posté(e) le 18 avril 200817 a Normal, t'as un if sans accolades qui contient deux instructions. Remonte ton $search = "search"; d'une ligne (juste au dessus du if)
Posté(e) le 18 avril 200817 a Auteur 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 ...
Posté(e) le 18 avril 200817 a 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
Posté(e) le 18 avril 200817 a Auteur 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.
Posté(e) le 19 avril 200817 a Auteur 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à ...
Posté(e) le 20 avril 200817 a apres le if/ese, fais un echo $sql."\n"; apres le mysql_query, fais un print_rr($res);
Posté(e) le 21 avril 200817 a Auteur 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 ...
Posté(e) le 22 avril 200817 a effectivement, desole (dans le doute, verifie tes fonctions sur php.net)
Posté(e) le 22 avril 200817 a Auteur 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...
Posté(e) le 22 avril 200817 a a, c'est vrai, *sql-query renvoit une ressource... les or die, tu les as mis comment et ou ?
Posté(e) le 22 avril 200817 a Auteur 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); ?>
Posté(e) le 22 avril 200817 a 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.
Posté(e) le 22 avril 200817 a Auteur 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.
Posté(e) le 22 avril 200817 a tu met jamais d'accolade toi après un while il y a des accolades, après un if aussi
Posté(e) le 23 avril 200817 a 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>";
Posté(e) le 23 avril 200817 a 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)
Posté(e) le 23 avril 200817 a 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.
Posté(e) le 23 avril 200817 a Moi c'est le contraire, je trouve le code plus lisible avec les accolades, même pour une instruction
Posté(e) le 23 avril 200817 a 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)
Posté(e) le 23 avril 200817 a Auteur 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>";
Posté(e) le 23 avril 200817 a 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)
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.