Page 1 sur 1

Garder des données avant enregistrement en base

Posté : 23 juin 2011, 10:16
par Jibe
Bonjour,

Je poste un nouveau sujet car j'ai un problème qui pourtant me semble pas compliqué mais n'étant pas fort en php je ne trouve pas la solution.

Voici un bout de code :
<tr>
 <th>Compétences</th>
 <th>Compétences spécifiques</th>
 <th>Précédentes</th>
 <th>Evaluation</th>
 <th>Cibles</th>
</tr>
$req = $bdd->query('SELECT competence.libcomp, scompetence.libscomp, scompetence.defscomp, l_collab_niv_met.nive, l_collab_niv_met.niveau, l_collab_niv_met.codescomp FROM competence, scompetence, metier, l_collab_niv_met WHERE l_collab_niv_met.matricule = '.$_SESSION['vale'].' and l_collab_niv_met.codemet = metier.codemet AND l_collab_niv_met.codecomp = competence.codecomp AND l_collab_niv_met.codescomp = scompetence.codescomp ORDER BY competence.libcomp ASC, scompetence.libscomp ASC');
while ($donnees = $req->fetch())
{
 ?>
	<tr>
		<td align="left"><?php echo $donnees['libcomp']; ?></td>
		<td align="left"><p onmouseover="montre('<?php echo addslashes($donnees['defscomp']); ?>');" onmouseout="cache();"><?php echo $donnees['libscomp']; ?></td>
		<td><?php echo $donnees['nive']; ?></td><?php
		<td><input type="text" name="eval[<?php echo $donnees['codescomp'];?>]" id="eval[<?php echo $donnees['codescomp'];?>]" size="2" maxlength="1" tabindex="5"/></td><?php
		<td><?php echo $donnees['niveau']; ?></td>														
	</tr>
 <?php
}
Avec ce code j'ai dont 5 colonnes, la seule colonne qui intéresse l'utilisateur est la 4ème car il rentre des notes. Jusque là tout va bien. Mon problème c'est qu'après il est redirigé vers une autre page ou il doit encore rentrer des notes mais si jamais il veut revenir en arrière pour changer une note, comment faire pour que les valeurs qu'il a saisi n'aient pas disparue ? En gros tant qu'il n'a pas appuyer sur le bouton valider (qui se situe sur la 2ème page) il peut modifier les notes comme il veut.
J'espère que c'est assez claire.
Merci à celles et ceux qui pourraient m'aider.

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 10:27
par mauvais
Salut,

Tu peux garder le tout dans des $_SESSION['choix']; et établir un session_destroy(); ciblé lors du submit final si il y a.
Ou sinon tu gardes le tout dans des variables et tu ne changes pas de page en te servant des element.display en js... ou autre.

+++

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 10:33
par Jibe
Salut,

Déjà merci pour ta réponse. Ensuite j'ai essayé de stocké les valeurs dans un $_SESSION, donc quand j'appuie sur le bouton pour aller à la page suivante, entre temps j'ai une page (qu'on ne voit pas juste de traitement) ou je disais $_SESSION['note'] = $_POST['eval'] et après dans ma 1ère page en je rajoutais à l'input value=$_SESSION['note'] mais ça ne marche pas :(.

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 10:52
par mauvais
Tu as bien inséré <?php session_start(); ?> en début de chaque page ? Même celle du traitement.

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 11:02
par Jibe
Voilà mon code un peu changé de la 1ère page (en début de page il y a bien la session_start() ) :wink:
if(isset($_SESSION['eval']))
{
	$notemet = $_SESSION['eval'];
}
else
{
	$notemet = '';
}
												
$req = $bdd->query('SELECT competence.libcomp, scompetence.libscomp, scompetence.defscomp, l_collab_niv_met.nive, l_collab_niv_met.niveau, l_collab_niv_met.codescomp FROM competence, scompetence, metier, l_collab_niv_met WHERE l_collab_niv_met.matricule = '.$_SESSION['vale'].' and l_collab_niv_met.codemet = metier.codemet AND l_collab_niv_met.codecomp = competence.codecomp AND l_collab_niv_met.codescomp = scompetence.codescomp ORDER BY competence.libcomp ASC, scompetence.libscomp ASC');
while ($donnees = $req->fetch())
{
?>
	<tr>
		<td align="left"><?php echo $donnees['libcomp']; ?></td>
	        <td align="left"><p onmouseover="montre('<?php echo addslashes($donnees['defscomp']); ?>');" onmouseout="cache();"><?php echo $donnees['libscomp']; ?></td>
		<td><?php echo $donnees['nive']; ?></td>
		<td><input type="text" name="eval[<?php echo $donnees['codescomp'];?>]" id="eval[<?php echo $donnees['codescomp'];?>]" value="<?php echo $notemet; ?>" size="2" maxlength="1" tabindex="5"/></td>
		<td><?php echo $donnees['niveau']; ?></td>														
	</tr>
<?php
}
Voici la page de traitement :
<?php
session_start();	
$_SESSION['eval'] = $_POST['eval'];
header("Location: niveau_fct.php");
?>
Donc après j'arrive sur niveau_fct (ou il y a bien la session_start) et quand je fais précédent au lieu d'avoir les notes saisies j'ai array.

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 14:01
par Jibe
Quelqu'un peut m'aider ?

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 14:30
par moogli
je pense que tu ne sais pas exploiter ce que tu met en session ?

il te faut préremplir de le formulaire avec la donnée en session, pour cela plus simple est d'avoir un tableau indexé avec un identifiant (généralement la clef primaire de la table sql).

dans ce cas tu insère $_SESSION['note'][ identifiant ] = note du formulaire

a faire pour chaque note.

pour remplir un champ a l'affiche il suffit de tester l'identifiant existe dans $_SESSION['note'] et si c'est le cas de l'afficher.
le test se fait avec la fonction isset


@+

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 15:52
par Jibe
Oui je dois surement pas bien m'en servir parce que ca marche toujours po :s

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 16:51
par moogli
quel code ?

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 17:13
par Jibe
En fait c'est plus compliqué ce que j'ai à faire

Re: Garder des données avant enregistrement en base

Posté : 23 juin 2011, 17:26
par moogli
bof, on ne pourra pas t'aider sans code, on ne fera le système pour toi.

Je t'ai donné une piste l'a tu suivis et testé ?

@+

Re: Garder des données avant enregistrement en base

Posté : 24 juin 2011, 10:31
par Jibe
Ca marche presque sauf que au lieu de me retourner toutes les valeurs, il me renvoie juste la dernière.
if(isset($_SESSION['note']))
{
foreach($_SESSION['note'] as $element)
{
	$note = $element;
}
}
else
{
 $note = '';
}
												
$req = $bdd->query('SELECT competence.libcomp, scompetence.libscomp, scompetence.defscomp, l_collab_niv_met.nive, l_collab_niv_met.niveau, l_collab_niv_met.codescomp  FROM competence, scompetence, metier, l_collab_niv_met WHERE l_collab_niv_met.matricule = '.$_SESSION['vale'].' and l_collab_niv_met.codemet = metier.codemet AND l_collab_niv_met.codecomp = competence.codecomp AND l_collab_niv_met.codescomp = scompetence.codescomp ORDER BY competence.libcomp ASC, scompetence.libscomp ASC');
while ($donnees = $req->fetch())
{
?>
	<tr>
		<td align="left"><?php echo $donnees['libcomp']; ?></td>
		<td align="left"><p onmouseover="montre('<?php echo addslashes($donnees['defscomp']); ?>');" onmouseout="cache();"><?php echo $donnees['libscomp']; ?></td>
		<td><?php echo $donnees['nive']; ?></td><?php
		<td><input type="text" name="eval[<?php echo $donnees['codescomp'];?>]" id="eval[<?php echo $donnees['codescomp'];?>]" value="<?php echo $note; ?>" size="2" maxlength="1" tabindex="5"/></td><?php
		<td><?php echo $donnees['niveau']; ?></td>														
	</tr>
<?php
}
Ensuite j'ai une page ou je recupère $eval (donc les notes) et je les mets dans $_SESSION['note']. Le problème c'est que quand je reviens en arrière, il m'affiche pour toute les cases seulement la dernière note qui a été saisie. Le $note ne retiens que la dernière valeur et non toute les valeurs.

Re: Garder des données avant enregistrement en base

Posté : 24 juin 2011, 15:07
par Jibe
Pas de suggestions ? :(

Re: Garder des données avant enregistrement en base

Posté : 24 juin 2011, 20:28
par moogli
c'est ce que tu demande dans la boucle foreach vue que tu n'utilise qu'une variable et non un tableau.

Pourquoi ne pas utiliser directement $_SESSION['note'] pas besoin d'utiliser d'autre variable ;)


@+