Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour a tous,
J'ai un formulaire donc le code est le suivant:
Je voudrais que quand l'utlisateur clique sur [Add functionality], s'ajoute une nouvelle ligne de la table et ainsi de suite.
j'ecris donc le code suivant add_functionality.php
j'inclus ce code dans le premier code ci-dessus de la facon suivante:
le tout c'est que je ne clique meme pas sur le lien [Add functionality] mais la ligne que je veux ajouter s'affiche .
pourriez vous m'aider a creer des lignes de mon tableau au fur et a mesure que l'utilisateur clique sur [Add functionality]?
Il y aussi les variables, comment je les gere?
Merci d'avance.
Billy
Hors ligne
Ça sent l'AJAX amoniaqué à plein nez cette affaire.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Oui justement j'ai utilise AJAX:
j'ai un code qui cree la ligne (status.php)
<?php
require_once ('../mysqli_connect.php');
// Retrieve all the statuses of a functionality
$q = "SELECT F_status_ID, Functionality_status FROM fstatuses ORDER BY F_status_ID ASC";
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) > 0) {
while ($menu_row = mysqli_fetch_array($r, MYSQLI_NUM)) {
echo "<option value=\"$menu_row[0]\">$menu_row[1]</option>\n";
}
}
mysqli_free_result($r);
unset($menu_row);
?>
</select>
</td>
<td> <textarea name="fdescription" rows="2" cols="30" wrap="hard" ></textarea> </td>
<td valign="center"><a href="delete.php">[delete]</a></td>
</tr>
Ensuite, j'ecris le code suivant:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr
}
/**
* Méthode qui sera appelée sur le click du bouton
*/
function go(){
var xhr = getXhr()
// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.responseText);
}
}
xhr.open("GET","status.php",true);
xhr.send(null);
}
</script>
</head>
<body>
<h1> Create an Item </h1>
<form method="post">
<table align="center" border = "2" cellspacing ="0" cellpadding="3" id="table">
<tr><td><b>Functionality Name:</b></td> <td><b>Description:</b></td> <td><b>Status:</b></td> <td><input type="submit" Name= "Ajouter" Value="Ajouter" onclick="go()"></a></td></tr>
</table>
</form>
</body>
</html>
le alert(xhr.responseText); affiche le code renvoye par le serveur. Et la je vois vien que mon code qui est dans status.php genere un code html.
Mais je change alert(xhr.responseText); par document.getElementById(table).innerHTML +=xhr.responseText; et la rien.
Quand je clique sur "Ajouter" rien ne semble se passer.
Une idee?? je sais plus quoi tenter poru que ca marche.
Merci
Hors ligne
C'est quoi l'élément dont l'Id est contenu dans la variable javascript table ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
c'est une table.
Hors ligne
Mais une table n'a pas d'attribut innerhtml, à ma connaissance.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
comment puis je faire alors pour afficher ma ligne stockee dans xhr.responseText?
Merci
Hors ligne
Pour créer dynamiquement ds lignes (<tr></tr>) et des celulles (<td> </td> ou <th></th>) dans un tableau html en javascript il faut passer par les méthodes de l'objet DOM.
Lis ce tuto, par exemple :https://developer.mozilla.org/fr/Explor … JavaScript
Et je vais passer ce post sur le forum Javascript.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
j'ai deja lu ce tuto. la difference est que le xhr.responseText que j'ai, a deja les balises <tr> et <td>.
Donc je ne peux plus utiliser ce tutoriel. une autre solution?
Merci
Hors ligne
j'ai deja lu ce tuto. la difference est que le xhr.responseText que j'ai, a deja les balises <tr> et <td>.
Donc je ne peux plus utiliser ce tutoriel. une autre solution?
Oui, modifier ce qui génère ton xhr.responseText.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
ce que genere mon xhr.responseText, est le resultat déxecution du code suivant:
<?php
require_once ('../mysqli_connect.php');
// Retrieve all the statuses of a functionality
$q = "SELECT F_status_ID, Functionality_status FROM fstatuses ORDER BY F_status_ID ASC";
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) > 0) {
while ($menu_row = mysqli_fetch_array($r, MYSQLI_NUM)) {
echo "<option value=\"$menu_row[0]\">$menu_row[1]</option>\n";
}
}
mysqli_free_result($r);
unset($menu_row);
?>
</select>
</td>
<td> <textarea name="fdescription" rows="2" cols="30" wrap="hard" ></textarea> </td>
<td valign="center"><a href="delete.php">[delete]</a></td>
</tr>
Si j'enleve les <tr> et <td> qui sont la, comment je vais faire pour deliminter les differentes cellules?
J;ai 4 cellules:
- la 1ere cellule est une zone de texte
- la 2eme un textarea
-la 3eme, une liste deroulante
- la 4eme un href
J'utilise <td> pour les separer. Si j'enleve le <td> comment ferais pour les separer?
Merci
Hors ligne
Il te faut penser différemment.
Tu brûles les étapes, la génération dynamique des balises internes d'un tableau html ne peut se faire qu'en javascript dans le document contenant ce tableau par l'intermédiaire des méthodes du DOM, comme je te l'ai déjà dit.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
je sais. le probleme est que je suis passe par AJAX tout simplement parce que les options de ma liste deroulante proviennent dúne table de ma BD. Et je ne peux pas utiliser JS pour le faire donc jétais presque oblige d'utiliser AJAX.
Hors ligne
Et alors ? Qui di AJAX dit, entre autres, javascript. Sauf que le script PHP ne doit pas retourner du html.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
J' ai modifie mon code de facon a creer mes cellules tdans javascript.
alors j'ai une fichier fstatus.php execute avec AJAX:
?>
Il est tout simple et me renvoie juste ma liste deroulante.
Ensuite j'ai le fichier funcs.php comme ceci:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox and others
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest not supported by your browser
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr
}
/**
* method called when the user clicks on the button
*/
function go(){
var xhr = getXhr()
// We defined what we gonna do with the response
xhr.onreadystatechange = function(){
// We do somthing once the server's response is OK
if(xhr.readyState == 4 && xhr.status == 200){
var body = document.getElementsByTagName("body")[0];
// Retrieve <table> element and create a <tbody> element
var tbl = document.getElementById("table");
var tblBody = document.createElement("tbody");
var row = document.createElement("tr");
// Create <td> elements and a text node, make the text
// node the contents of the <td>, and put the <td> at
// the end of the table row
var cell_1 = document.createElement("td");
var cell_2 = document.createElement("td");
var cell_3 = document.createElement("td");
var cell_4 = document.createElement("td");
// Create the first cell which is a text zone
var cell1=document.createElement("input");
cell1.type="text";
cell1.name="fname";
cell1.size="20";
cell1.maxlength="50";
cell_1.appendChild(cell1);
// Create the second cell which is a text area
var cell2=document.createElement("textarea");
cell2.name="fdescription";
cell2.rows="2";
cell2.cols="30";
cell_2.appendChild(cell2);
// Create the third cell which is a combo box
// retrieve the xhr response and put it on a cell
var cell3=xhr.responseText;
document.getElementById('status').innerHTML = cell3;
cell_3.appendChild(cell3);
// Create the fourth cell which is a href
var cell4 = document.createElement("a");
cell4.setAttribute("href","delete.php");
cell4.appendChild(document.createTextNode("[Delete]"));
cell_4.appendChild(cell4);
// add cells to the row
row.appendChild(cell_1);
row.appendChild(cell_2);
row.appendChild(cell_3);
row.appendChild(cell_4);
// add the row to the end of the table body
tblBody.appendChild(row);
// put the <tbody> in the <table>
tbl.appendChild(tblBody);
// appends <table> into <body>
body.appendChild(tbl);
// sets the border attribute of tbl to 2;
tbl.setAttribute("border", "1");
}
}
xhr.open("GET","fstatus.php",true);
xhr.send(null);
}
</script>
</head>
<body>
<h1> Create an Item </h1>
<form method="post">
<table align="center" border = "2" cellspacing ="0" cellpadding="3" id="table">
<tr><td><b>Functionality Name:</b></td> <td><b>Description:</b></td> <td><b>Status:</b></td> <td><input type="submit" Name= "Ajouter" Value="Ajouter" onclick="go()"></a></td></tr>
</table>
</form>
</body>
</html>
Je teste sur IE et aucun resultat. Je clique Ajouter mais rien ne semble se passer.
Merci
Dernière modification par billyrose (23-06-2009 08:35:56)
Hors ligne
Quand je mets en commentaires ces instructions:
/*var cell3=xhr.responseText;
document.getElementById('status').innerHTML = cell3;
cell_3.appendChild(cell3);*/
//row.appendChild(cell_3);
Les autres cellules s'affichent quand je clique sur Ajouter
Comment pusi je faire pour parfaitement interpreter ma liste deroulante renvoyee par AJAX?
Merci
Hors ligne
Quand je relis mon code je me rends compte que je n'ai pas de ID "status" car dans le select jái juste mis
<select name="status">
.
Est il possible d'ecrire
<select name="status" id="status">
et ensuite de faire:
Si j'ai totelement tort, y a t-il une autre facon d'aborder ce probleme? parceque JS est entrain de me rendre dingue.
Merci
Hors ligne
>>>Mais une table n'a pas d'attribut innerhtml, à ma connaissance.
à ta connaissance, peut être que non, mais à la mienne, oui
put1, que de lignes pour faire un simple tableau
a++
Hors ligne
Pages :: 1