Page 1 sur 1

barre de recherche - formulaire -

Posté : 01 mars 2005, 17:32
par Vianney
salut tlm,
jsuis en train de faire une barre de recherche.
L'utilisateur selectionne le departement qu'il souhaite afficher a l'aide d'un formulaire de type select.
Ensuite, lorsqu'il valide il va a la page
index.php?p=_department_phonebook&department='.$_POST["dep"].'
Avec un passage de variable par url. On affiche que ce qui interesse le loulou.

Probleme : Notice: Undefined index: dep in ligne 21
la ligne 21 c'est celle la:

Code : Tout sélectionner

echo ' <li><form action="index.php?p=_department_phonebook&department='.$_POST["dep"].'" method="POST">Department search: <SELECT name="dep">';
Mais bon normal qu'elle est pas défini la variable vu que j'attend que l'utilisateur la choisisse ?! :shock:

Et quand je lance la recherche la passage de variable ne se fait pas et il va a la page "index.php?p=_department_phonebook&department="
Alors que si je change action="index.php?p=_department_phonebook&department=It"
il m'affiche tout bien comme y faut ! :/
echo '<div class="news">';
echo '	<h2>search:</h2>';
echo '	<ul class="contentPF">';
echo '	<li><form action="index.php?p=_department_phonebook&department='.$_POST["dep"].'" method="POST">Department search: <SELECT name="dep">';
echo '		<OPTION VALUE=""></OPTION>';
echo '		<OPTION VALUE="administration_accounts">Admininistration/Accounts</OPTION>';
echo '		<OPTION VALUE="GICS">GICS</OPTION>';
echo '		<OPTION VALUE="IT">IT</OPTION>';
echo '		<OPTION VALUE="maintenance">Maintenance</OPTION>';
echo '		<OPTION VALUE="Materials">Materials</OPTION>';
echo '		<OPTION VALUE="production">Production</OPTION>';
echo '		<OPTION VALUE="sales_marketing">Sales/Marketing</OPTION>';
echo '		<OPTION VALUE="service">Service</OPTION>';
echo '		<OPTION VALUE="R_D">R&D</OPTION>';
echo '	</SELECT><input type="submit" value="search"></form></li></div>';
jsuis sur la bonne voie ?
Comment faire ?

Posté : 01 mars 2005, 17:38
par jeff
tu doit avoir des problemes de quote essai de separer le php du html au maximum ton code sera beaucoup plus clair

Re: barre de recherche - formulaire -

Posté : 01 mars 2005, 17:51
par crab
<form action="index.php?p=_department_phonebook&department='.$_POST["dep"].'" method="POST">
Il y a un problème de logique là ! Je suis pas sur de comprendre ce que tu veux faire... pourquoi ne pas utilisée simplement la methode GET et de metre comme action une truc du style "index.php?p=_department_phonebook" ??

ou mieux encore utiliser un petit champ caché (hidden) genre :

Code : Tout sélectionner

<form action="index.php" method="get"> <input type="hidden" name="p" value="<?php echo $_GET['p'] ?>"> <select name="department"> ... </form>
J'ai peut etre rien compris a ce que tu voulais faire, mais faut dire que c'est pas très clair...

Posté : 01 mars 2005, 18:08
par Vianney
lol dsl jvais essayé de me re-expliquer.

l'utilisateur est sur une page d'annuaire. Il veut faire une recherche par departement sur cette page.

Je lui donne le choix dans les departements existants l'aide d'une boite de type select.
Une fois qu'il a choisit il valide.

La validation doit l'amener a cette page
action="index.php?p=_department_phonebook"
Cette derniere a besoin de la variable "department" pour fonctionner (elle contient $department=$_GET['department']; pr recuperer la variable)

je pensais donc passer la valeur du post ds l'url du lien.
action="index.php?p=_department_phonebook&department='.$_POST["dep"].'

mais ca fonctionne pas.
vous voyez un peu ou jveux en venir ?
merci d'avance pr le coup de main :)

Posté : 02 mars 2005, 12:09
par Vianney
j'ai mis un peu d'ordre en separant les codes et changer un peu. maintenant l'erreur ne s'affiche plus dans la page mais dans l'url quand je valide la recherche !! ://

quand je valide ca donne m'envoie a cet url :
index.php?p=_department_phonebook&department=<br%20/><b>Notice</b>:%20%20Undefined%20index:%20%20dep%20in%20<b>
c:\program%20files\easyphp\www\intranet2.3\page_phone_book.php</b>%20on%20line%20<b>14</b><br%20/>

toujours la meme erreur, ca serait trop beau

/////////////////////////////////////////////////////////////
ma barre de recherche dans le fichier phonebook.php
/////////////////////////////////////////////////////////////
<div class="news">
	<h2>search:</h2>
	<ul class="contentPF">
	<li><form action="index.php?p=_department_phonebook&department=<?php echo $_POST["dep"]?>" method="POST">
	Department search: 
	<SELECT name="dep">
		<OPTION VALUE=""></OPTION>
		<OPTION VALUE="administration_accounts">Admininistration/Accounts</OPTION>
		<OPTION VALUE="GICS">GICS</OPTION>
		<OPTION VALUE="IT">IT</OPTION>
		<OPTION VALUE="maintenance">Maintenance</OPTION>
		<OPTION VALUE="Materials">Materials</OPTION>
		<OPTION VALUE="production">Production</OPTION>
		<OPTION VALUE="sales_marketing">Sales/Marketing</OPTION>
		<OPTION VALUE="service">Service</OPTION>
		<OPTION VALUE="R_D">R&D</OPTION>
	</SELECT><input type="submit" value="search">
	</form></li>
</div>

///////////////////////////////////////////////////////////////////////
///////mon fichier page_department_phonebook.php/////////
///////////////////////////////////////////////////////////////////////
<div class="centre">

<?php

// select default database
mysql_select_db($db_name,$cnx); 
//sql query
$department=$_GET['department'];
$sql = "SELECT id,name,firstname,telephone,mobile,department,birthdate,COMMENT FROM people WHERE department ='$department' ORDER BY people.name ASC"; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

while($data = mysql_fetch_assoc($req))
    {
    // on affiche les informations tant que qq1 a afficher
    $res = strlen(stripslashes($data['firstname']));
    $fl = substr(stripslashes($data['firstname']), -$res, 1);  // return the 1st letter of the firstname 
    echo '<div class="news"><ul class="contentPF"><li><a href="index.php?p=_id_phonebook&id='.$data['id'].'">'.stripslashes(ucfirst($data['name'])).' '.stripslashes(ucfirst($data['firstname'])).'</a></li>';
    echo ' <li>Department : <a href="index.php?p=_department_phonebook&department='.stripslashes($data['department']).'">'.stripslashes(ucfirst($data['department'])).'</a></li>';
    echo ' <li>Telephone : '.stripslashes($data['telephone']).'</li></ul>';
    echo ' <div class="p_pbook"><a href="index.php?p=_id_phonebook&id='.$data['id'].'"><img src="photos/'.$fl.''.stripslashes($data['name']).'.jpg" width="70" height="77" alt="Id"></a></div></div>';  
    //warning ! print image dynamically depending on the firstname et the name of the person
    }

// close mysql
mysql_close();
?> 

</div>
////////////////////////////////////////////////////////////////////////////////////////////

je fais un blocage la :|

jai beau lire des articles jcomprend pas bien la difference entre la methode get d'un formulaire et la fonction $_GET[$var] ://

Posté : 02 mars 2005, 14:24
par crab
Le problème de logique est encore là :wink:

Commençant par une petite mise au point.

METHOD :
  • POST : Envoi des données dans le corps de la requete
    GET : Envoi des données codées dans l'URL
en PHP, il est conseillé d'utiliser les tableaux superglobaux
  • $_POST[] : pour récupérer les données envoyée par la methode POST
    $_GET[] : pour récupérer les données envoyée par la methode GET
Revenons a ton problème, tout d'abord en ce qui concerne la notice, je te conseille vivement de lire la FAQ.

Mais cela ne ressout pas tout, car il reste le "problème de logique".
<form action="index.php?p=_department_phonebook&department=<?php echo $_POST["dep"]?>" method="POST">
En fait là ce que tu veux faire c'est refaire ce que fait la methde GET mais en utilisant la méthode POST :!: ça ne joue pas !!!
Tu ne peux pas récupérer ta variable POST dep avant de l'avoir envoyée !

Comme cité dans mon post ci dessus, essaye plutot ça pour commencer:

Code : Tout sélectionner

<form action="index.php?p=_department_phonebook" method="GET"> <!-- GET et pas POST ! -->
Je peux pas t'aider plus...

mod: erreur de copier-coller

Posté : 02 mars 2005, 14:34
par Vianney
ah oki merci pr les infos j'apprend des trucs tous les jours ici :)

le pb c que j'utilise des pseudo frames
jai mon fichier index.php qui contient

<?php include($_GET["page"]) ; /* include differents
pages */?>

et apres pr mes liens jfais
<a href="index.php?p=_news1">le lien vers les news.</a>
(mon fichier page_news1.php est include dans l'index. en gros jmet tout le contenu de mes pages ds des fichiers séparés)

alors la kan jutilise la methode get pr mon formulaire
<form action="index.php?p=_department_phonebook" method="GET">

si je selectionne dans mon formulaire IT par exemple il va m'envoyer a
index.php?dep=IT
alors que moi jvoulais aller a "index.php?p=_department_phonebook&department=It"

ca viens de quoi a ton avis ?

Posté : 02 mars 2005, 14:45
par crab
T'as essayé la deuxième solution que je t'avais proposée (utilisation de champ caché) ??
Avec ça t'es sur que ça marche !

Posté : 02 mars 2005, 15:34
par Vianney
hey ca marche du feu de dieu ton truc !!!

jcomprenais pas comment fonctionnait le type hidden ni le methode get. et apres qqs test c devenu bien clair.

jdefini une valeur par defaut pr "p" qui est department_phonebook
et apres jpasse la valeur du champ avec la methode get et il met tout nikel comme un grand

ca donne ca
form action="index.php" method="get">
<input type="hidden" name="p" value="_department_phonebook">
Department search:
<SELECT name="department">
<OPTION VALUE=""></OPTION>
<OPTION
VALUE="administration_accounts">Admininistration/Accounts</OPTION>
<OPTION VALUE="GICS">GICS</OPTION>
<OPTION VALUE="IT">IT</OPTION>
<OPTION VALUE="maintenance">Maintenance</OPTION>
<OPTION VALUE="Materials">Materials</OPTION>
<OPTION VALUE="production">Production</OPTION>
<OPTION VALUE="sales_marketing">Sales/Marketing</OPTION>
<OPTION VALUE="service">Service</OPTION>
<OPTION VALUE="R_D">R&D</OPTION>
</SELECT><input type="submit" value="search">
</form>

merci bcp d'avoir matté a mon pb :)
zetes de ouf :)