Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/03/2007, 08h53   #1
GYK
Membre du Club
 
Inscription : mai 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 317
Points : 44
Points : 44
Par défaut Relire un formulaire

Bonjour,
Je génère un formulaire correspondant a des individus dont je récupère le prenom et le nom.
A chaque occurence a la lecture de ma base je crée une ligne.
Je veux que ces informations soit modifiable car les données peuvent être fausses ou incomplètes.
Ma question est comment faire pour relire ce formulaire dont le nombre de ligne peu varier et dont les champs ne sont pas nommés car généré par:
Code :
1
2
3
4
<TH width="242" class="Maclasse" scope="col">
<INPUT class="Maclasse" value="<?php ECHO $affichage['Prénom']?>">
<INPUT class="Maclasse" value="<?php ECHO $affichage['Nompat'] ?>">
</TH>
Merci
GYK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 10h49   #2
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
 
<?php
while($affichage = mysql_fetch_array($result))
{
?>
 
<TH width="242" class="Maclasse" scope="col">
<INPUT type="text" name="prenom_<?php echo $affichage['MonId']; ?>" class="Maclasse" value="<?php ECHO $affichage['Prénom']?>">
<INPUT name="nom_<?php echo $affichage['MonId']; ?>"  class="Maclasse" value="<?php ECHO $affichage['Nompat'] ?>">
</TH>
 
<?php
}
 
//Traitement des données
foreach($_POST as $name => $value)
{
    //On repère les noms postés
    if(substr($name, 0, 4) == "nom_")
    {
       //On récupère l'id
       $eleve_split = explode("_", $name);
       $res = mysql_query("update eleve set NomPat='".$value."', Prenom='".$_POST['prenom_'.$eleve_split[1]]."' where id=".$eleve_split[1]);
    }
}
Pas forcément très propre ni très optimisé, mais ca doit fonctionner
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 12h12   #3
GYK
Membre du Club
 
Inscription : mai 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 317
Points : 44
Points : 44
Bonjour Ratapapa,
Merci de ta réponse!
Comme j'aime bien comprendre ce que je fais, peux tu m'explique un peu ta manip?
Je vois que tu fais un while de $affichage, mais cette variable représente le contenu des enregistrements de ma base.
A+
GYK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 12h21   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Si tu donnes à plusieurs inputs HTML l'attribut name="prenoms[]", alors tu recevras dans PHP un tableau du style :
Soit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
?>
<th width="242" class="Maclasse" scope="col">
<?php
while()
{
   ?>
   <input type="text" name="prenoms[]" value="<?php echo $affichage['Prénom']?>" />
   <input type="text" name="noms[]" value="<?php echo $affichage['Nompat']?>" />
   <?php
}
?>
</th>
<?php
Donne pour 2 tours de while :
Code :
1
2
3
4
5
$_POST['prenoms'][0] == 'Dudule'
$_POST['prenoms'][1] == 'Machin'
 
$_POST['noms'][0] == 'Duchmol'
$_POST['noms'][1] == 'Truc'
(Désolé pour les exemples...)

Plus d'infos dans mes tutoriels
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 12h58   #5
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
<?php
//Tant que l'on trouve un enregistrement dans le résultat de la requete, on l'insère dans la variable affichage
while($affichage = mysql_fetch_array($result))
{
?>
 
<TH width="242" class="Maclasse" scope="col">
<!-- On récupère l'identifiant de chaque enregistrement pour un update ultérieur -->
<INPUT type="text" name="prenom_<?php echo $affichage['MonId']; ?>" class="Maclasse" value="<?php ECHO $affichage['Prénom']?>">
<INPUT name="nom_<?php echo $affichage['MonId']; ?>"  class="Maclasse" value="<?php ECHO $affichage['Nompat'] ?>">
<!-- on peut prévoir un input type hidden qui déterminera si l'élève a été modifié ou non grace a une fonction javascript sur l'evenement onChange de nom et prenom -->
</TH>
 
<?php
}
 
//Traitement des données : on liste tous les champs postés
foreach($_POST as $name => $value)
{
    //On repère les noms postés
    if(substr($name, 0, 4) == "nom_")
    {
       //On récupère l'id (après le "_")
       $eleve_split = explode("_", $name);
       //On fait l'update qui convient
       $res = mysql_query("update eleve set NomPat='".$value."', Prenom='".$_POST['prenom_'.$eleve_split[1]]."' where id=".$eleve_split[1]);
    }
}
J'ai rajouté 2-3 commentaires mais je ne vois pas vraiment quoi dire de plus
Il faudrait effectivement se tourner vers des tutoriels si c'est la première fois que tu fais appel à une base de données en php.

EDIT : La méthode proposée par yogui est sympa également mais il te faut stocker l'identifiant dans un champ supplémentaire pour l'update
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 13h29   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je vois deux solutions :
  • Mettre l'identifiant dans les crochets pour forcer les clefs du tableau final ;
  • Laisser les crochets vides et utiliser :
Code :
1
2
3
4
foreach($_POST['prenoms'] as $i => $prenom)
{
   //...
}
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 14h17   #7
GYK
Membre du Club
 
Inscription : mai 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 317
Points : 44
Points : 44
Merci à vous deux!
Avec ça je devrais pouvoir me débrouiller.
Bonne journée.
GYK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2007, 10h27   #8
GYK
Membre du Club
 
Inscription : mai 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 317
Points : 44
Points : 44
Bonjour,
Après quelque jours de vacances je me remet dedans.
Je vais utiliser vos deux solutions, puisque je vais ajouter une petite précision qui à sont inportance, la relecture de mon formulaire se fait dans un programme appelé et mes informations initiales sont memorisées dans un tableau.
Donc la variable $result, dont tu parle Ratapapa dans
Code :
1
2
 
while($affichage = mysql_fetch_array($result))
, est elle celle correspondant à:
Code HTML :
1
2
 
<FORM method="post" action="Majclasstest.php" >
Si oui, dois-je transmettre $result en variable session ou différemment?
Si non, elle doit correspondre à un mysql_query correspondant à la relecture du formulaire donc comment définir cette relecture?
Merci!
A+
GYK est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2007, 08h43   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Tu trouveras dans mes articles un tutoriel sur les formulaires contenant un exemple de formulaire multipages.
J'y utilise des sessions mais ce n'est pas le problème, je pense que tu sais utiliser une base de données (oui, $result est une ressource issue de mysql_query).
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2007, 09h40   #10
GYK
Membre du Club
 
Inscription : mai 2004
Messages : 317
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 317
Points : 44
Points : 44
Merci Yogui je vais aller voir tes tutos, et surtout essayer de les comprendre.
Comme je dis "aller voir", n'entends pas par là qu'ils ne sont pas clair, mais comme je ne suis pas de formation PHP, cela ne sera sans doute pas évident pour moi.
A+
GYK est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h38.


 
 
 
 
Partenaires

Hébergement Web