Aller au contenu

[Résolu]Formulaire de recherche

Featured Replies

  • Réponses 71
  • Vues 13,6 k
  • Créé
  • Dernière réponse
Posté(e)
  • 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)

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)
  • Auteur

Voila une capture de ma bdd :

qf5wifdc.png

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)
  • 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)
  • 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)
  • 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)
  • 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)

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)
  • 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)

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)

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)

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":transpi:

Par contre en perl c'est obligatoire, sauf à mettre la condition après l'instruction.

Posté(e)

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)
  • 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)

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.