Problème SQL PHP HTML !!!

WRInaute discret
Bonjour à tous,

J'ai un petit souci.

J'ai crée une table "JOUR" avec phpmyadmin. Mon but est que l'utilisateur qui mettra à jour ces informations sur le site web puisse donc afficher tous les enregistrements de cette table, faire les modifs qu'il veut et ensuite cliquer sur le bouton valider en bas de page afin de sauver les modifications apportées.

Je fais donc une boucle afin de lister tous les enregistrements. Mais quand je cliquer sur envoyer il me modifie tous les champs avec la même valeur.

Je ne comprends pas. Si vous pouviez m'aider ou me donner un exemple qui marche afin que je comprenne la bonne manière de faire. Merci

Dans ma page php je fais ceci :

--------------------------------------------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="styles_club.css" />
<title>Accueil</title>
</head>
<body>

Agenda
<form action="check.php" method="post">
<table>
<tr>
<?php
connexion_DB('bd_club'); //fonction de connexion à la base
$select = mysql_query('SELECT * FROM jour');
while ($donnees = mysql_fetch_array($select)) // On fait une boucle pour lister les enregistrements
{ // début de la boucle
?>





<td><input name="id_jour" value="<?php echo $donnees['id_jour']; ?>" /></td>
<td><input name="num" value="<?php echo $donnees['num']; ?>" /></td>
<td><input name="nom" value="<?php echo $donnees['nom']; ?>" /></td>
<td><input name="autres" value="<?php echo $donnees['autres']; ?>" /></td>

</tr>

<?php
} // Fin de la boucle
?>
</table>
<input type="submit" value="Envoyer" />
</form>

<?php
deconnexion_DB();
?>



</body>


</html>
-----------------------------------------------------------------------------

Voici mon problème.

J'obtiens bien un tableau avec tous les enregistrements.

Mais comment faire pour enregistrer toutes ces informatins dans ma table ?
 
WRInaute discret
Regarde ton code dans ta boucle:

Tu liste bien toutes les infos de la base apparement mais tu as toujours les mêmes noms de champs
<input name="id_jour"
<input name="num"
<input name="nom"
<input name="autres"

Quand tu vas poster ton formulaire ces variables vont voir leur valeurs s'ecraser...

Pour remedier à celà il faut en premier différencier les variables par exemple :

...
$i=0;
while ($donnees = mysql_fetch_array($select)) // On fait une boucle pour lister les enregistrements
{ // début de la boucle
?>
<td><input name="id_jour<?=$i;?>" value="<?php echo $donnees['id_jour']; ?>" /></td>
<td><input name="num<?=$i;?>" value="<?php echo $donnees['num']; ?>" /></td>
<td><input name="nom<?=$i;?>" value="<?php echo $donnees['nom']; ?>" /></td>
<td><input name="autres<?=$i;?>" value="<?php echo $donnees['autres']; ?>" /></td>
</tr>
<?php
$i++;
} // Fin de la boucle
...

Je te laisse deviner la suite...
 
WRInaute discret
Salut,

Tout d'abord merci de ta réponse.


Ben en fait oui c'est normal que j'ai les mêmes champs. En fait, voici comment se présenterait l'interface de mise à jour:
accès à la BDD pour affichier tous oles enregistrements. Il s'agit en fait de jours donc par exemple:

id_jour(unique) num (numéro du jour) nom(lundi...) autres
-------------------------------------
1 14 lundi erfeef
2 15 mardi
3 16 mercredi
....



1) la personne voit tous ces enregistrements dans des zones de texte.Ceux-ci doivent donc etre modifiables
2) elle doit pouvoir modifier ce qu'elle veut
3) un bouton unique doit permettre de sauvegarder les changements dans la BDD

Tu vois peut être mieux ce que je souhaite comme ça.

Dans ton explication je ne comprends ce qu'est $i=0 ??? pourquoi i et pourquoi 0.

A quoi est censé servir ce bout de code <td>..<?=$i;?></td> ???

Je crois que je ne comprends pas bien la logique. Pourrais-tu m'éclaircir à ce niveau ?

Un grand merci. Je ne suis peut etre pas très clair désolé.

[/img]
 
WRInaute discret
je me réexplique si tu as toujours les mêmes champs (on va prendre id_jour par exemple) dans ta page tu auras :

<td><input name="id_jour" value="journumero1" /></td>
.....
.....
.....
<td><input name="id_jour" value="journumero2"/></td>
.....
.....
.....
<td><input name="id_jour" value="journumero3"/></td>
.....
.....
.....

Quand tu vas poster ton formulaire, tu vas avoir id_jour qui va etre envoyé comme variable. Mais tu ne pourra pas récupérer les trois valeur différentes de id_jour. C'est comme si tu faisais :

$id_jour = 1;
$id_jour = 2845;
$id_jour = 0;

Ben id jour là si tu l'affiches il sera égal à 0;

Comprends-tu le problème ?
 
WRInaute accro
le $i est un index supplémentaire, qui permet de créer dans ta boucle des variables différentes.

Le premier jour sera $id_jour=0, et plus id_jour, le deuxième jour sera id_jour=1, etc... tu ajoutes ainsi une colonne supplémentaire à ton tableau qui te permet de différencier plusieurs lignes
 
WRInaute discret
Salut,

En fait, mon besoin est simple :

je dois aller chercher des infos dans la BDD (ça ça marche), ensuite les afficher à l'écran pour pouvoir les modifier,finalement je dois réintroduire ces infos dans la BDD pour prendre en compte les modifs.

N'aurais-tu pas un script pour moi car je ne m'en sors pas et c'est assez important.

Merci.[/img]
 
WRInaute discret
C'est là l'utilité du $i dans mon premier post.
Quand tu affiches tes lignes tu fais ça :

$i=0;
while ($donnees = mysql_fetch_array($select)) // On fait une boucle pour lister les enregistrements
{ // début de la boucle
?>
<td><input name="id_jour<?=$i;?>" value="<?php echo $donnees['id_jour']; ?>" /></td>
<td><input name="num<?=$i;?>" value="<?php echo $donnees['num']; ?>" /></td>
<td><input name="nom<?=$i;?>" value="<?php echo $donnees['nom']; ?>" /></td>
<td><input name="autres<?=$i;?>" value="<?php echo $donnees['autres']; ?>" /></td>
</tr>
<?php
$i++;
} // Fin de la boucle


le $i va prendre la valeur 0 quand la premiere boucle va être effectuée puis 1 pour la seconde puis 2 pour la troisieme......
Dans le HTML, le $i va donc ajouter un nombre apres les variables et ce pour chaque ligne.

Tu auras dans ton HTML
<tr>
<td><input name="id_jour0" value="donnee_jour" /></td>
<td><input name="num0" value="donnee_num" /></td>
<td><input name="nom0" value="donnee_nom" /></td>
<td><input name="autres0" value="donnee_autres" /></td>
</tr>
<tr>
<td><input name="id_jour1" value="donnee_jour" /></td>
<td><input name="num1" value="donnee_num" /></td>
<td><input name="nom1" value="donnee_nom" /></td>
<td><input name="autres1" value="donnee_autres" /></td>
</tr>
<tr>
<td><input name="id_jour2" value="donnee_jour" /></td>
<td><input name="num2" value="donnee_num" /></td>
<td><input name="nom2" value="donnee_nom" /></td>
<td><input name="autres2" value="donnee_autres" /></td>
</tr>

Voilà pour chaque lignes les variables id_jour, num, nom et autres seront differentes et donc elles seront toutes postées sans s'écraser.

Pour l'enregistrement il faut faire une boucle qui enregistre les données de chaque lignes.

Petite précision il manque un "type" dans tes <input>
 
WRInaute discret
Salut,

Merci pour ta réponse.

J'ai bien compris mais j'ai encore 2 points d'interrogation:

1) pq il ne s'incrémente pas malgré que j'ai respecté ton code.
2) ou dois-je alors et comment faire cette boucle :

merci pour tout.
 
Discussions similaires
Haut