Probleme de tableau php

Résolu/Fermé
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009 - 13 août 2009 à 13:46
voyageur59 Messages postés 1112 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 10 novembre 2009 - 14 août 2009 à 11:21
Bonjour,

J'ai un p'tit problème avec mon code. J'ai un tableau d'utilisateurs avec nom, prénom mail ... et admin. Je voudrais que lorsque je clique sur un SUBMIT (a chaque ligne du tableau), il me change la valeur de admin 0 ou 1 en passant par l'ID. Malheureusement je ne sais pas comment faire pour que le bouton corresponde a la ligne ou on a cliqué.

Merci de me donner un p'tit coup de pouce
Je suis débutante.


<?php

include ("connectionBDD.php");

if (isset ($_POST['admin1']) )
{
$admin=$_POST['admin1'];
$requete= mysql_query("SELECT ADMIN WHERE ID_USER = $admin");
$reponse= mysql_fetch_array($requete);

if ($reponse == '0')
{
$misajour=mysql_query("UPDATE user SET ADMIN='1' WHERE ID_USER=$admin");
$reponse2= mysql_fetch_array($misajour);
}
else
$misajour2=mysql_query("UPDATE user SET ADMIN='0' WHERE ID_USER=$admin");
$reponse3= mysql_fetch_array($misajour2);
}



/* selectionne le contenu de la BDD */
$requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());



echo "<table>";
echo "<tr>";
echo "<td align='center' colspan='7' bgcolor='#CC99FF'> utilisateurs </td>";
echo "</tr>";
echo "<tr bgcolor=\"#ff3399\">";
echo "<td>NOM</td>";
echo "<td>PRENOM</td>";
echo "<td>MAIL</td>";
echo "<td>LOGIN</td>";
echo "<td>PASS</td>";
echo "<td>ADMIN</td>";
echo "<td>change</td>";
echo "</tr>";

/* affiche ce que contient la BDD */
while ($donnees = mysql_fetch_array($requete1) )
{
echo "<tr>";


echo "<td>";
echo $donnees['NOM'];
echo "</td>";


echo "<td>";
echo $donnees['PRENOM'];
echo "</td>";


echo "<td>";
echo $donnees['MAIL'];
echo "</td>";


echo "<td>";
echo $donnees['LOGIN'];
echo "</td>";


echo "<td>";
echo $donnees['PASS'];
echo "</td>";


echo "<td>";
echo $donnees['ADMIN'];
echo "</td>";


echo "<td>";
?>
<input type='submit' value="*" name="admin1" />
<?php
echo "</td>";
echo "</tr>";
}



echo "</table>";
echo "<br/>";

?>
A voir également:

19 réponses

Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
13 août 2009 à 14:00
Dans ta boucle il suffit que tu modifie le nom de ton bouton avec l'id correspondant à la ligne :
<input type='submit' value="*" name="admin<?php echo $donnees['ID']; ?>" />

Comme ça ton bouton aura comme nom admin + l'id de la ligne lui correspondant.

En récupérant cet id tu sauras quelle ligne est associée à ce bouton
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
13 août 2009 à 14:34
ok et je met quoi a la place de admin1??? ici:

if (isset ($_POST['admin1']) )
{
$admin=$_POST['admin1'];
$requete= mysql_query("SELECT ADMIN WHERE ID_USER = $admin");
$reponse= mysql_fetch_array($requete);

merci
0
fred_bgt Messages postés 153 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 12 septembre 2009 22
13 août 2009 à 14:05
il faut que tu indexes le nom des boutons (puisqu'il y en a plusieurs)

Si tu utilises toujours le même nom dans ton tableau, c'est comme si tu déclarais N fois le même bouton en HTML ... Ca ne peut pas marcher.

ex :

echo "<input type=submit name='bouton".$i."'>

$i étant par exemple le numéro de ligne
Le probème c'est que tu devras tester quel bouton a été cliqué en POST ...

Il y a mieux :

Tu déclares un bouton de type button et une variable de type hidden (qui sera ton numéro de ligne)

$i : numéro de la ligne dans ton tableau

Hors de la boucle :
<input type=hidden name=no id=no>

Dans la boucle (lignes du tableau) :
<input type=submit name=BoutonSubmit onclick=\" document.getElementById('no').value='".$i."' \"> ";

Ce n'est peut-être pas le code exact, mais cette méthode fonctionne, je l'ai déjà utilisée plusieurs fois.
0
voyageur59 Messages postés 1112 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 10 novembre 2009 132
13 août 2009 à 14:07
Bonjour,

Tu mets juste une variable qui change à chaque boucle:


un_ou_deux=0

while ($donnees = mysql_fetch_array($requete1) )
{

if (un_ou_deux!=1)
un_ou_deux=1;
else
un_ou_deux=2;

....

// ?> ==> tu supprimes ça

// la ligne suivante ajoute le submit avec comme nom admin1 et admin2 une fois/2
echo '<input type="submit" value="*" name="admin'. un_ou_deux .'" />'

//<?php ==> tu supprimes ça


...

}



J'ai mis en gras ce qui est à changer (j'ai résumé le contenu de la boucle par des "...").

Pour résumer:

- quand "un_ou_deux" est différent de "1" il passe à "1",
- quand "un_ou_deux" est egal "1" il passe à "2",

Donc à chaque passage de boucle il change de valeur (une fois 1 une fois 2).
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
13 août 2009 à 14:15
malheureusement aucune de vos réponses ne marche. Je veux pas faire par rapport au numéro de lignes mais pas rapport à l'ID. Merci encore
0

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

Posez votre question
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
13 août 2009 à 14:32
aucune autre suggestion ?? svp ??
0
fred_bgt Messages postés 153 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 12 septembre 2009 22
13 août 2009 à 14:32
j'ai pas bien compris ton pb en fait ...
un peu plus d'explications ?
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
13 août 2009 à 14:43
J'aimerai que lorsque je clique sur l'un des bouton submit(qui se trouve a chaque ligne de mon tableau), il aille récupérer l' Id correspondant a la ligne. Ensuite, qu'il vérifie si l'admin(qui correspond a l'ID) est a 1 ou a 0. et enfin le change en 0 si il est a 1 et vice versa.
en bref:

nom prenom mail... admin bouton
fff ggg jjh... 1 * si j'appuie sur le bouton *, il change l'admin en 1
hhh rrr resh... 0 * si j'appuie sur le bouton *, il change l'admin en 0



voila, merci
0
voyageur59 Messages postés 1112 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 10 novembre 2009 132
13 août 2009 à 14:55
Dans ce cas tu changes à chaque ligne la valeur de "admin":


<?php

include ("connectionBDD.php");

$requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());
$numero=0;
while ($donnees = mysql_fetch_array($requete1) )
{

$numero++;


if (isset ($_POST['admin'.$numero]) )
{
$admin=$_POST['admin'.$numero];
$requete= mysql_query("SELECT ADMIN WHERE ID_USER = $admin");
$reponse= mysql_fetch_array($requete);

if ($reponse == '0')
{
$misajour=mysql_query("UPDATE user SET ADMIN='1' WHERE ID_USER=$admin");
$reponse2= mysql_fetch_array($misajour);
}
else
$misajour2=mysql_query("UPDATE user SET ADMIN='0' WHERE ID_USER=$admin");
$reponse3= mysql_fetch_array($misajour2);
}

}


/* selectionne le contenu de la BDD */
$requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());



echo "<table>";
echo "<tr>";
echo "<td align='center' colspan='7' bgcolor='#CC99FF'> utilisateurs </td>";
echo "</tr>";
echo "<tr bgcolor=\"#ff3399\">";
echo "<td>NOM</td>";
echo "<td>PRENOM</td>";
echo "<td>MAIL</td>";
echo "<td>LOGIN</td>";
echo "<td>PASS</td>";
echo "<td>ADMIN</td>";
echo "<td>change</td>";
echo "</tr>";

/* affiche ce que contient la BDD */
$numero=0;
while ($donnees = mysql_fetch_array($requete1) )
{
$numero++;

echo "<tr>";


echo "<td>";
echo $donnees['NOM'];
echo "</td>";


echo "<td>";
echo $donnees['PRENOM'];
echo "</td>";


echo "<td>";
echo $donnees['MAIL'];
echo "</td>";


echo "<td>";
echo $donnees['LOGIN'];
echo "</td>";


echo "<td>";
echo $donnees['PASS'];
echo "</td>";


echo "<td>";
echo $donnees['ADMIN'];
echo "</td>";


echo "<td>";
echo "<input type='submit' value='*' name='admin". $numero ."' />";

echo "</td>";
echo "</tr>";
}



echo "</table>";
echo "<br/>";

?>



Tu as la récupération de la valeur envoyée avec la boucle.
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
13 août 2009 à 15:21
ca ne marche pas non plus
0
tes input doit être dans une balise FORM, dans ton cas, je te conseille ca:
<FORM method="POST" action="$_SERVER['PHP_SELF']"></FORM>
0
voyageur59 Messages postés 1112 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 10 novembre 2009 132
13 août 2009 à 16:11
Qu'est-ce qui marche pas?

Une erreur dans le code?

Ou le formulaire....

Parce que là si tu a mis le contenu complet de ta page, il manque effectivement quelque chose:

Une balise <form>...

Qui devrait ressembler à ça:

<form method="post" action="">

et la fin de ton formulaire avec la balise là:

</form>


Avec l'ouverture du formulaire en début de page (c'est pas le top à cet endroit) et la fermeture du formualire en fin de page!


Dans le doute je viens de faire l'essai.... bien sur en ajoutant les balises <form>... et sans tenir compte de l'exécution de ta requète... il n'y a aucun souci!

Si tu le veux je peux t'envoyer le code que j'ai mis pour mon essai....
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
14 août 2009 à 08:24
oui je veux bien voir ton code stp merci
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
14 août 2009 à 10:20
le probleme est a moitié resolu :
le probleme c'est que ca passe que dans notre else


if (isset($_GET['modif_admin']))
{

$admin=$_GET['modif_admin'];
$requetea= mysql_query("SELECT ADMIN FROM user WHERE ID_USER = $admin");
$reponse= mysql_fetch_array($requetea);


if ($reponse == '0')
{
mysql_query("UPDATE user SET ADMIN='1' WHERE ID_USER=$admin")or die(mysql_error());
}
else
{
mysql_query("UPDATE user SET ADMIN='0' WHERE ID_USER=$admin")or die(mysql_error());
}


}
?>

<a href="table_toopi.php?modif_admin=<?php echo $donnees ['ID_USER']; ?> "> <img src="image/cancel.png" border="none"> </a>
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 186
14 août 2009 à 10:22
le probleme c'est que ca passe que dans notre else

pas vraiment étonnant :

$reponse= mysql_fetch_array($requetea);  


ne te renverra jamais 0 quoi qu'il arrive, mais un tableau contenant les réponses à la requête
si tu veux connaître le nombre de réponses, c'est mysql_num_rows
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
14 août 2009 à 10:27
essai non concluant avec row, $requetea ne renvoie que 1 ou 0 dans la bdd. donc si c'est 0 ca update a 1 et vice versa.
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 186
14 août 2009 à 10:32
ha pardon, je croyais que tu voulais voir si il y avait une personne présente ayant l'ID $admin

alors c'était comme t'avais fait, mais il te manquait une ligne :

remplacer
$reponse= mysql_fetch_array($requetea); 


par

$ligne= mysql_fetch_array($requetea); 
$reponse= $ligne[0]; 
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
14 août 2009 à 11:02
Merci bcq ca marche enfin !!
tu nous as bien rendu service
0
voyageur59 Messages postés 1112 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 10 novembre 2009 132
14 août 2009 à 11:04
Re-

J'avais déjà supprimé... mais ça m'a pas pris trop de temps:



<form method="post" action="">

<?php

//include ("connectionBDD.php");

// $requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());
$numero=0;

// while ($donnees = mysql_fetch_array($requete1) )
for ($i=1;$i<11;$i++)
{

$numero++;


if (isset ($_POST['admin'.$numero]) )
{

// ....

echo "Mise à jour pour " . "admin".$numero;

}

}


/* selectionne le contenu de la BDD */
// $requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());



echo "<table>";
echo "<tr>";
echo "<td align='center' colspan='7' bgcolor='#CC99FF'> utilisateurs </td>";
echo "</tr>";
echo "<tr bgcolor=\"#ff3399\">";
echo "<td>NOM</td>";
echo "<td>PRENOM</td>";
echo "<td>MAIL</td>";
echo "<td>LOGIN</td>";
echo "<td>PASS</td>";
echo "<td>ADMIN</td>";
echo "<td>change</td>";
echo "</tr>";

/* affiche ce que contient la BDD */
$numero=0;

// while ($donnees = mysql_fetch_array($requete1) )
for ($i=1;$i<11;$i++)
{
$numero++;

echo "<tr>";


echo "<td>";
echo 'NOM'.$numero;
echo "</td>";


echo "<td>";
echo 'PRENOM'.$numero;
echo "</td>";


echo "<td>";
echo 'MAIL'.$numero;
echo "</td>";


echo "<td>";
echo 'LOGIN'.$numero;
echo "</td>";


echo "<td>";
echo 'PASS'.$numero;
echo "</td>";


echo "<td>";
echo 'ADMIN'.$numero;
echo "</td>";


echo "<td>";
echo "<input type='submit' value='*' name='admin". $numero ."' />";

echo "</td>";
echo "</tr>";
}



echo "</table>";
echo "<br/>";

?>


</form>



Je n'ai pas ta base de données donc ce qui est requète j'ai modifié.... mais le principe de ce que tu veux y est.






Il y a aussi une erreur dans la requète lors de la récupération des données.
Tu mets ceci:

if (isset ($_POST['admin'. $numero]) )
{
$admin=$_POST['admin'. $numero];
$requete= mysql_query("SELECT ADMIN WHERE ID_USER = $admin");
$reponse= mysql_fetch_array($requete);



$admin=$_POST['admin'. $numero]; le bouton mis en fin de ligne de ton tableau retourne "*" ta mise à jour fonctionnera pas non plus puisque l'ID_USER n'est pas bon....

Au mieux tu changes le bonton de ton tableau:

echo "<input type='submit' value='*' name='admin". $numero ."' />";

comme ça:

echo "<input type='submit' value='".$donnees['ID_USER']."' name='admin". $numero ."' />";


Je n'ai pas tous les tenants et aboutissant de ta page, de la base de données...
Je me suis juste attaché à voir ce que tu veux faire dans le principe, je me suis pas penché sur la structure que doit avoir ta base de données...

Je te conseille donc de prendre mon petit bout de code tel quel. L'essayer pour voir ce que ça donne, voir comment il est fait.

Ensuite tu le réadaptes pour ta base de données.


============================

Après avoir pris un peu plus de temps pour voir les requètes....

Il y a pas mal d'erreurs:

$requete= mysql_query("SELECT ADMIN WHERE ID_USER = $admin");

Cette requète n'est pas bonne, il manque le "from" ça devrait donner quelque chose du genre là:

$requete= mysql_query("SELECT ADMIN FROM user WHERE ID_USER = $admin");


Ici c'est pareil:

$reponse= mysql_fetch_array($requete);

Tu utilises ensuite $reponse comme une donnée simple! En fait tu devrais avoir:

$reponse= mysql_fetch_array($requete)[ADMIN];


============================

En définitive tu devrais avoir quelque chose de ce genre (j'ai mis en gras les modifs):


<?php

include ("connectionBDD.php");

$requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());
$numero=0;
while ($donnees = mysql_fetch_array($requete1) )
{

$numero++;


if (isset ($_POST['admin'.$numero]) )
{
$admin=$_POST['ID_USER'.$numero];

$requete= mysql_query("SELECT ADMIN from user WHERE ID_USER = $admin");

$reponse= mysql_fetch_array($requete)[ADMIN];

if ($reponse_admin== '0')
{
$misajour=mysql_query("UPDATE user SET ADMIN='1' WHERE ID_USER=$admin");
$reponse2= mysql_fetch_array($misajour);
}
else
$misajour2=mysql_query("UPDATE user SET ADMIN='0' WHERE ID_USER=$admin");
$reponse3= mysql_fetch_array($misajour2);
}

}


/* selectionne le contenu de la BDD */
$requete1= mysql_query("SELECT * FROM user") Or die ('Erreur : '.mysql_error());

echo "<table>";
echo '<form method="post" action="">';
echo "<tr>";
echo "<td align='center' colspan='7' bgcolor='#CC99FF'> utilisateurs </td>";
echo "</tr>";
echo "<tr bgcolor=\"#ff3399\">";
echo "<td>NOM</td>";
echo "<td>PRENOM</td>";
echo "<td>MAIL</td>";
echo "<td>LOGIN</td>";
echo "<td>PASS</td>";
echo "<td>ADMIN</td>";
echo "<td>change</td>";
echo "</tr>";

/* affiche ce que contient la BDD */
$numero=0;
while ($donnees = mysql_fetch_array($requete1) )
{
$numero++;

echo "<tr>";


echo "<td>";
echo $donnees['NOM'];
echo "</td>";


echo "<td>";
echo $donnees['PRENOM'];
echo "</td>";


echo "<td>";
echo $donnees['MAIL'];
echo "</td>";


echo "<td>";
echo $donnees['LOGIN'];
echo "</td>";


echo "<td>";
echo $donnees['PASS'];
echo "</td>";


echo "<td>";
echo $donnees['ADMIN'];
echo "</td>";


echo "<td>";
echo "<input type='hidden' value='".$donnees['ID_USER']."' name='ID_USER". $numero ."' />";
echo "<input type='submit' value='*' name='admin". $numero ."' />";

echo "</td>";
echo "</tr>";
}


echo "</form>";
echo "</table>";
echo "<br/>";

?>



Tu peux voir que j'ai ajouté un champ "hiddeen" dont le nom est ID_USER.
Pour la requète de mise à jour, sans ce champ tu n'as pas la référence (ID_USER) à changer...

Là, il faut reprendre chaque chose une par une. Sinon tu ne t'en sortiras pas.
0
mamourfm Messages postés 21 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 14 août 2009
14 août 2009 à 11:12
Tu as raison j'ai fais qq erreur de maladresse.
mon probleme est resolu
Merci a tous de votre aide
0
voyageur59 Messages postés 1112 Date d'inscription vendredi 7 décembre 2007 Statut Membre Dernière intervention 10 novembre 2009 132
14 août 2009 à 11:21
Re-

Pas des erreurs de maladresse.

En fait il faut procéder par étapes.

Créer ton tableau avec le formulaire.

Ensuite, créer ton affichage des utilisateurs.

Et enfin faire ta mise à jour.

Si tu te lances dans la création de ton formulaire avec les 5 étapes en même temps, s'il y a des erreurs c'est quasiment insurmontable car en définitive tu ne sais pas quelle étape n'est pas bonne.

Pour peu qu'il y ait quelques erreurs et c'est la galère assurée.

En définitive si tu prends le post du début à la fin, on retrouve les étapes: le tableau, le retour de données, le formulaire, la mise à jour... en passant étape par étape on fini par trouver.


Bon courage.


0