Page 1 sur 2

modification de champs

Posté : 13 juin 2006, 15:09
par béka
Voila, j'ai un petit problème, je veux offrir la possibilité à un utilisateur de modifier des annonces qu'il a déposées. Seulement voila, la modification ne se fait pas là ou je l'attends.

Voici le code :

page index.php (ou l'on propose les champs à modifier) :
<?php 
include("../../../connexion.php");

$sql = "SELECT * FROM demande_stage WHERE nom_etudiant='".$_SESSION[nom]."'"; 
$result = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_array($result)) {
$adresse_etudiant = nl2br(($row['adresse_etudiant']));
$email_etudiant = ($row['email_etudiant']);
$tel_etudiant = ($row['tel_etudiant']);
$intitule = ($row['intitule']);
$poste = ($row['poste']);
$milieu_professionnel = ($row['milieu_professionnel']);
$date_debut = ($row['date_debut']);
$duree = ($row['duree']);
$id= ($row['id']); ?>


<form action="modif.php" method="post" name="modif">
		<p class="Texte">
		Numéro de demande : <input name="id" type="text" size="20" value="<? echo $id; ?>" readonly><br><br>
		Nom* : <br> <input name="nom_etudiant" type="text" size="20" value="<? echo $_SESSION['nom'] ?>" readonly><br><br>
		Prénom* : <br> <input name="prenom_etudiant" type="text" size="20" value="<? echo $_SESSION['prenom'] ?>" readonly><br><br>
		Adresse : <br> <textarea name="adresse_etudiant" cols="30" rows="5"><? echo $adresse_etudiant; ?></textarea><br><br>
		Email : <br> <input name="email_etudiant" type="text" size="40" value="<? echo $email_etudiant; ?>"><br><br>
		Tél : <br> <input name="tel_etudiant" type="text" size="14" value="<? echo $tel_etudiant; ?>"><br><br>
		Poste recherché : <br> <input name="poste" type="text" size="40" value="<? echo $poste; ?>"><br><br>
		Dans quel milieu professionnel : <select name="milieu_professionnel">
			<option>Automobile</option>
			<option>Electricité</option>
			<option>Energétique</option>
			<option>Etude et définition de produits industriels</option>
			<option>Structure métallique</option>
			<option>Prothèse dentaire</option>
		</select><br><br><br>
		Nouvelle date de début de stage : 
		<select name="jour"> 
<?php 
for($i=1;$i<32;$i++) 
{ 
if($i<10) echo "<option>0".$i."</option>"; 
else echo "<option>".$i."</option>"; 
}?> 
</select>

<?php 
$mois= array("Janvier", "Février", "Mars","Avril", "Mai", "Juin","Juillet", "Août", "Septembre","Octobre","Novembre","Décembre"); 
?> 

<select name="mois"> 
<?php 
foreach($mois as $valeur){ 
  echo "<option>".$valeur."</option>"; 
}?> 
</select>

<select name="annee">
<?php 
for($i=2006;$i<2050;$i++) 
{ 
echo "<option>".$i."</option>"; 
}?> 
</select><br><br><br>

		
		Nouvelle durée du stage (en semaine) : 
<select name="duree"> 
<?php 
for($i=1;$i<11;$i++) 
{ 
if($i<10) echo "<option>0".$i."</option>"; 
else echo "<option>".$i."</option>"; 
}?> 
</select>
<br><br><br>
Lettre de motivation : <br> <textarea name="intitule" cols="60" rows="40"><? echo $intitule; ?></textarea><br><br>
		<input type="submit" value="Modifier"></form> <? } ?>
et voici la page modif.php ou je modifie les informations :
<?php 
include("../../../connexion.php");

$nom_etudiant=nl2br($_POST['nom_etudiant']);
$prenom_etudiant=nl2br($_POST['prenom_etudiant']);
$adresse_etudiant=nl2br($_POST['adresse_etudiant']);
$intitule=nl2br($_POST['intitule']);
$milieu_professionnel=nl2br($_POST['milieu_professionnel']);
$email_etudiant=nl2br($_POST['email_etudiant']);
$tel_etudiant=nl2br($_POST['tel_etudiant']);
$poste=nl2br($_POST['poste']);
$id=nl2br($_POST['id']);


$query = "UPDATE demande_stage 
SET adresse_etudiant='".$adresse_etudiant."', email_etudiant='".$email_etudiant."', intitule='".$intitule."', tel_etudiant='".$tel_etudiant."', poste='".$poste."', milieu_professionnel='".$milieu_professionnel."' WHERE nom_etudiant='".$nom_etudiant."' AND prenom_etudiant='".$prenom_etudiant."' AND id='".$id."'"; ?>
Je ne comprends pas mon erreur, ou peut etre que je manque de lucidité...

Mon problème doit venir du fait qu je ne stocke qu'une seule valeur des variables à modifier au lieu d'en stockée deux quand il y a 2 annonces à modifier. La solution vient-elle d'une boucle for ou while dans la page modif.php ?

Posté : 13 juin 2006, 19:45
par jojolapine
il y a deux trois choses que je ne comprend pas... :shock:
pourquoi faire par exemple un nl2br() pour l'id...? ou pour le mail ou autre ...
tant que ce n'est pas des champs de type texte, tu n'a pas besoin de le faire...
ensuite que donne ta requête éxécutée dans phpmyadmin?

Posté : 14 juin 2006, 08:03
par béka
en fait, il est vrai que la fonction nl2br() ne sert pas pour l'id, enfin, c'est pas ca le plus important. En fait la requete est bonne, c'est juste que quand la personne a plusieurs annonce a modifier, il va saisir plusieurs valeurs (autant qu'il y a d'annonces) pour chaque champ. Cependant, les variables ne stockent qu'UNE seule valeur, et c'est là le problème en fait.

Posté : 14 juin 2006, 18:43
par jojolapine
je pense que tu devrais nommer dynamiquement les différents formulaires, en faisant par exemple:
<?php
$i=0
boucle while
?>
<form action="modif.php" method="post" name="modif<?php echo $i; ?>">
suite
<?php $i++; ?> 
et dans la page traitement, tu insère une boucle du genre:
$i=0;
while(isset($_POST['modif'.$i.''])) {
même code
$i++;
}

Posté : 15 juin 2006, 09:10
par béka
je comprends pas ce que tu veux faire. Tu peux m'expliquer davantage?

Posté : 15 juin 2006, 18:37
par jojolapine
bon on va reprendre un petit peu voir si moi aussi je suis pas à côté de la plaque :lol:
si on prend le code de ton premier post, tu vas avoir autant de formulaires que de résultat de ta requête, c.a.d. que de demandes de stages, et tout c'est formulaires seront identiques, hormis les value... t'es d'accord avec moi ?
Dans ce cas là, il est impossible à php de faire la différenc entre tt ces formulaires, il va donc prendre le dernier dans le meilleur des cas.
ce que je te propose c'est de rendre "unique" chaque formulaire... pour traiter chaque demande de stage une par une!
après il y a peut-être une chose que j'ai mal comprise, est-ce que tu veux que l'utilisateur puisse modifier plusieurs demande en même temps ?
si oui il y a quelque chose à revoir dans ton raisonnement, il faudrait faire un seul formulaire avec des parties variables selon le nombre de demande qu'a l'utilisateur...
bref dis moi si j'ai pigé

Posté : 15 juin 2006, 18:39
par mere-teresa
Où se fait la modification ?

Posté : 16 juin 2006, 09:54
par béka
oui c'est bien jojolapine, je veux permettre a l'utilisateur de modifer plusieur demande de stage.
tu as bien compris le prog, sur une page, s'affichera toutes ses demandes et celle-ci sont modifiables (ca c'est la page index.php). Il remplace les chanmps par ce qu'il veut remplacer et ensuite valide. Dans la page modif.php c'est là qu'ont lieu les modifs dans la base. Seulement les valeurs des variables que je récupère avec la méthode POST ne prennet en compte que les champs du dernier formulaire et c'est là mon problème.
Seulement je ne sais absolument pas coment faire, j'ai beau réfléchier, je ne vois pas. Avez-vous des solutions à me proposer?

Posté : 16 juin 2006, 10:08
par jojolapin e
je t'ai déja répondu plus haut, il faut que tu rende unique chaque formulaire ... avec quelquechose comme l'avant dernier post

Posté : 16 juin 2006, 10:17
par iruka
tu peux regarder sur ce thread, ce que je fais ressemble a ce que tu veux faire:

http://www.phpfrance.com/forums/voir_sujet-19599.php

en fait, imaginons qu une personne ait rentre son cursus professionnel, puis tu veux lui permettre de modifier chaque fonction qu elle a occupee

pour ca, tu lui affiches les donnees rentrees dans la table dans une boucle while. si elle a occupe 3 jobs, il y aura 3 tableaux.

ces 3 tableaux sont dans un seul formulaire.

evidemment, il faut que chaque input, textarea ait un nom unique pour savoir de quoi il s agit.

donc dans la boucle while, il faut nommer chaque input, textarera comme suit :

name="job[".$j++."]"

ou $j=0 sert a incrementer le nom 'job'
donc dans le code html on aura job0, job1, job2

on peut constituer un array et recuperer les donnees comme suit :
if (isset($_POST['confirmation']))//si le formulair est envoye
{
// on recupere les donnees des diferrents inputs, textarea
foreach($_POST['ind'] as $cle=>$ind)
{  
$occ=$_POST['occ'][$cle];//chaque champ a la meme valeur pour la cle
// quand job est egal a job0, occ est aussi egal a occ0
//attention il faut attribuer a chaque input une incrementation unique, voire pas du tout, je crois que ca marche aussi.
$job=$_POST['job'][$cle];
// puis on insert ou update les infos dans la table selon
$sql="INSERT INTO career (id,industry,occupation,jobfunction) VALUES ('$id','$ind','$occ','$job')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
}
}
je ne sais pas si je suis clair, je viens de le faire a l instant et ca a l air de correspondre a ce que tu veux faire...

Posté : 16 juin 2006, 10:27
par béka
je vais essayer ceque vous m'avez proposé et vous tiens au courant. Merci.

Posté : 19 juin 2006, 10:23
par béka
je vois pas comment faire la boucle while jojolapine dans le fichier index.php car j'ai mis ce que tu m'avais proposé et cela ne marche pas, aucune modification est prise en compte

Posté : 22 juin 2006, 14:19
par béka
j'arrive pas a faire cette boucle, quelqu'un peut-il m'aider et m'éclairer?

Posté : 22 juin 2006, 14:20
par ouckileou
Montre déjà ce que tu as fais

Posté : 22 juin 2006, 14:27
par béka
C'est super long, je suis désolé

Alors voici la page ou je "récolte" les informations concernant un utilisateur identifié :
<?php 
include("../../../connexion.php");

$sql = "SELECT * FROM demande_stage WHERE nom_etudiant='".$_SESSION[nom]."'"; 
$result = mysql_query($sql) or die(mysql_error());

$i=0;

while ($row = mysql_fetch_array($result)) {
$adresse_etudiant = nl2br(($row['adresse_etudiant']));
$email_etudiant = ($row['email_etudiant']);
$tel_etudiant = ($row['tel_etudiant']);
$intitule = ($row['intitule']);
$poste = ($row['poste']);
$milieu_professionnel = ($row['milieu_professionnel']);
$date_debut = ($row['date_debut']);
$duree = ($row['duree']);
$id= ($row['id']); ?>
 
<form action="modif.php" method="post" name="modif<?php echo $i; ?>">
		<p class="Texte">
		Numéro de demande : <input name="id" type="text" size="3" value="<? echo $id; ?>" readonly><br><br>
		Nom* : <br> <input name="nom_etudiant" type="text" size="20" value="<? echo $_SESSION['nom'] ?>" readonly><br><br>
		Prénom* : <br> <input name="prenom_etudiant" type="text" size="20" value="<? echo $_SESSION['prenom'] ?>" readonly><br><br>
		Adresse : <br> <textarea name="adresse_etudiant" cols="30" rows="5"><? echo $adresse_etudiant; ?></textarea><br><br>
		Email : <br> <input name="email_etudiant" type="text" size="40" value="<? echo $email_etudiant; ?>"><br><br>
		Tél : <br> <input name="tel_etudiant" type="text" size="14" value="<? echo $tel_etudiant; ?>"><br><br>
		Poste recherché : <br> <input name="poste" type="text" size="40" value="<? echo $poste; ?>"><br><br>
		Dans quel milieu professionnel : <select name="milieu_professionnel">
			<option>Automobile</option>
			<option>Electricité</option>
			<option>Energétique</option>
			<option>Etude et définition de produits industriels</option>
			<option>Structure métallique</option>
			<option>Prothèse dentaire</option>
		</select><br><br><br>
		Nouvelle date de début de stage : 
		<select name="jour"> 
<?php 
for($i=1;$i<32;$i++) 
{ 
if($i<10) echo "<option>0".$i."</option>"; 
else echo "<option>".$i."</option>"; 
}?> 
</select>

<?php 
$mois= array("Janvier", "Février", "Mars","Avril", "Mai", "Juin","Juillet", "Août", "Septembre","Octobre","Novembre","Décembre"); 
?> 

<select name="mois"> 
<?php 
foreach($mois as $valeur){ 
  echo "<option>".$valeur."</option>"; 
}?> 
</select>

<select name="annee">
<?php 
for($i=2006;$i<2050;$i++) 
{ 
echo "<option>".$i."</option>"; 
}?> 
</select><br><br><br>

		
		Nouvelle durée du stage (en semaine) : 
<select name="duree"> 
<?php 
for($i=1;$i<11;$i++) 
{ 
if($i<10) echo "<option>0".$i."</option>"; 
else echo "<option>".$i."</option>"; 
}?> 
</select>
<br><br><br>
Lettre de motivation : <br> <textarea name="intitule" cols="60" rows="40"><? echo $intitule; ?></textarea><br><br>
		<input type="submit" value="Modifier"></form><?php $i++; ?><? } ?>
Je voudrais qu'il puis modifier les champs, même sur plusieurs annonces s'il souhaite.
Mais lorsque je traite avec ma page modif.php il ne met a jour qu'une seule annonce.

Voici la page modif.php
$i=0; 
while(isset($_POST['modif'.$i.''])) { 


$nom_etudiant=nl2br($_POST['nom_etudiant']);
$prenom_etudiant=nl2br($_POST['prenom_etudiant']);
$adresse_etudiant=nl2br($_POST['adresse_etudiant']);
$intitule=nl2br($_POST['intitule']);
$milieu_professionnel=nl2br($_POST['milieu_professionnel']);
$email_etudiant=nl2br($_POST['email_etudiant']);
$tel_etudiant=nl2br($_POST['tel_etudiant']);
$poste=nl2br($_POST['poste']);
$id=nl2br($_POST['id']);


$query = "UPDATE demande_stage 
SET adresse_etudiant='".$adresse_etudiant."', email_etudiant='".$email_etudiant."', intitule='".$intitule."', tel_etudiant='".$tel_etudiant."', poste='".$poste."', milieu_professionnel='".$milieu_professionnel."' WHERE nom_etudiant='".$nom_etudiant."' AND prenom_etudiant='".$prenom_etudiant."' AND id='".$id."'";


$result = mysql_query($query);

     if (!headers_sent()) 
		{
			header("location: ../index.php");
		}  

$i++; 
}
  ?>