Garder des données avant enregistrement en base

Eléphant du PHP | 103 Messages

23 juin 2011, 10:16

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.

Eléphanteau du PHP | 24 Messages

23 juin 2011, 10:27

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.

+++

Eléphant du PHP | 103 Messages

23 juin 2011, 10:33

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 :(.

Eléphanteau du PHP | 24 Messages

23 juin 2011, 10:52

Tu as bien inséré <?php session_start(); ?> en début de chaque page ? Même celle du traitement.

Eléphant du PHP | 103 Messages

23 juin 2011, 11:02

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.

Eléphant du PHP | 103 Messages

23 juin 2011, 14:01

Quelqu'un peut m'aider ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 14:30

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


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

23 juin 2011, 15:52

Oui je dois surement pas bien m'en servir parce que ca marche toujours po :s

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 16:51

quel code ?
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

23 juin 2011, 17:13

En fait c'est plus compliqué ce que j'ai à faire

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 17:26

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é ?

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 103 Messages

24 juin 2011, 10:31

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.

Eléphant du PHP | 103 Messages

24 juin 2011, 15:07

Pas de suggestions ? :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 juin 2011, 20:28

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 ;)


@+
Il en faut peu pour être heureux ......