Changer les données d'un tableau à partir d'une balise <select> [Résolu]

Signaler
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Salut a tous,

j'ai une question qui m'interroge????

j'ai une page php qui affiche un tableau contenant diverses données

sur cette meme page il ya un une balise select qui va de 1 a 5

j'aimerais savoir si c'est possible de changer les données du tableau suivant

le select: si c'est 1 on mettra nom=durand prenom =john

.................................

si c'est 5 nom=dupond prenom=paul

est ce possible de faire ca sur la meme page et aussi est tout simplement possible en PHP ou dois je utiliser du JS???

ha oui j'oubliais que mes données viennent de MySQL

et je pensais faire un truc style :SELECT* from table WHERE select=1.....

si on place le select a 1.

J'espere etre clair au possible et aussi recvoir votre aide.

Merci....

19 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Enlève le sprintf, et vois si ça marche :
$requete = 'SELECT * FROM delay_tuning WHERE nb_zone='.$_POST['nb_zone'];
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,

non, tu n'es pas super clair, Latata...

enfin...on va essayer :-)
A retenir : n'oublions pas que javascript est exécuté côté client, le php côté serveur.

Or, tes données proviennent de ta base, il te faut donc du php pour les extirper.

Modifier un tableau html, ça se passe côté client...

Bref, à mon avis :

soit tu soumets ton formulaire sur un onchange de ton select : à ce moment là, dans ta page, avanty d'afficher ton tableau et ton formulaire, tu vérifies si le $_POST['nom_select'] a été rempli. Si oui, tu fais la requête qui va bien pour afficher la bonne personne dans le tableau : SELECT nom, prenom FROM personnes WHERE personne_id = $_POST['nom_select']

Soit tu utilises les requêtes xmlhttp pour éviter un rechargement de ta page, mais le principe restera le même : une requête pour récupérer le nom, et affichage du nom. Sauf que là, comme tu ne recharges pas ta page, il va falloir en plus utiliser du javascript pour modifier la cellule de ton tableau.
Un truc du genre :
|

----

id ="cell_personne">nom prenom

et un javascript qui va faire un truc du genre :
document.getElementById('cell_personne').innerHTML = $nom_personne

Tu peux même faire plus simple du coup :
sans recharger ta page et sans requêtes xmlhttp. Tu crées ton select en récupérant l'id, le nom et le prenom de la personne...et tu concatènes :
<select name="pers">
<option value="id_nom_prenom">nom prenom</option>
...
et sur un onchange, le même code javascript, en gros (après dé-concaténation de la valeur)

Enfin, essayes de comprendre le principe déjà :-)
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
Ok en fait il faut faire un coup de XMLHTTPRequest

(ajax, quoi!!!!)

ce qui permettra d'aller chercher sur MySQL les nouvelles données a afficher

sans recharger la page ?

bah ecoute je vais faire ce que je peux et si j'ai un soucis je te contacte ok?
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
j'essaye de faire la premiere methode que tu m'as conseiller

cad avec le onchange

mais j'ai un petit soucis de syntaxe SQL:



if (!isset ($_POST['nb_zone']) || empty($_POST['nb_zone']))

$_POST['nb_zone'] = '1';



$requete = sprintf("SELECT * FROM delay_tuning WHERE nb_zone=$_POST['nb_zone']");



ya un pb avec le WHERE.

enfin je crois...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
salut



un peu de javascript :

http://www.toutjavascript.com/savoir/xmlhttprequest.php3



on m'a dit que c'était un bon tuto, je l'ai dans mes signets, mais je ne l'ai jamais lu...



et sinon, regarde ça :



...

function recive(){

if (sended){

reponse=R.responseText;

if (reponse!=""){



document.getElementById("commentaires").innerHTML=reponse;

sended=false;

}

}

}

function send(){

if(MSIE){


R = new
ActiveXObject("Microsoft.XMLHTTP") ;

}else{

R = new XMLHttpRequest();

}

R.open("POST", "uploads.php?action=tchat", true);



R.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

R.onreadystatechange = recive;



R.send("post_txt="+txt.value+"&pseudo="+pseudo.value);

txt.value="";

sended=true;

}


c'est un bout de code dont je me sers pour un tchat... c'est simple, mais ça marche...



mon .php n'affiche que :

<li>question</li>

<li>réponse</li>


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Pourquoi sprintf() ?

Ensuite, donne la structure de ta table. A part le *, rien ne cloche dans ta requête.
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
Alors sprintf car en fait je fais ca:

$requete = sprintf("SELECT * FROM delay_tuning WHERE nb_zone=$_POST['nb_zone']");

mysql_select_db($database, $dbconnect);

$result = mysql_query($requete, $dbconnect) or die(mysql_error());



mais il me dit que ya une erreur de syntaxe



et sinon COUCOU j'ai deja lu ce tuto qui est super

et je m'en suis deja servi pr afficher dans un div le dernier message d'une table

avec un timer...

c vraiment bien mais j'avoue que je ne sais aps si je vais le réutiliser

on m'a dit de ne pas trop en faire ....
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
en gros il m'affiche ca:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
salut

t'as toujours un numéro de ligne à coté d'un message d'erreur...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
c'est niquel pr la requete...

je vais me pencher sur le onchange

et si je vois que le chargementd e page laisse a désirer

je ferais de XMLHTTPRequest....



merci a vous deux



ps: vous auriez pas un exemple de onchange sur select?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
<select name="test" onchange="this.form.submit();">
...
</select>
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
oki, merki une fois de plus a toi...

mais pour un peu plus de précision:

sur le onchange je dois créer une fonction qui fera la requete sur la table?

car je sais pas ce que c'est ca: "this.form.submit();
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
this.form.submit(); valide le formulaire



toi t'as qu'a créer une nouvelle fonction js.... et l'appeler en remplaçant

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
ok c'est bien ce que je pensais

je vais voir si je m'en sors...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
Salut,

je t'ai filé un exemple javascript...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
avec ta méthode, ca recharge la page ou non?
sinon je pense essayer le truc de l'ajax....
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
question idiote : t'as essayé ?



non ! sinon, t'aurais pas dit ça ! et en plus, xmlhttprequest, c'est fait pour éviter les rechargements...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
j'avoue j'ai pas essayer
mais je connais cette fonction et c'est vers ca que je vais avancer
merci pr tout...
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
Bon voila ou j'en suis...

apres qlq recherches (notemment sur le tutode ToutJS)

mon code JS donne ca:

<script type="text/javascript">

function change_data() {



var xhr_object = null;

var data = null;

var s1 = form.nb_zone.selectedIndex + 1;



if(window.XMLHttpRequest) // Firefox

xhr_object = new XMLHttpRequest();

else if(window.ActiveXObject) // Internet Explorer

xhr_object = new ActiveXObject("Microsoft.XMLHTTP");

else { // XMLHttpRequest non supporté par le navigateur

alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");

return;

}



if(s1 != "" )

data = "s1="+s1;



xhr_object.open("POST", "change_data.php", true);



xhr_object.onreadystatechange = function() {

if(xhr_object.readyState == 4) {

var tmp = xhr_object.responseText.split(":");

if(typeof(tmp[1]) != "undefined") {

document.getElementById("id1").innerHTML = tmp[0];

document.getElementById("id2").innerHTML = tmp[1];

}

}

}

xhr_object.send(data);

}



</script>

suivi dans le mm fichier de ca:

<?php

......

<table class="select_fuz">

<tr>


<td>Max. difference between 2 setpoints(°C/MN)
:</td>


<td></td>

echo'</select></td>

<td>Number of zone :</td>

<td><select name="nb_zone">';



for($i=1;$i<=5;$i++)

{


echo '<option value=""
onchange="change_data();" >'.$i.'</option>';

}

echo'

</select>

.....?>



et mon fichier change_data.php:

<?php

require_once('connexion.php');

require_once('connect_mysql.php');

require_once('cod_para.php');

//connexion mysql

mysql_select_db($database, $dbconnect);

$requete = "SELECT * FROM delay_tuning WHERE nb_zone=".$_POST['nb_zone'];

mysql_select_db($database, $dbconnect);

$result = mysql_query($requete, $dbconnect) or die(mysql_error());

$retour = mysql_fetch_array($result);

mysql_close();

echo'',$retour[0],'.":"',$retour[1],'';

?>



bon en tout cas ca ne marche pas du tout,

pourtant je pense que le raisonnement est correct,non?

mon JS envoit la valeur du select pr la requete ds change_data.php

puis fais le changement avec les id.....

le truc c que je suis pas sur que change_data.php recoive bien la donnée,deja ca

et pas sur que le coup du document.getElementById("id1").innerHTML = tmp[0];

marche lui aussi



enfin bon si jamais vous voyez mieux que moi le soucis....

MALALAM, COUCOU je m'en remets a vous.