A voir également:
- [php] Probleme dans un while
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
- Retour à la ligne php ✓ - Forum PHP
- Php?id=1 - Forum PHP
15 réponses
Bonjour
Le champ texte de ta première colonne s'appelle modifA. Mais il a le même nom sur toutes les lignes : tu as donc plusieurs champs texte qui ont le même nom. Quand tu essayes d'en rendre un visible, javascript ne connaît apparemment que le premier (il ne peut pas associer le même nom à plusieurs objets)
Une solution c'est de différencier les noms en ajoutant par exemple un numéro que tu incrémentes à chaque boucle : tes champs vont s'appeler modifA1,modifB1,modifC1 et sur la ligne suivante modifA2,modifB2,modifC2, etc... Il faut également adapter le onclick en conséquence
Le champ texte de ta première colonne s'appelle modifA. Mais il a le même nom sur toutes les lignes : tu as donc plusieurs champs texte qui ont le même nom. Quand tu essayes d'en rendre un visible, javascript ne connaît apparemment que le premier (il ne peut pas associer le même nom à plusieurs objets)
Une solution c'est de différencier les noms en ajoutant par exemple un numéro que tu incrémentes à chaque boucle : tes champs vont s'appeler modifA1,modifB1,modifC1 et sur la ligne suivante modifA2,modifB2,modifC2, etc... Il faut également adapter le onclick en conséquence
Tu dit ==> Une solution c'est de différencier les noms en ajoutant par exemple un numéro que tu incrémentes à chaque boucle , mais je n'est pas de boucle pour cela et si j'en crée une est-ce que je peut faire ceci ?
for($i=1; $i<$resultatB; $i++)
la je prend juste un exemple,
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA" value="Modifier" OPTION VALUE="modifA[$i]" onclick="afficher('modifA','modifB','modifC')"> </br>
<div id="modifA[$i]" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
for($i=1; $i<$resultatB; $i++)
la je prend juste un exemple,
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA" value="Modifier" OPTION VALUE="modifA[$i]" onclick="afficher('modifA','modifB','modifC')"> </br>
<div id="modifA[$i]" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
$k=1
while ($resultatB = mysql_fetch_assoc($requeteB)){
?>
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA" value="Modifier" OPTION VALUE="modifA" onclick="afficher('modifA<?php echo $k ?>','modifB<?php echo $k ?>','modifC<?php echo $k ?>')"> </br>
<div id="modifA<?php echo $k ?>" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
...
<?php
$k++
} // while
while ($resultatB = mysql_fetch_assoc($requeteB)){
?>
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA" value="Modifier" OPTION VALUE="modifA" onclick="afficher('modifA<?php echo $k ?>','modifB<?php echo $k ?>','modifC<?php echo $k ?>')"> </br>
<div id="modifA<?php echo $k ?>" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
...
<?php
$k++
} // while
voici mon nouveau code avec ton aide, cela fonction mais mise a par que quand je clique sur le bouton modifier de la deuxième ligne, le champ s'affiche bien mais si je fait de même pour la premiere ligne le champ du dessous reste il ne disparait pas.
while ($resultatB = mysql_fetch_assoc($requeteB)){
?>
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA <?php echo $i; ?>" value="Modifier" OPTION VALUE="modifA<?php echo $i; ?>" onclick="afficher('modifA<?php echo $i; ?>','modifB<?php echo $i; ?>','modifC<?php echo $i; ?>')"> </br>
<div id="modifA<?php echo $i; ?>" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
<?php $photo = $resultatB['photo'] ; ?>
<td><div align="center"><?php echo " <IMG SRC='../mini/$photo'>" ;?> </br><input type="submit" name="modifierB <?php echo $i; ?>" value="Modifier" OPTION VALUE="modifB<?php echo $i; ?>" onclick="afficher('modifB<?php echo $i; ?>','modifA<?php echo $i; ?>','modifC<?php echo $i; ?>')"> </br>
<div id="modifB<?php echo $i; ?>" style="display: none">
<input type="file" name="mon_image" /><br />
</div></div>
</td>
<td><div align="center"><?php echo $resultatB['descriptif']; ?> </br><input type="submit" name="modifierC<?php echo $i; ?>" value="Modifier" OPTION VALUE= "modifC<?php echo $i; ?>" onclick="afficher('modifC<?php echo $i; ?>','modifA<?php echo $i; ?>','modifB<?php echo $i; ?>')"> </br>
<div id="modifC<?php echo $i; ?>" style="display: none">
<textarea name="mon_descriptif" id="mon_descriptif" cols="30" rows="5" style="width:250px" ></textarea>
<div id="descriptif"></div>
</div></div>
</td>
</tr>
<?php $i++; }} ?>
</table>
while ($resultatB = mysql_fetch_assoc($requeteB)){
?>
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA <?php echo $i; ?>" value="Modifier" OPTION VALUE="modifA<?php echo $i; ?>" onclick="afficher('modifA<?php echo $i; ?>','modifB<?php echo $i; ?>','modifC<?php echo $i; ?>')"> </br>
<div id="modifA<?php echo $i; ?>" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
<?php $photo = $resultatB['photo'] ; ?>
<td><div align="center"><?php echo " <IMG SRC='../mini/$photo'>" ;?> </br><input type="submit" name="modifierB <?php echo $i; ?>" value="Modifier" OPTION VALUE="modifB<?php echo $i; ?>" onclick="afficher('modifB<?php echo $i; ?>','modifA<?php echo $i; ?>','modifC<?php echo $i; ?>')"> </br>
<div id="modifB<?php echo $i; ?>" style="display: none">
<input type="file" name="mon_image" /><br />
</div></div>
</td>
<td><div align="center"><?php echo $resultatB['descriptif']; ?> </br><input type="submit" name="modifierC<?php echo $i; ?>" value="Modifier" OPTION VALUE= "modifC<?php echo $i; ?>" onclick="afficher('modifC<?php echo $i; ?>','modifA<?php echo $i; ?>','modifB<?php echo $i; ?>')"> </br>
<div id="modifC<?php echo $i; ?>" style="display: none">
<textarea name="mon_descriptif" id="mon_descriptif" cols="30" rows="5" style="width:250px" ></textarea>
<div id="descriptif"></div>
</div></div>
</td>
</tr>
<?php $i++; }} ?>
</table>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ça vient sûrement de ta fonction afficher. Tu ne la montres pas, mais je parie qu'elle est prévue pour montrer un champ mais pas pour cacher les autres Ou alors, seulement ceux donnés en 2ème et 3ème paramètre.
Voici ma fonction :
<script language="javascript">
function afficher(f,f2,f3)
{
document.getElementById(f).style.display = 'block';
document.getElementById(f2).style.display = 'none';
document.getElementById(f3).style.display = 'none';
}
</script>
<script language="javascript">
function afficher(f,f2,f3)
{
document.getElementById(f).style.display = 'block';
document.getElementById(f2).style.display = 'none';
document.getElementById(f3).style.display = 'none';
}
</script>
Je m'en doutais un peu. Cette fonction n'est pas adaptée, elle ne marche qu'avec un nombre fixe de champs.
Pour t'en sortir, il suffit de mémoriser dans une variable globale (pas très propre, mais bon..) le dernier champ affiché et de n'effacer que lui. Du coup, tes paramètres f2 et f3 sont inutiles, tu peux les supprimer. Ne pas oublier de les supprimer aussi dans les 'onclick'
<script language="javascript">
var dernier_champ = ''; // aucun champ affiché au départ
function afficher(f)
{
if (f!= dernier_champ) {
document.getElementById(f).style.display = 'block'; // on affiche le nouveau
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
dernier_champ=f; // on se rappelle lequel est affiché, pour l'effacer plus tard
}
}
</script>
Pour t'en sortir, il suffit de mémoriser dans une variable globale (pas très propre, mais bon..) le dernier champ affiché et de n'effacer que lui. Du coup, tes paramètres f2 et f3 sont inutiles, tu peux les supprimer. Ne pas oublier de les supprimer aussi dans les 'onclick'
<script language="javascript">
var dernier_champ = ''; // aucun champ affiché au départ
function afficher(f)
{
if (f!= dernier_champ) {
document.getElementById(f).style.display = 'block'; // on affiche le nouveau
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
dernier_champ=f; // on se rappelle lequel est affiché, pour l'effacer plus tard
}
}
</script>
Maintenant j'ai ceci mais maintenant quand j'appuie sur chaque bouton, les champs apparaissent mais ne se cache plus, ils restent en permanences. La fonction ==>
<script language="javascript">
var dernier_champ = ''; // aucun champ affiché au départ
function afficher(f)
{
if (f!= dernier_champ) {
document.getElementById(f).style.display = 'block'; // on affiche le nouveau
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
dernier_champ=f; // on se rappelle lequel est affiché, pour l'effacer plus tard
}
}
</script>
puis le code ==>
while ($resultatB = mysql_fetch_assoc($requeteB)){
?>
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA <?php echo $i; ?>" value="Modifier" OPTION VALUE="modifA<?php echo $i; ?>" onclick="afficher('modifA<?php echo $i; ?>')"> </br>
<div id="modifA<?php echo $i; ?>" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
<?php $photo = $resultatB['photo'] ; ?>
<td><div align="center"><?php echo " <IMG SRC='../mini/$photo'>" ;?> </br><input type="submit" name="modifierB <?php echo $i; ?>" value= "Modifier" OPTION VALUE="modifB<?php echo $i; ?>" onclick="afficher('modifB<?php echo $i; ?>')"> </br>
<div id="modifB<?php echo $i; ?>" style="display: none">
<input type="file" name="mon_image" /><br />
</div></div>
</td>
<td><div align="center"><?php echo $resultatB['descriptif']; ?> </br><input type="submit" name="modifierC<?php echo $i; ?>" value= "Modifier" OPTION VALUE="modifC<?php echo $i; ?>" onclick="afficher('modifC<?php echo $i; ?>')"> </br>
<div id="modifC<?php echo $i; ?>" style="display: none">
<textarea name="mon_descriptif" id="mon_descriptif" cols="30" rows="5" style="width:250px" ></textarea>
<div id="descriptif"></div>
</div></div>
</td>
</tr>
<?php $i++; }} ?>
</table>
<script language="javascript">
var dernier_champ = ''; // aucun champ affiché au départ
function afficher(f)
{
if (f!= dernier_champ) {
document.getElementById(f).style.display = 'block'; // on affiche le nouveau
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
dernier_champ=f; // on se rappelle lequel est affiché, pour l'effacer plus tard
}
}
</script>
puis le code ==>
while ($resultatB = mysql_fetch_assoc($requeteB)){
?>
<tr>
<td><div align="center"><?php echo $resultatB['nom'];?> </br><input type="submit" name="modifierA <?php echo $i; ?>" value="Modifier" OPTION VALUE="modifA<?php echo $i; ?>" onclick="afficher('modifA<?php echo $i; ?>')"> </br>
<div id="modifA<?php echo $i; ?>" style="display: none">
<input type="text" name="qtéinitial" size=" 10" maxlength="20" /><br />
</div></div>
</td>
<?php $photo = $resultatB['photo'] ; ?>
<td><div align="center"><?php echo " <IMG SRC='../mini/$photo'>" ;?> </br><input type="submit" name="modifierB <?php echo $i; ?>" value= "Modifier" OPTION VALUE="modifB<?php echo $i; ?>" onclick="afficher('modifB<?php echo $i; ?>')"> </br>
<div id="modifB<?php echo $i; ?>" style="display: none">
<input type="file" name="mon_image" /><br />
</div></div>
</td>
<td><div align="center"><?php echo $resultatB['descriptif']; ?> </br><input type="submit" name="modifierC<?php echo $i; ?>" value= "Modifier" OPTION VALUE="modifC<?php echo $i; ?>" onclick="afficher('modifC<?php echo $i; ?>')"> </br>
<div id="modifC<?php echo $i; ?>" style="display: none">
<textarea name="mon_descriptif" id="mon_descriptif" cols="30" rows="5" style="width:250px" ></textarea>
<div id="descriptif"></div>
</div></div>
</td>
</tr>
<?php $i++; }} ?>
</table>
Ah bon, qu'est-ce que je fais selon toi ?
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
cette ligne plante la première fois car dernier_champ est vide
donc dernier_champ reste vide
donc cette ligne plante toujours
Il suffit de ne pas l'exécuter quand dernier_champ est vide
if (dernier_champ!='') document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
J'ai remarqué au passage que tu avais laissé trainer un espace en trop dans name="modifierA <?php echo $i; ?>", mais vu que ce nom ne semble servir à rien, ce n'est peut-être pas grave
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
cette ligne plante la première fois car dernier_champ est vide
donc dernier_champ reste vide
donc cette ligne plante toujours
Il suffit de ne pas l'exécuter quand dernier_champ est vide
if (dernier_champ!='') document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
J'ai remarqué au passage que tu avais laissé trainer un espace en trop dans name="modifierA <?php echo $i; ?>", mais vu que ce nom ne semble servir à rien, ce n'est peut-être pas grave
Oui justement ce que j'ai fait c'est que j'ai remplacer ma fonction par la tienne donc la je comprend maintenant dans mes 'Onclick' j'ai juste :
onclick="afficher('modifA<?php echo $i; ?>')"
au lieu de :
onclick="afficher('modifA<?php echo $i; ?>','modifB<?php echo $i; ?>','modifC<?php echo $i; ?>')"
et donc le soucis c'est que les champ reste en permanences.
onclick="afficher('modifA<?php echo $i; ?>')"
au lieu de :
onclick="afficher('modifA<?php echo $i; ?>','modifB<?php echo $i; ?>','modifC<?php echo $i; ?>')"
et donc le soucis c'est que les champ reste en permanences.
Tu as compris mon message 12 ? et surtout appliqué la modification ?
J'ai essayé chez moi, ça marche.
J'ai essayé chez moi, ça marche.
<script language="javascript">
var dernier_champ = ''; // aucun champ affiché au départ
function afficher(f)
{
if (dernier_champ!='') document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien {
document.getElementById(f).style.display = 'block'; // on affiche le nouveau
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
dernier_champ=f; // on se rappelle lequel est affiché, pour l'effacer plus tard
}
}
</script>
var dernier_champ = ''; // aucun champ affiché au départ
function afficher(f)
{
if (dernier_champ!='') document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien {
document.getElementById(f).style.display = 'block'; // on affiche le nouveau
document.getElementById(dernier_champ).style.display = 'none'; // on efface l'ancien
dernier_champ=f; // on se rappelle lequel est affiché, pour l'effacer plus tard
}
}
</script>
19 janv. 2010 à 14:14