paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005
-
8 août 2005 à 11:07
paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005
-
8 août 2005 à 16:18
Bonjour,
J'ai encore une question.
J'ai créer un formulaire de recherche de machines (liste_machine.php) et j'ai mis un lien sur ma clé primaire : nom_machine.
J'ai affecté à ce nom_machine un lien vers une page (carte_identité_machine.php) dans laquelle j'ai besoin de récupérer la valeur de nom_machine sur laquelle le user à cliquer dans la page précédente (à savoir liste_machine.php).
Comment je peux récuperer cette valeur ? merci de m'aider, je suis totalement bloquée.
J'ai mis une méthode post sur un des formulaires de ma page mais cela ne focntionne pas. Le message d'erreur me donne un undefined index !
Je vous serais vraiment reconnaissante de me "débloquer".
Voici mes codes :
liste_machine.php
<HTML>
<HEAD>
<TITLE> Recherche d'informations à propos d'une machine </TITLE>
<LINK REL = stylesheet HREF='film3.css' TYPE='text/css'>
</HEAD>
Recherche d'informations à propos d'une machine
<FORM ACTION="liste_machine.php" METHOD=POST>
Affiner la sélection grâce aux critères de recherche suivants :
<HR>
Nom de la machine : ET Type de la machine : <select name="type_machine">
echo '<option value ="Tous">Tous</option>';
<?php
require_once("Connect.php");
// connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE, $connexion);
$typeliste = mysql_query("SELECT DISTINCT type_machine FROM Machine");
// Créons la requête en tenant compte de la combinaison logique
if($nom_machine "Tous" AND $type_machine "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine";
else if ($nom_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE type_machine LIKE '%$type_machine%'";
else if ($type_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%'";
else
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%' AND type_machine LIKE '%$type_machine%'";
// Exécution et affichage de la requête
$resultat = mysql_query ($requete, $connexion);
if (mysql_num_rows($resultat)== 0)
{
echo "Il n'y a aucune machine de nom tronqué ou complet '$nom_machine' et de type '$type_machine'";
}
else
{
echo "<CENTER>\"
.\"<CAPTION ALIGN=bottom>Table Machine </CAPTION>\"
.\"----
Nom de la machine |IP de la MachineType de la machine |Constructeur de la machine\n\";
$l =0;
while ($machine = mysql_fetch_object ($resultat))
{
echo \"----
$machine->nom_machine, $machine->ip_machine$machine->type_machine, \"
.\"$machine->constructeur_machine\n\";
}
echo "
</CENTER>\n";
}
?>
</FORM>
</HTML>
carte_identite_machine.php
<HEAD>
<TITLE> Carte d'identité de la machine sélectionnée </TITLE>
<LINK REL =stylesheet HREF='film3.css' TYPE='text/css'>
</HEAD>
Carte d'identité de la machine sélectionnée
<HR>
Informations générales sur la machine
<?php
$nom_machine = $_POST['nom_machine'];
?>
Le nom de la machine est la suivant : 'nom_machine';
</HTML>
A voir également:
Encore et toujours des pb !!! récuperer une variable à partir d'un lien
arnal69130
Messages postés445Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 mars 20072 8 août 2005 à 15:31
ok, en effet, je me suis trompé dans le fichier liste, c'est pas $nom_machine qu'il faut passer dans le lien (ça c'est le résultat de la recherche), mais le nom_machine de la ligne du résultat de la requète que l'on est en train de lire, c'est à dire $machine->nom_machine.
Au passage, quelques remarques sur la forme :
- écrivez les nom et attribut des balises html en minuscule, et entourez les valeurs des attributs par des douvle-quotes
- remplacez les balises , <center> par des styles dans votre css.
Pour énumérer les différents cas logiques, je pense qu'un "switch case" serait mieux.
Voici liste_machine.php :
<html>
<head>
<title>Recherche d'informations à propos d'une machine</title>
<link href= "film3.css" rel="stylesheet" type="text/css" />
<?php
require_once("Connect.php"
);
// connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE
);
mysql_select_db (BASE, $connexion
);
$typeliste = mysql_query("SELECT DISTINCT type_machine FROM Machine"
);
$listTypes='<option value="Tous">Tous</option>'
;
while($type_machine = mysql_fetch_array($typeliste
)) {
$listTypes.='<option value="'.$type_machine['type_machine'].'">'.$type_machine['type_machine'].'</option>'
;
}
?>
</head>
Recherche d'informations à propos d'une machine
<form action="liste_machine.php" method="post">
Affiner la sélection grâce aux critères de recherche suivants :
<hr>
Nom de la machine : ET Type de la machine : <select name ="type_machine"><?php echo $listTypes; ?></select>
<hr>
</form>
Résultat de votre recherche
<?php
require_once("liste_machine.php"
);
// Prenons les variables dans le tableau. C'est surement le bon endroit pour effectuer les contrôles.
if (!empty($_POST['nom_machine'
]))
$nom_machine = $_POST['nom_machine'
];
else
$nom_machine='Tous'
;
if (!empty($_POST['type_machine'
]))
$type_machine = $_POST['type_machine'
];
else
$type_machine='Tous'
;
// Créons la requête en tenant compte de la combinaison logique
switch (true
) {
case ($nom_machine == "Tous") && ($type_machine != "Tous"
) :
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE type_machine LIKE '%$type_machine%'"
;
break; case ($nom_machine !"Tous") && ($type_machine "Tous"
) :
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%'"
;
break;
case ($nom_machine != "Tous") && ($type_machine != "Tous"
) :
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%' AND type_machine LIKE '%$type_machine%'"
;
break;
default : //nom et type = "tous"
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine"
;
break;
}
//Exécution et affichage de la requête
$resultat = mysql_query ($requete, $connexion
);
if (mysql_num_rows($resultat)== 0
) {
echo "Il n'y a aucune machine de nom tronqué ou complet '$nom_machine' et de type '$type_machine'"
;
} else {
echo '<center><caption align=\"bottom\"\">Table Machine </caption>
----
Nom de la machine |IP de la Machine |Type de la machine |Constructeur de la machine |';
$l =0
;
while ($machine = mysql_fetch_object ($resultat
)) {
echo '----
. (($l++)%2).'\">.$machine->nom_machine.'">'.$machine->nom_machine.', '.$machine->ip_machine.', '.$machine->type_machine.', '.$machine->constructeur_machine.', '
;
}
echo "
</center>\n"
;
}
?>
<!--</form>-->
</html>
Dans l'autre fichier, il faut commencer par définir $nom_machine avnt de l'afficher (ou alors ne pas l'afficher si la variable n'existe pas) :
$nom_machine='';
if (!empty($_GET['nom_machine']))
$nom_machine=$_GET['nom_machine'];
echo "Nom de la machine :" .$nom_machine;
ou
if (!empty($_GET['nom_machine'])) {
$nom_machine=$_GET['nom_machine'];
echo "Nom de la machine :" .$nom_machine;
}
malik7934
Messages postés1154Date d'inscriptionmardi 9 septembre 2003StatutMembreDernière intervention15 août 200917 8 août 2005 à 11:40
Et pourquoi pas un truc du genre(l'idee) <FORM ACTION="carte_identite_machine.php?nom=<?php echo $_POST['nom_machine' ];?>" METHOD=POST> dans ton premier fichier et ensuite tu recuperes ca avec un $_GET...
paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005 8 août 2005 à 11:54
J'ai essayé vos deux solutions. cela ne fonctionne pas malheureusement.
J'ai toujours un message d'erreur qui me dit :
Undefined index: nom_machine in c:\program files\easyphp1-8\www\carte_identite_machine.php on line 15
La ligne 15 représente bien $nom_machine = $_POST['nom_machine'];
---
si cette solution ne va pas. est-ce qu'un bouton détail par exemple en bout de ligen est plus facile à gérer ? le problème de récupération de la variable sera-t-il la même ?
est-ce que ce code peut etre adpater pour ce genre de solution ?
merci pour votre aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
arnal69130
Messages postés445Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 mars 20072 8 août 2005 à 12:11
En fait, la 1e fois, la variable $_POST['nom_machine'] n'est pas encore défini. Pour ne pas avoir cet avertissement, il faut donc tester l'existence de la variable avant de tenter de la lire. Tu peux par exemple écrire :
if (!empty($_POST['nom_machine'])
$nom_machine=$_POST['nom_machine'];
paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005 8 août 2005 à 12:25
alors j'ai toujours le même problème par contre, j'ai une question.
dans mon code liste_machine.php, j'ai mon form sur carte_identite_machine qui ce situe avant du code php dans lequel on va chercher en $ _POST les variables nom_machine et type_machine. ce ne serait pas le placement de cette balise d'ouverture du formulaire sur carte_identite qui affecterait le bon fonctionnement ? si oui, ou le placer ? je suis vraiment débutante et c'est pas facile.
arnal69130
Messages postés445Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 mars 20072 8 août 2005 à 13:11
En fait tu as 2 formulaires sur la même page. Ce n'est, a priori, pas un problème, mais il faut que tu comprennes qu'ils sont bien distincts. C'est à dire que si tu postes le 1er formulaire (celui qui pointe sur liste_machine.php), seuls les champs définis entre les 2 1e balises <form></form> seront postés. Le tableau $_POST contiendra donc (et uniquement) :
- nom_machine et
- type_machine.
En revanche, si tu valides le 2nd formulaire (celui qui pointe vers cartte_identite.php), le tableau $_POST ne contiendra rien, il n'y pas de champ défini entre les 2 secondes balises <form></form> ! D'a illeurs, il n'y a pas non plus de bouton submit pour ce 2nd formulaire ! Au lieu de mettre un lien, mets un champ caché contenant le nom_machine et un bouton submit sur chaque ligne...
Ou alors pour afficher la carte_identité, utilises la métode GET. Dans ce cas, tu laisses les liens, et tu les fais pointer vers href="carte_identite_machine.php?nom_machine=<?php echo $_POST['nom_machine' ];?>" . Ensuite, sur la page carte_identite.php, tu récupère la valeur dans nom via la tableau $_GET (et non plus POST) : $_GET['nom_machine']...
paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005 8 août 2005 à 13:48
Je voulais tout d'abord vous remercier pour ton aide.
Dans un premier temps j'ai tenté votre deuxième solution. j'ai une erreur de " '... à la ligne contenant le HREF.
Je vous joins le code. Je n'ai pas changé la place de mon formulaire sur la carte d'identité car il doit agir sur cette partie de code. Est-ce que je me trompe ?
liste_machine.php <HTML>
<HEAD>
<TITLE> Recherche d'informations à propos d'une machine </TITLE>
<LINK REL = stylesheet HREF='film3.css' TYPE='text/css'>
</HEAD>
Recherche d'informations à propos d'une machine
<FORM ACTION="liste_machine.php" METHOD=POST>
Affiner la sélection grâce aux critères de recherche suivants :
<HR>
Nom de la machine : ET Type de la machine : <select name="type_machine">
echo '<option value ="Tous">Tous</option>';
<?php
require_once("Connect.php");
// connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE, $connexion);
$typeliste = mysql_query("SELECT DISTINCT type_machine FROM Machine");
// Créons la requête en tenant compte de la combinaison logique if($nom_machine "Tous" AND $type_machine "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine";
else if ($nom_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE type_machine LIKE '%$type_machine%'";
else if ($type_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%'";
else
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%' AND type_machine LIKE '%$type_machine%'";
// Exécution et affichage de la requête
$resultat = mysql_query ($requete, $connexion);
if (mysql_num_rows($resultat)== 0)
{
echo "Il n'y a aucune machine de nom tronqué ou complet '$nom_machine' et de type '$type_machine'";
}
else
{
echo "<CENTER>\"
.\"<CAPTION ALIGN=bottom>Table Machine </CAPTION>\"
.\"----
Nom de la machine |IP de la MachineType de la machine |Constructeur de la machine\n\";
$l =0;
while ($machine = mysql_fetch_object ($resultat))
{
echo \"----
<A HREF="carte_identite_machine.php?nom_machine=<?php echo $_POST['nom_machine'];?>">$machine->nom_machine, $machine->ip_machine$machine->type_machine, \"
.\"$machine->constructeur_machine\n\";
}
echo "
</CENTER>\n";
}
?>
</FORM>
</HTML>
carte_identite_machine.php
<HTML>
<HEAD>
<TITLE> Carte d'identité de la machine sélectionnée </TITLE>
<LINK REL =stylesheet HREF='film3.css' TYPE='text/css'>
</HEAD>
Carte d'identité de la machine sélectionnée
<HR>
Informations générales sur la machine
<?php
if (!empty($_GET['nom_machine']))
$nom_machine=$_GET['nom_machine'];
echo "Nom de la machine :" ."$nom_machine";
?>
<!--Nom de la machine :
<?php
echo $nom_machine;
?>-->
arnal69130
Messages postés445Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention22 mars 20072 8 août 2005 à 14:19
Ok, pour le fichier cart_identité, je pense que c'est bon comme ça.
Pour utiliser la méthode get, il suffit d'écrire un lien, et de mettre les variables et leur valeursà la suite de l'url, il n'est pas nécessaire de mettre de balise <form></form>. Quelquechose comme : [index.php?nomVar1=valVar1&nomVar2=valVar2 lien]
Dans votre cas, essayez :
while ($machine = mysql_fetch_object ($resultat)) {
echo '<tr class=A'. (($l++)%2).'><td>[carte_identite_machine.php?nom_machine='.$nom_machine.' '.$machine->nom_machine.']</td><td>'.$machine->ip_machine.'</td><td>'.$machine->type_machine.'</td><td>'.$machine->constructeur_machine.'</td></tr>
';
}
En fait, il ne fallait pas remmetre de <?php echo... à l'intérieur d'une instruction echo.
J'espère que ça marchera. Sinon, n'hésitez pas à donner l'erreur exacte.
paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005 8 août 2005 à 14:44
j'ai effectué les modif que vous m'avez indiquées plus le déclaration de if (!empty... ) = cela m'évite des désagréments au chargement de ma page.
j'ai maintenant deux cas :
- ma recherche est basée sur Tous et Tous (pour le deux champs de recherche) et dans ce cas, que je clique sur n'importe quel nom_machine en lien dans mon tableau, je récupère une variable : Tous pou le nom de la machine
- ma recherche, dans tous les autres cas, n'aboutit pas et je tombe sur Notice: Undefined variable: nom_machine in c:\program files\easyphp1-8\www\carte_identite_machine.php on line 18
Nom de la machine :
je continue de vous joindre mes codes. une grand merci pour votre aide.
liste_machine.php
<HTML>
<HEAD>
<TITLE> Recherche d'informations à propos d'une machine </TITLE>
<LINK REL =stylesheet HREF= 'film3.css' TYPE='text/css'>
</HEAD>
Recherche d'informations à propos d'une machine
<FORM ACTION="liste_machine.php" METHOD=POST>
Affiner la sélection grâce aux critères de recherche suivants :
<HR>
Nom de la machine : ET Type de la machine : <select name="type_machine">
echo '<option value ="Tous">Tous</option>';
<?php
require_once("Connect.php");
// connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE, $connexion);
$typeliste = mysql_query("SELECT DISTINCT type_machine FROM Machine");
// Prenons les variables dans le tableau. C'est surement le bon endroit pour effectuer les contrôles.
if (!empty($_POST['nom_machine']))
$nom_machine = $_POST['nom_machine'];
else
$nom_machine='Tous';
if (!empty($_POST['type_machine']))
$type_machine = $_POST['type_machine'];
else
$type_machine='Tous';
// Créons la requête en tenant compte de la combinaison logique if($nom_machine "Tous" AND $type_machine "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine";
else if ($nom_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE type_machine LIKE '%$type_machine%'";
else if ($type_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%'";
else
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%' AND type_machine LIKE '%$type_machine%'";
// Exécution et affichage de la requête
$resultat = mysql_query ($requete, $connexion);
if (mysql_num_rows($resultat)== 0)
{
echo "Il n'y a aucune machine de nom tronqué ou complet '$nom_machine' et de type '$type_machine'";
}
else
{
echo "<CENTER>\"
.\"<CAPTION ALIGN=bottom>Table Machine </CAPTION>\"
.\"----
Nom de la machine |IP de la MachineType de la machine |Constructeur de la machine\n\";
$l =0;
while ($machine = mysql_fetch_object ($resultat))
{
echo '----
'.$machine->nom_machine.', '.$machine->ip_machine.', '.$machine->type_machine.', '.$machine->constructeur_machine.', ';
}
echo "
</CENTER>\n";
}
?>
<!--</FORM>-->
</HTML>
carte_identite_machine.php
<HTML>
<HEAD>
<TITLE> Carte d'identité de la machine sélectionnée </TITLE>
<LINK REL =stylesheet HREF='film3.css' TYPE='text/css'>
</HEAD>
Carte d'identité de la machine sélectionnée
<HR>
Informations générales sur la machine
<?php
if (!empty($_GET['nom_machine']))
$nom_machine=$_GET['nom_machine'];
echo "Nom de la machine :" ."$nom_machine";
?>
<!--Nom de la machine :
<?php
echo $nom_machine;
?>-->
// Prenons les variables dans le tableau. C'est surement le bon endroit pour effectuer les contrôles.
if (!empty($_POST['nom_machine']))
$nom_machine = $_POST['nom_machine'];
else
$nom_machine= 'Tous';
if (!empty($_POST['type_machine']))
$type_machine = $_POST['type_machine'];
else
$type_machine='Tous';
// Créons la requête en tenant compte de la combinaison logique
if($nom_machine "Tous" AND $type_machine "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine";
else if ($nom_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE type_machine LIKE '%$type_machine%'";
else if ($type_machine == "Tous")
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%'";
else
$requete = "SELECT nom_machine, ip_machine, type_machine, constructeur_machine FROM Machine WHERE nom_machine LIKE '%$nom_machine%' AND type_machine LIKE '%$type_machine%'";
// Exécution et affichage de la requête
$resultat = mysql_query ($requete, $connexion);
if (mysql_num_rows($resultat)== 0)
{
echo "Il n'y a aucune machine de nom tronqué ou complet '$nom_machine' et de type '$type_machine'";
}
else
{
echo "<CENTER>\"
.\"<CAPTION ALIGN=bottom>Table Machine </CAPTION>\"
.\"----
Nom de la machine |IP de la MachineType de la machine |Constructeur de la machine<TH>Action\n\";
$l =0;
while ($machine = mysql_fetch_object ($resultat))
{
?>
<FORM ACTION=\"carte_identite_machine.php\" METHOD=POST>
<?php
echo \"----
$machine->nom_machine, $machine->ip_machine$machine->type_machine, \"
.\"$machine->constructeur_machine<TD>\";
?>nom_machine'>
<?php
echo\"\";
}
echo "
</CENTER>\n";
}
?>
paulinett
Messages postés51Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention17 octobre 2005 8 août 2005 à 16:07
merci beaucoup à vous !!!
je suis en stage et je dois développer une appli en PHP et honnetement, je vous dois une fiere chandelle !! je suis débutante en php et en prog aussi... avec juste une semaine de prog PHP derrière moi c'est pas évident ! encore un grand merci !!!