Page 1 sur 1
récuperer la valeur d'une liste
Posté : 28 juin 2005, 17:26
par Niko
bonjour
j'ai crée une liste déroulante en fonction d'un champ d'une base de donnée :
<? $URL = $PHP_SELF;
$host = "host"; // voir hébergeur
$user = "log"; // vide ou "root" en local
$pass = "pass"; // vide en local
$bdd = "nicolas.fiard"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
<? $table="test";
$query = "SELECT * FROM $table";
$result = mysql_query($query);
?>
<form method="post"
action="liste3.php">
<select name="liste">
<? while ($val = mysql_fetch_array($result)) { ?>
<option><? echo $val["article"]; ?></option>
<? } ?>
</select>
<input type="Submit" value="Envoyer">
</form>
<? mysql_close(); ?>
par contre je ne sais pas comment faire ma page liste3.php de facon a ce que je puisse afficher l'article sélectionner dans la liste déroulante et toute les infos correspondante (descprtion, photo, prix, stock...etc...)
Merci de votre aide..
Posté : 28 juin 2005, 17:29
par VaN
Il faut que tu recupere la valeur de l'<option> choisie :
<form method="post"
action="liste3.php">
<select name="liste">
<? while ($val = mysql_fetch_array($result)) { ?>
<option value="<?php echo $val["id_article"]; ?>"><? echo $val["article"]; ?></option>
<? } ?>
</select>
<input type="Submit" value="Envoyer">
</form>
J'ai utilisé $val["id_article"] mais je sais pas si c'est comme ça dans ta bdd.
sur la page suivante, tu recupere juste cette valeur ainsi :
$id_article = $_GET['id_article'];
et ç'est quasiment fini, t'a juste a refaire une requete en allant chercher la ligne qui correspond à cette ID.
Posté : 28 juin 2005, 17:37
par Niko
Merci pour cette réponse plus que rapide...
Par contre, j'ai pas tout suivi parce que je n'y arrive pas..
Pour info ma bd a 5 champs :
id
article
description
prix
stock
et je voudrais qu' en choisissant sur la liste on tombe sur une page qui donne l'article, la description etc...
Merci de votre aide...
Posté : 28 juin 2005, 17:38
par VaN
remplace juste id_article par id donc, dans le code que je t'es fourni.
regarde bien le code que je t'es fourni, j'ai ajouté une modification par rapport au tien, j'ai rajouté une value dans le <option>.
C'est ça qui va te permettre de savoir quel article a été choisi dans la liste.
Une fois arrivé sur la deuxieme page, tu recupere cet id dans l'url (en post ou en get), et hop, tu va chercher dans ta base l'article correspondant a cette id.
SELECT * FROM articles WHERE id= $'id';
Posté : 28 juin 2005, 17:49
par Niko
excuse moi d'insister mais voila ou j'en suis : sur ma page liste1.php j'ai
<? $URL = $PHP_SELF;
$host = "sql.free.fr"; // voir hébergeur
$user = "****"; // vide ou "root" en local
$pass = "*****"; // vide en local
$bdd = "*****"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
<? $table="test";
$query = "SELECT * FROM $table";
$result = mysql_query($query);
?>
<form method="post"
action="liste3.php/?id">
<select name="liste">
<? while ($val = mysql_fetch_array($result)) { ?>
<option value="<?php echo $val["id"]; ?>"><? echo $val["article"]; ?></option>
<? } ?>
</select>
<input type="Submit" value="Envoyer">
</form>
<? mysql_close(); ?>
et sur ma page liste3.php j'ai
<? $URL = $PHP_SELF;
$host = "sql.free.fr"; // voir hébergeur
$user = "******"; // vide ou "root" en local
$pass = "*****"; // vide en local
$bdd = "******"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
<?
SELECT * FROM test WHERE id= $'id';
echo "$id_article","$article","$description";
?>
et malheureusement, j'arrive sur un résultat :
Parse error: parse error, unexpected T_STRING in /var/www/free.fr/a/f/nicolas.fiard/liste3.php on line 14
desolé d'etre insitant mais c'est mes débuts...lol;)
Merci encore
Posté : 28 juin 2005, 17:58
par VaN
t'inquiete y'a pas de pb.
1. Cette partie comporte plusieurs erreurs :
<?
SELECT * FROM test WHERE id= $'id';
echo "$id_article","$article","$description";
?>
Tout d'abord, SQL ne peut pas faire la jonction entre ton champ id et ta variable $id, car tu ne l'a pas récuperer.
Avant cette requete, tu dois récuperer la valeur de l'id que tu a envoyé par le <select> de la page precedente :
$id = $_POST['id'];
2. une fois que la requete est fait, il faut la traiter :
la syntaxe de ta requete est fausse, il faut affecter la requete a une variable :
//requete
$sql = "SELECT * FROM test WHERE id= $'id'";
//traitement de la requete
$query = mysql_query($sql);
//creation d'un tableau avec les valeurs recupéré ds la base de données
$result = mysql_fetch_array($query);
//ecriture des données du tableau :
echo $result['id'];
echo $result['article'];
echo $result['description'];
Bien sur il faut rajouter de la mise en page a l'ecriture des données.
Posté : 28 juin 2005, 18:07
par Niko
Merci de ton aide, j'avance petit à petit...
donc pour résumer, le fichier liste1.php n'a pas changé depuis mon dernier post.. et le fichier liste3.php donne maintenant :
<? $URL = $PHP_SELF;
$host = "sql.free.fr"; // voir hébergeur
$user = "*****"; // vide ou "root" en local
$pass = "*****"; // vide en local
$bdd = "******"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
<?
$id = $_POST['id'];
//requete
$sql = "SELECT * FROM test WHERE id= $'id'";
//traitement de la requete
$query = mysql_query($sql);
//creation d'un tableau avec les valeurs recupéré ds la base de données
$result = mysql_fetch_array($query);
//ecriture des données du tableau :
echo $result['id'];
echo $result['article'];
echo $result['description'];
?>
Mais malheureusement j'ai toujours une erreur... qui dit :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/a/f/nicolas.fiard/liste3.php on line 20
ca vient de quoi?
Posté : 28 juin 2005, 18:12
par VaN
un probleme dans la requete SQL qui s'est repercuté dans le $result.
verifie que :
1. la table s'apelle bien test
2. elle ne soit pas vide
3. le champ id s'apelle bien id, et non id_article, ou quelque chose ds le genre.
si il s'apelle id_article, change le ds la requete (WHERE id_article=$'id';)
Posté : 28 juin 2005, 18:18
par Niko
alors, sur tes conseils et apres vérificationje confirme que,
1. ma table s'appelle bien test
2. elle n'est pas vide (elle comporte que 3 enregistrement pour l'instant..)
3. le champ s'appelle bien id...
t'as une idée d'ou ca peut venir?
Posté : 28 juin 2005, 18:20
par VaN
ah bah oui, d'ici :
$sql = "SELECT * FROM test WHERE id= $'id'";
regarde a la fin de la ligne : id=$'id' n'est pa correct.
id = '$id' l'est.
Dsl si la faute venait de mon code
[edit] je quitte le travail, pas de connection internet pour ce soir, bonne chance et Have Fun pour le reste

Posté : 28 juin 2005, 18:27
par Niko
On approche du but...lol..

en tout cas merci de l'aide super rapide, j'espère qu'on va y arriver...
par contre avec les 2 codes qui suivent, j'arrive sur une magnifique page blanche..lol
liste1.php
<? $URL = $PHP_SELF;
$host = "sql.free.fr"; // voir hébergeur
$user = "**"; // vide ou "root" en local
$pass = "**"; // vide en local
$bdd = "**"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
<? $table="test";
$query = "SELECT * FROM $table";
$result = mysql_query($query);
?>
<form method="post"
action="liste3.php">
<select name="liste">
<? while ($val = mysql_fetch_array($result)) { ?>
<option value="<?php echo $val["id"]; ?>"><? echo $val["article"]; ?></option>
<? } ?>
</select>
<input type="Submit" value="Envoyer">
</form>
<? mysql_close(); ?>
et liste3.php
<? $URL = $PHP_SELF;
$host = "sql.free.fr"; // voir hébergeur
$user = "**"; // vide ou "root" en local
$pass = "**"; // vide en local
$bdd = "***"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
<?
$id = $_POST['id'];
//requete
$sql = "SELECT * FROM test WHERE id= '$id'";
//traitement de la requete
$query = mysql_query($sql);
//creation d'un tableau avec les valeurs recupéré ds la base de données
$result = mysql_fetch_array($query);
//ecriture des données du tableau :
echo $result['id'];
echo $result['article'];
echo $result['description'];
?>
et le choix de n'importe quel article arrive sur une page blanche alors que ds la teble, les chmap description etc.. sont bien rempli...
Posté : 28 juin 2005, 19:40
par VaN
le debut de ton code est comme ça, ou c'est par mesure de sécurité que t'a mit des *** sur le forum ?
$host = "sql.free.fr"; // voir hébergeur
$user = "**"; // vide ou "root" en local
$pass = "**"; // vide en local
$bdd = "***"; // nom de la BD
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter"); ?>
deja, je te conseille de mettre ce morceau de code dans un nouveau fichier, connexion.php
et au debut de chaque page qui envoie des requete vers la bdd, tu inclue le fichier de connexion :
<?php
include ("connexion.php");
?>
essaie aussi d'enlever l'espace a la fin de la requete :
$sql = "SELECT * FROM test WHERE id= '$id'";
sinon je vois pas.. tout devrait marcher. verifie que t'a pas specifié que la police soit de couleur blanche

(on sait jamais hein)
Posté : 28 juin 2005, 20:41
par Invité
c'est effectivement par mesure de sécurité sur le forum que j'ai mis des ***** au lieu des identifiants....
par contre on avait mis la variable "liste" sur la page 1 et non id du coup sur la page liste3.php j'ai mis
$id = $_POST['liste']
et ca marche... en tout cas merci pour ton aide si rapide! ! ! ! !
Posté : 28 juin 2005, 21:05
par Niko
oups, j'avais oublié de m'identifier....

encore merci ! !
Posté : 28 juin 2005, 21:23
par VaN
bien vu
