Une zone de liste deux champs enregistrés

maxireussite Messages postés 405 Statut Membre -  
maxireussite Messages postés 405 Statut Membre -
Bonjour à tous,

Voilà un script qui pour une fois fonctionne très bien. Il me permettait jusqu'à maintenant de visualiser les champs code_client et nom, mais de faire ma sélection d'après le code_client.

je souhaiterais le modifier. L'affichage doit rester le même, mais je souhaite que le champs nom soit désormais pris en compte parmi tous les champs à récupérer par la page "action".

Bien entendu j'ai déjà rajoutér le champs nom dans la table MysQl et modifié la page "Action" pour qu'elle récupère ce champs.


<?php
$db='****';
$cnx=mysql_connect('localhost', '****', '****') or die("Pb connexion serveur ".mysql_error()); // connexion à la base
$db_sel=mysql_select_db($db) or die("Erreur de selection ".mysql_error());
$requette = mysql_query("SELECT code_client,nom FROM oc_clients ORDER BY code_client ASC ") or die("Pb avec la requette ".mysql_error());

?>

<td class="auto-style2" style="width: 131px">code client *</td>
<td><select name="code_client" style="width: 159px">

<?php
while ($valeur = mysql_fetch_array($requette)){
echo "<option value=\"". $valeur['code_client'] ." ". $valeur['nom'] ."\">". $valeur['code_client'] ." ". $valeur['nom'] ."</option>\n";
}
?>


Merci par avance.
A voir également:

9 réponses

TucSky Messages postés 32 Statut Membre 1
 
Donc si j'ai bien compris, tu souhaite récupérai jusque là le "code client" sélectionné dans ta page de traitement "action" et maintenant tu souhaite récupérer le nom qui correspond au code client sélectionné ?

Si c'est ça, je doute que rajouter "$valeur['code_client'] ." ". $valeur['nom']" soit la meilleure solution, car là sur la page action, la variable $_POST['code_client'] va donner "XXX Nom_Du_Client", et bon, ça fait pas très propre ^^

Donc ya trois solutions :
Soit tu récupère le nom du client qui correspond au code client récupéré depuis la page action à l'aide d'une simple requete select nom from table where code_client = '$_POST['code_client']' (en ayant bien retiré $valeur['nom'] de "<option value=")

Soit tu ajoute pendant ta boucle "while ($valeur = mysql_fetch_array($requette)){ ", le nom du client dans la balise option
Exemple :
echo "<option value=\"". $valeur['code_client'] ."\" cli_name=\"". $valeur['nom'] ."\">". $valeur['code_client'] ." ". $valeur['nom'] ."</option>n"; 

et tu ajoute un input hidden donc la valeur devra être mise à jour (en js) à chaque fois que l'utilisateur modifie le select (ou en ajoutant un "onSubmit" à ton formulaire)

Soit tu met un # ou autre caractère qui n'est ni dans code client ni dans le nom entre $valeur['code_client'] et $valeur['nom'] pour ensuite, dans la page de traitement, parser le $_POST['code_client'] en splitant par le # (ou autre) pour obtenir en variable [0] : le code et en [1], le nom...

Enfin j'espère ne pas m'être trop égaré du sujet et que c'etait bien ça que tu cherchai :/
0
maxireussite Messages postés 405 Statut Membre 5
 
Merci de ton aide.

Je teste tes propositions et je te dis ce qu'il en est.
A+
0
maxireussite Messages postés 405 Statut Membre 5
 
Bon, TucSky, je te remercie mais tes propositions ne me sont pas très accessibles vu que je ne touche pas du tout en php.

J'ai tenté d'adapter, sans comprendre ce que je fais...

Peux-tu stp partir d'UNE solution pas trop éloignée de mon existant ?
0
TucSky Messages postés 32 Statut Membre 1
 
Salut

Tu touche pas du tout au php ? Mais pourtant tu a modifié la page action (et ça doit être du php non ?).

Si tu peut modifier la page action, laisse ton code du formulaire comme il etait dans ton premier message, sauf que au niveau de
<option value=\"". $valeur['code_client'] ." ". $valeur['nom'] ."\">
Met un # entre les deux variables :
<option value=\"". $valeur['code_client'] ."#". $valeur['nom'] ."\">
Ensuite dans la page action, au niveau de t'es déclaration de variable POST, met ça

$cli = explode('#',$_POST['code_client']);

$code_cli = intval($client[2]); //contiendra le code client
$nom_cli = mysql_real_escape_string($client[1]); //contiendra le nom du client
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxireussite Messages postés 405 Statut Membre 5
 
Merci bcp, je vais tester cela.
je voulais dire que je ne suis pas un crack, :).
Car je fais des trucs qu'à partir de modèles que j'adapte, et j'avoue ne pas toujours comprendre ce que je fais...
0
maxireussite Messages postés 405 Statut Membre 5
 
TucSky,

Ok pour la page du formulaire,

mais pour la page action, je ne vois pas d'emblée où mettre le code que tu me proposes...

J'ai tenté plusieurs versions, mais elles donnent toutes des erreurs...

Mon script commence ainsi :

"<?php

if(isset($_POST['code_client'])) $code_client=$_POST['code_client'];
else $code_client="";

if(isset($_POST['piece'])) $piece=$_POST['piece'];
else $piece="";

if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";

if(isset($_POST['marque'])) $marque=$_POST['marque'];
else $marque="";

.../..."

Dois-je remplacer toute la ligne relative au code_client ou bien juste remplacer le 1er $_POST ?
0
TucSky Messages postés 32 Statut Membre 1
 
Salut
Remplace donc
if(isset($_POST['code_client'])) $code_client=$_POST['code_client']; 

else $code_client="";

par

if(isset($_POST['code_client'])) {

$cli = explode('#',$_POST['code_client']);
$code_client = intval($cli[2]);
$nom_client = mysql_real_escape_string($cli[1]);
} else {
$code_client="";
$nom_client="";
}

et bien-sur met le # comme j'avais dit avant
0
maxireussite Messages postés 405 Statut Membre 5
 
Malheureusement, ça me donne un message d'erreur. En plus ça ne remplit même pas la table.

Voilà le début du script tel que l'ai adapté :

"<?php

if(isset($_POST['code_client'])) {

$cli = explode('#',$_POST['code_client']);

$code_client = intval($cli[2]);

$nom = mysql_real_escape_string($cli[1]);

} else {

$code_client="";

$nom="";
}

if(isset($_POST['piece'])) $piece=$_POST['piece'];
else $piece="";

.../...
0
maxireussite Messages postés 405 Statut Membre 5
 
@TucSky,

J'ai bien mis "#" comme tu me l'as conseillé ici :

if(isset($_POST['code_client'])) {

$cli = explode('#',$_POST['code_client']);

$code_client = intval($cli[2]);

Je l'ai testé avec un autre code qui fonctionne et j'ai constaté qu'il me ramenait le "#" dans le résultat, c normal ?
0