Aide pour Formulaire de recherche pour débutant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Aide pour Formulaire de recherche pour débutant

par lafafmentvotre » 16 févr. 2008, 15:06

Bonjour à tous

J'ai trouvé sur le net des exemples que j'ai essayé d'adapter.

Mon formulaire :
<html>
<body>
<form method="post" action="search.php3">

Entrez un numéro de nourrice :<br>

<input type="text" name="Mot" size="15">

<input type="submit" value="Rechercher" alt="Lancer la recherche!">

</form>
</body>
</html>
Mon script "search.php3" :
<html>
<style type="text/css">
<!--
.Style1 {
color: #000000;
text-align: center;
background-color: #FFFF99;
}
.Style2 {
color: #000000;
text-align: center;
background-color: #99CCFF;
}
-->
</style>
<body>
<table width="100%" border="1" align="center">
<TD class="Style1">Prise</TD>
<TD class="Style1">Nourrice</TD>
<TD class="Style1">Port</TD>
<TD class="Style1">Switch</TD>
<TD class="Style1">Bureau</TD>
<TD class="Style1">Type</TD>


  <?php
    //connection au serveur
  	$host = '';
	$user = '';
	$pass = '';
	$db = '';
  	$cnx = mysql_connect($host, $user, $pass) ;


// on choisit la bonne base
mysql_select_db($db) or die ("Connexion a la base impossible");

if (($Mot == "")||($Mot == "%")) {
// Si aucun mot clé n'a été saisi,
// le script demande à l'utilisateur
// de bien vouloir préciser un mot clé

	echo "Veuillez entrer un numéro de nourrice s'il vous plaît!<p>";
}
else {
// On selectionne les enregistrements contenant le mot clé
// dans les keywords ou le titre
	$query = "SELECT distinct count(num_prise) FROM general WHERE num_prise LIKE \"%$Mot%\"";
	$result = mysql_query($query);
	$row = mysql_fetch_row($result);
	$Nombre = $row[0];
// Si aucun enregistrement n'est retourné,
// on affiche un message adéquat
if ($Nombre == "0") {
	echo "<h2>Aucun résultat ne correspond à votre recherche</h2><p>";
}
// Sinon, on affiche le nombre d'enregistrements correspondant
// et les résultats eux-mêmes

else {
	$query = "SELECT distinct * FROM general WHERE num_prise LIKE \"%$Mot%\" ORDER by num_prise ASC";
	$result = mysql_query($query);
	// Si un seul enregistrement est trouvé, on affiche un message au singulier
	if ($Nombre == "1") {
	echo "<a name=\"#resultat\"><h2>Résultat: Un article trouvé</h2></a><p>";
	}
	// Dans le cas contraire le message est au pluriel...
	else {
	echo "<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a><p>";
	}
	while($row = mysql_fetch_row($result))
	{
       echo("<tr align=\"center\"><td>".$row->num_prise."</td><td>".$row->nourrice."</td><td>".$row->port."</td><td>".$row->switch."</td><td>".$row->bureau."</td><td>".$row->type."</td></tr><br>\n") ;

}
}
// on ferme la base
mysql_close();
?>
  </table>
</body>
</html>
Hors, cela ne fonctionne pas dans le sens où il me dit qu'il y a des résultats mais seules les entêtes de mon tableau sont présentes.


Pourriez-vous m'aider s'il vous plait ?

Merci


bingo, il suffisait de remplacer :
mysql_fetch_row($result)
par :
mysql_fetch_object($result)
ca marche maintenant, yeeeeeeeeeeeeeeeeeeeeeesssssssssssssssssss

par d0m » 14 févr. 2008, 09:25

Est ce possible que quelqu'un me modifie mon code complètement afin qu'il fonctionne et que je puisse l'éplucher pour le comprendre mieux que par brides d'infos ?
Non, on ne fait pas des scripts tous fais. Ce que tu veux faire n'est pas quelque chose de compliqué, tu trouveras donc plein de scripts de ce genre et des tutos.
Si tu ne comprends pas mes explications, il faut peut être aller voir et comprendre les tutos sur les formulaires et leur traitement avant d'aller plus loin.

Mais surtout avant d'écrire des requêtes dans tous les sens il faut comprendre le fonctionnement d'un formulaire :
- d'abord tu affiches des ton formulaire HTML avec les champs, ici pour toi c'est un champ de saisie texte et un bouton submit.
- tu rediriges vers une page qui traite ces infos.

par lafafmentvotre » 13 févr. 2008, 22:15

Bonsoir

Alors là j'ai vraiment du mal à suivre.

Je n'arrêtes pas de modifier le script et il me génère d'autres erreurs.
A part l'affichage qui est correct, rien ne fonctionne.

Je ne pensais que c'était si compliqué (enfin compliqué pour un débutant comme moi).

Je ne sais plus où donner de la tête mais ne désespère pas comprendre.

Est ce possible que quelqu'un me modifie mon code complètement afin qu'il fonctionne et que je puisse l'éplucher pour le comprendre mieux que par brides d'infos ?

Merci d'avance

par d0m » 13 févr. 2008, 12:29

Ok maintenant on peut s'attaquer à la présentation de la page.

Tu devrais jeter un coup d'œil au tuto de forumlaire.

Déjà dans ton code HTML tu n'as pas de formulaire.

Code : Tout sélectionner

<FORM NAME="..." ACTION ="..."></FORM>
Tes champs d'entrée (INPUT) et ton bouton de soumission doivent se trouver dans un formulaire pour savoir quoi faire lorsque tu appuie sur le bouton.

Code : Tout sélectionner

<FORM NAME="..." ACTION ="..."> <input type="text" name="search" size='35' id="search"> <input type="submit" value="Recherche"> </FORM>
L'attribut ACTION te permet de spécifier la page sur laquelle tu vas être envoyé après soumission. Dans ton cas, c'est sur la même page donc tu peux mettre :
<FORM NAME="..." ACTION ="lapage.php">
//ou mieux encore
<FORM NAME="..." ACTION ="<?php echo $_SERVER['PHP_SELF'];?>">
Ensuite à la première arrivée sur la page, tu ne veux pas effectuer la recherche car rien n'est encore entrée. Il faut donc tester si tu vient d'effectuer une recherche en appuyant sur le bouton.
Il faut donc donner un nom à ton bouton, par exemple recherche
<INPUT TYPE="submit" NAME="recherche" ...>
....
<?php
//teste si le bouton recherche a été cliqué
if(isset($_POST['recherche'])){
  // connection à la DB
  mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
  mysql_select_db($db) or die ('Erreur :'.mysql_error());
...
}

par lafafmentvotre » 13 févr. 2008, 12:12

Bonjour à tous

Je pleure car j'ai l'impression de tourner en rond (dur dur quand on commence).

$search est forcément vide car, si j'ai bien tout compris, c'est une valeur qui va être renseignée par une personne dans un input et la requête va être exécutée sur cette valeur (dans ma table, cette valeur correspond à une valeur du genre : MI125A ou MI125B, etc....).

Enfin en tout cas, c'est ce que je souhaiterais.

Mon But :

Actuellement, j'ai une équipe de 12 techniciens informatique qui n'ont pas de fichier de suivi en ligne des correspondances entre :

- le numéro de la prise réseau
- le numéro de la nourrice (sous les dalles)
- le nom du switch sur lequel la nourrice est brassée
- le numéro de port
- le bureau

Le seul fichier est un classeur renseigné par nos affaires générales (mais pas en ligne).

Le but de mon script est de leur donner la possibilité de saisir le numéro de la prise dans l'input et qu'il affiche en tableau toutes les correspondances (au moins deux car souvent la prise possède un brassage réseau et un téléphone mais elle porte le même nom).

Par la suite, et si j'arrive à cela en comprenant bien, je ferais un formulaire de saisie/modification afin de modifier mes tables en ligne.

Je suis peut être trop gourmand pour tout cela mais je sais aussi écouter et apprendre.

Merci de votre aide (très précieuse et très intéressante).

par Berzemus » 13 févr. 2008, 11:24

C'est ce qu'on appelle la concaténation:
$var="deux";
echo "un " . $var . " trois";
// affiche "un deux trois"
Pour ce qui est de ton erreur, vérifie si $search n'est pas vide.

Et, selon qu'il est numérique ou pas, il faut la mettre entre guillemets. Mais comme le "num" du champ n'est sans doute pas innocent, c'est sans doute un nombre, et y'a pas besoin :wink: .

par lafafmentvotre » 13 févr. 2008, 11:03

Salut

Je distingue maintenant mon erreur (ça avance ds mon ptit cerveau)

J'ai un message d'erreur :
"SELECT * FROM general WHERE num_prise=
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in D:\xampp\htdocs\Infra_AG\test.php on line 50"

Question, est-ce normal que les guillemets de la ligne suivante s'arrêtent après le = :
$requete = "SELECT * FROM general WHERE num_prise=".$search;
Merci de t'occuper de moi.

par d0m » 13 févr. 2008, 10:45

Tu dois distinguer 3 choses :
- la requête SQL, qui est une chaine de caractère : SELECT .... FROM ....
- l'exécution de la requête, qui se fait à travers l'appel de la fonction mysql_query sur une requête.
- le résultat de la requête, qui est le résultat de la fonction mysql_query.

tu fais ceci :
//exécution de la requête SELECT ....
$requete = mysql_query("SELECT * FROM general WHERE num_prise=$search");
//affichage du résultat de la requête qui est une ressource donc pas affichable tel quel
echo $requete;
//exécution du résutat de la requête !?!
$result = mysql_query($requete); 
alors qu'il faut faire ceci :
//stockage de la requête SQL SELECT ... dans une variable
$requete = "SELECT * FROM general WHERE num_prise=".$search;
//affichage de la requête
echo $requete;
//exécution de la requête
$resultat = mysql_query($requete);

par lafafmentvotre » 13 févr. 2008, 10:32

Aie aie aie ma tête

J'ai pas tout compris.

Désolé mais je débute et j'ai du mal à comprendre ce que tu veux que je fasse

par d0m » 13 févr. 2008, 10:19

Tu as mal lu/compris le code que je t'ai donné.
Il faut mettre la requête SQL sous forme de chaîne de caractères dans la variable $requete,
l'afficher,
et seulement ensuite appliquer la fonction mysql_query pour l'exécuter...

par lafafmentvotre » 13 févr. 2008, 10:10

Bonjour et merci pour la réponse.

J'ai bien des enregistrements dans ma table.

Je les vois via phpmyadmin sans soucis et lors que je lance une requête simple via phpmyadmin, il me remonte le résultat cherché.

J'ai tenté de modifier le script avec tes infos mais cela ne fonctionne pas.

Je remets le code modifié :

<html>
<style type="text/css">
<!--
.Style1 {
color: #000000;
text-align: center;
background-color: #FFFF99;
}
.Style2 {
color: #000000;
text-align: center;
}
-->
</style>
<body>
<br>
<div align="center">
<input type="text" name="search" size='35' id="search">
<input type="submit" value="Recherche">
<br></div>
<table width="80%" border="1" align="center">
</div>
<br><br>
<TR>
<TD class="Style1">Prise</TD>
<TD class="Style1">Nourrice</TD>
<TD class="Style1">Port</TD>
<TD class="Style1">Switch</TD>
<TD class="Style1">Bureau</TD>
<TD class="Style1">Type</TD>
</TR>
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'infra_ag';
$search = $_POST['search'];
 
// connection à la DB
mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

// requête
$requete = mysql_query("SELECT * FROM general WHERE num_prise=$search");
echo $requete;
$result = mysql_query($requete);
// on libère le résultat
mysql_free_result($result);
?>
</body>
</html>

Merci de ton aide car là je galère à mort

par d0m » 13 févr. 2008, 09:46

Salut,

Pour déboguer il faut procéder étape par étape en remontant le code :
if($total) { 
  ...
}
else echo 'Pas d\'enregistrements dans cette table...'; 
il m'affiche toujours : Pas d'enregistrements dans cette table
=> $total == 0 ou total == false
=> mysql_num_rows($result) == 0
=> aucun enregistrement ne correspond à la requête

Il faut donc rechercher à 2 niveau:
- dans la requête elle même
- dans la base de données

1. y a t il des enregistrements dans ta table?
Utilise PHPmyadmin ou une autre application de ce type pour aller voir directement dans ta base.

2. La requête est construite en PHP, mais correspond elle réellement à ce que tu penses qu'elle est?
Il faut donc l'afficher pour vérifier :
$requete = "SELECT * FROM general WHERE num_prise=".$search
echo $requete;
$result = mysql_query($requete); 
3. Si la requête est bien construite, renvoie elle des résultats?
Teste là via phpmyadmin et regarde si elle renvoie quelque chose.

Aide pour Formulaire de recherche pour débutant

par lafafmentvotre » 12 févr. 2008, 18:26

Bonjour à Tous

Je suis nouveau en PHP/SQL et je voudrais réaliser un petit script de recherche affichage d'une base sql en php.

En cherchant sur le web et en modifiant le script, voilà ce que j'ai fait.

Hors cela ne fonctionne pas.

Je voudrais avoir un champ de recherche qui m'affiche les résultats ensuite dans un tableau.
- si oui, alors le tableau est affiché avec juste cette valeur et les autres qui lui correspondent (sur un ou plusieurs lignes en fonction de combien de fois la valeur a été trouvée).
- si non, alors message "Pas d'entrée dans cette table....."

Je cherche quelqu'un qui pourrait m'aider et m'expliquer en même temps afin de pouvoir y arriver seul par la suite.

Merci d'avance à ceux qui peuvent m'aider

Voici le script mais j'ai du oublier des choses :

<html>
<style type="text/css">
<!--
.Style1 {
color: #000000;
text-align: center;
background-color: #FFFF99;
}
.Style2 {
color: #000000;
text-align: center;
}
-->
</style>
<body>
<br>
<div align="center">
<input type="text" name="search" size='35' value='<? echo "$search"; ?>'>
<input type="submit" value="Recherche">
<br></div>
<table width="80%" border="1" align="center">
</div>
<br><br>
<TR>
<TD class="Style1">Prise</TD>
<TD class="Style1">Nourrice</TD>
<TD class="Style1">Port</TD>
<TD class="Style1">Switch</TD>
<TD class="Style1">Bureau</TD>
<TD class="Style1">Type</TD>
</TR>
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'infra_ag';

// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

// requête
//$select = 'SELECT num_prise,nourrice, port, switch,bureau,type FROM general';
$select = 'SELECT * FROM general WHERE num_prise LIKE "$search"';
$result = mysql_query($select,$link) or die ('Erreur :'.mysql_error());
$total = mysql_num_rows($result);

// si on a récupéré un résultat on l'affiche.
if($total) { 
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<TD class="Style2">'.$row["num_prise"].'</td>';
        echo '<TD class="Style2">'.$row["nourrice"].'</td>';
        echo '<TD class="Style2">'.$row["port"].'</td>';
        echo '<TD class="Style2">'.$row["switch"].'</td>';
        echo '<TD class="Style2">'.$row["bureau"].'</td>';
        echo '<TD class="Style2">'.$row["type"].'</td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';
// on libère le résultat
mysql_free_result($result);
?>
</body>
</html>
Je viens de modifier de nouveau ce script avec d'autres Infos mais j'ai l'impression que mon bouton ne gère aucune action et il m'affiche toujours : Pas d'enregistrements dans cette table...
<html>
<style type="text/css">
<!--
.Style1 {
color: #000000;
text-align: center;
background-color: #FFFF99;
}
.Style2 {
color: #000000;
text-align: center;
}
-->
</style>
<body>
<br>
<div align="center">
<input type="text" name="search" size='35' id="search">
<input type="submit" value="Recherche">
<br></div>
<table width="80%" border="1" align="center">
</div>
<br><br>
<TR>
<TD class="Style1">Prise</TD>
<TD class="Style1">Nourrice</TD>
<TD class="Style1">Port</TD>
<TD class="Style1">Switch</TD>
<TD class="Style1">Bureau</TD>
<TD class="Style1">Type</TD>
</TR>
<?php
$host = 'myhost';
$user = 'myuser';
$pass = 'mypass';
$db = 'mydb';
$search = $_POST['search'];

// connection à la DB
mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

// requête
//$select = 'SELECT num_prise,nourrice, port, switch,bureau,type FROM general';
//$select = 'SELECT * FROM general WHERE num_prise WHERE num_prise=$_POST['search';
$result = mysql_query("SELECT * FROM general WHERE num_prise=$search");
$total = mysql_num_rows($result);

// si on a récupéré un résultat on l'affiche.
if($total) { 
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<TD class="Style2">'.$row["num_prise"].'</td>';
        echo '<TD class="Style2">'.$row["nourrice"].'</td>';
        echo '<TD class="Style2">'.$row["port"].'</td>';
        echo '<TD class="Style2">'.$row["switch"].'</td>';
        echo '<TD class="Style2">'.$row["bureau"].'</td>';
        echo '<TD class="Style2">'.$row["type"].'</td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';
// on libère le résultat
mysql_free_result($result);
?>
</body>
</html>
AU SECOURS SVP