IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Redirection après traitement de formulaire


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut Redirection après traitement de formulaire
    Bonjour

    j'ai un formulaire dont le traitement doit conduire vers une autre page, cependant j'ai l'impression que la redirection a lieu avant même que le formulaire ne soit complètement soumis.

    Comment faire pour que la sauvegarde des données en BDD soit bien executée avant la redirection?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    PHP n'est pas très intelligent : il fait les choses les unes après les autres. Si dans ton script, tu fais d'abord la sauvegarde en bdd puis la redirection (via un header ou quelque chose du style), l'enregistrement sera forcément fait avant la redirection.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonsoir,

    Donnes nous le code de ta page parceque je crois que l'ordre n'est pas du tout respecté.

    Je ne vois pas comment un formulaire si il posséde une redirection dans son code html, peut éviter cette redirection avant son submit ... ya un truc qui colle pas.

    Il faut voir que comme Celira le dit, tu demandes une pages php sur le serveur, celui ci exécute (interpréte ligne à ligne ton code) avant de te l'envoyer sur ton explorer ... donc si tu demandes un accés à la Bdd, il le fera avant que tu vois cette page

    Donc conclusion pas de rediction dans le formulaire, c lui dans le submit qui doit faire la redirction.

    Je sais pas si clair mais voilà comment je vois la chose ... je me trompe peut être si j'ai pas compris le détail de ton post

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonsoir,

    Donnes nous le code de ta page parceque je crois que l'ordre n'est pas du tout respecté.

    Je ne vois pas comment un formulaire si il posséde une redirection dans son code html, peut éviter cette redirection avant son submit ... ya un truc qui colle pas.

    Il faut voir que comme Celira le dit, tu demandes une pages php sur le serveur, celui ci exécute (interpréte ligne à ligne ton code) avant de te l'envoyer sur ton explorer ... donc si tu demandes un accés à la Bdd, il le fera avant que tu vois cette page

    Donc conclusion pas de rediction dans le formulaire, c lui dans le submit qui doit faire la redirction.

    Je sais pas si clair mais voilà comment je vois la chose ... je me trompe peut être si j'ai pas compris le détail de ton post
    Bonjour salut je suis désolé du retard je poste le code dès que je remet la main dessus, c'est un sujet que j'avais abondonné pour le régler plus tard...

    mais effectievement vos explications confirment ce que je pense savoir du fonctionnement de php d'ou mon étonnement.

    Cordialement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut
    voici le code en question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
     
    <?php
     
     
    require("./../../config/global.inc.php");
     
    //In case the Session Variable was unset, assume it is not locked.
    if(!isset($_SESSION['ProjectLocked'])){
    	$_SESSION['ProjectLocked'] = false;
    }
     
    if($_SESSION['ProjectLocked'] == false){
    	$modifReg = 0;
    	$traceTable = new T_TraceTable();
    	$traceTable->insertAll($DB, "Started Saving Operation, ".eMail_User());
     
    	//Insertion des reponses sur les regles
    	if (!isEmpty(getPOST('regle')))	{
    		$idProjetRevision  = getPOST('idProjectRevision');
    		$tabCommentaires   = getPOST('commentaire');
    		$tabStatuts        = getPOST('statut');
    		$tabQaStatuts	   = getPOST('qaStatut');
    		$tabQaCommentaires = getPOST('qaCommentaire');
    		$tabSousRubriques  = getPOST('sousRubrique');
    		$tabRegles         = getPOST('regle');
    		$nbrRegles         = sizeof($tabRegles );
     
    		$traceTable->insertAll($DB, "Saving for PR:".$idProjetRevision);
    		$traceTable->insertAll($DB, "No. Rules received: ".$nbrRegles);
     
    		if(isEmpty(getPost('idProjectRevision')))
    		{
    			echo "<H1>Warning: Project Revision is empty</H1>";
    			$traceTable->insertAll($DB, "Warning: Project Revision is empty!");
    		}
     
    		if(isEmpty(getPost('sousRubrique')))
    		{
    			echo "<H1>Warning: Sub Sections are empty</H1>";
    			$traceTable->insertAll($DB, "Warning: SousRubrique is empty!");
    		}
     
    		for ($i=0; $i < $nbrRegles; $i++)
    		{
    			try
    			{
    				$lienProjetRegle = T_lienProjetRegle::selectByIdRegleAndIdProjetRevisionAndSousRub2($DB, $tabRegles[$i], $idProjetRevision, $tabSousRubriques[$i]);
    				$lienProjetRegle->setIdStatut($tabStatuts[$i]);
    				$lienProjetRegle->setCommentaire($tabCommentaires[$i]);
    				$lienProjetRegle->setIdQaStatut($tabQaStatuts[$i]);
    				$lienProjetRegle->setQaCommentaire($tabQaCommentaires[$i]);
    				//echo $i." ".$tabCommentaires[$i]."<br/>"; //Used in debugging
    				//echo $tabQaStatus[$i]."<br>";
    				if (is_uploaded_file)
    				{
    					$nouveau_chemin = "./../../upload/";
    					if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $nouveau_chemin.$_FILES['userfile']['name'][$i]))
    					{
    						$lienProjetRegle->setPieceJointeProjet($_FILES['userfile']['name'][$i]);
    					}
    				}
    				$lienProjetRegle->setDateModificationProjetRegle(date("Y-m-d H:i:s"));
    				if($lienProjetRegle->update($DB) == 0)
    				{
    					$traceTable->insertAll($DB, "ERROR in Rule ".$i." in LienProjetRegle (Rule id: ".$tabRegles[$i].")");
    				}
     
    				//Variable pour afficher un message de modification a l'utilisateur
    				$modifReg = 1;
    				//mettre a jour la date de modification d'un projet
    				$projetRevision = T_ProjetRevision::selectById($DB, $idProjetRevision);
    				$projetRevision->setDateModificationProjetRevision(date("Y-m-d H:i:s"));
    				if($projetRevision->update($DB) == 0)
    				{
    					$traceTable->insertAll($DB, "ERROR in Rule ".$i." in Project Revision ".$idProjetRevision);
    				}
     
    				//modifier la date de modification du projet phase une fois qu'on modifie dans t_lien_projet_regle(pour que ce projet s'affiche en premier dans page declaratioProjet.php)
    				$projetPhase = T_Projet_phase::selectById($DB, $projetRevision->getIdProjetPhase());
    				$projetPhase->setDateModificationProjetPhase(date("Y-m-d H:i:s"));
    				if($projetPhase->update($DB) == 0)
    				{
    					$traceTable->insertAll($DB, "ERROR in Rule ".$i." in Project Phase ".$projetRevision->getIdProjetPhase());
    				}
     
    				$traceTable->insertAll($DB, "Saving Rule no ".$i." ID ".$tabRegles[$i].". Status: ".$tabStatuts[$i].". Comment: ".$tabCommentaires[$i]);
    			}
    			catch(Exception $e)
    			{
    				$traceTable->insertAll($DB, "Saving Rule no  ".$i." in PR ".$idProjetRevision.". ERROR: ".$e->getMessage());
     
     
    			}
    		}
    	}
    	else
    	{
    		echo "<H1>WARNING: The rules are sent EMPTY</H1>";
    		$traceTable->insertAll($DB, "Rules 'regle' sent were empty");
     
    	}
     
     
    	T_ProjetRevision::UnlockProjet($DB, $idProjetRevision);
    	$_SESSION['ProjectLocked'] = T_ProjetRevision::IsProjectLocked($DB, $idProjetRevision);
     
    	$traceTable->insertAll($DB, "End of Saving Operation");
     
     
    	$targetLink = getPOST('targetLink');
     
    	switch ($targetLink)
    	{
    		case "accueil":
    			$targetlink = "./../../views/identification/accueil.php";
    			break;
     
    		case "identification":
    			$targetlink = "./../../views/identification/identification.php";
    			break;
     
    		case "declaration":
    			$targetlink = "./../../views/projets/declarationProjet.php";
    			break;
     
    		case "declaration":
    			$targetlink = "./../../views/projets/declarationProjet.php";
    			break;
     
    		case "listchecklist":
    			$targetlink = "./../../views/projets/listChecklist.php?idPR=".$idProjetRevision;
    			break;
     
    		case "default":
    			$targetlink = "./genererChecklist.php?modifReg=".$modifReg."&idPR=".getPOST('idProjectRevision');
    			break;
     
    		case "disconnect":
    			$targetlink ="./../../controllers/identification/deconnecter.php";
    			break;
     
    		default: //In case of any phases re-direction
    			$targetlink = "./../../controllers/projets/genererChecklist.php?idPR=".substr($targetLink,3);
    			break;
    	}
     
     
     
     
    	echo
    	'
    	<script type="text/javascript">
    	function go_now() 
    	{
    	    //window.open("'.$targetlink.'", _self);
    		window.location.href = "'.$targetlink.'";
    	};
    	
    	function redirect() 
    	{
    	    setTimeout("go_now()", 2000);
    	};
    	</script>
    	';
     
    	?>
     
    <BODY onLoad="redirect();">
    	<?php
    	if($_SESSION['ProjectLocked'] == false)
    	{?>
    <H1>Processing...</H1>
    	<?php
    	}?>
     
    </BODY>
    	<?php
    }
    else
    {
     
    	$targetLink = getPOST('targetLink');
    	$idProjetRevision  = getPOST('idProjectRevision');
     
    	switch ($targetLink)
    	{
    		case "accueil":
    			$targetlink = "./../../views/identification/accueil.php";
    			break;
     
    		case "identification":
    			$targetlink = "./../../views/identification/identification.php";
    			break;
     
    		case "declaration":
    			$targetlink = "./../../views/projets/declarationProjet.php";
    			break;
     
    		case "declaration":
    			$targetlink = "./../../views/projets/declarationProjet.php";
    			break;
     
    		case "listchecklist":
    			$targetlink = "./../../views/projets/listChecklist.php?idPR=".$idProjetRevision;
    			break;
     
    		case "default":
    			$targetlink = "./genererChecklist.php?modifReg=".$modifReg."&idPR=".getPOST('idProjectRevision');
    			break;
     
    		case "disconnect":
    			$targetlink ="./../../controllers/identification/deconnecter.php";
    			break;
     
    		default: //In case of any phases re-direction
    			$targetlink = "./../../controllers/projets/genererChecklist.php?idPR=".substr($targetLink,3);
    			break;
    	}
     
    	redirige($targetlink);
    }
    ?>

  6. #6
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par lekunfry Voir le message
    j'ai l'impression que la redirection a lieu avant même que le formulaire ne soit complètement soumis.
    le code fait bien la redirection après le traitement
    qu'est ce qui te fait penser que ce n'est pas le cas ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut
    Citation Envoyé par nosferapti Voir le message
    le code fait bien la redirection après le traitement
    qu'est ce qui te fait penser que ce n'est pas le cas ?
    ce qui me fait penser que ce n'est pas le cas c'est que les informations soumises dans ce formulaire ne sont pas toutes enregistrés en base de données!

    là on est obligé d'afficher une page du style vide informant l'utilisateur que l'application enregistre ses données en base...

Discussions similaires

  1. [2.x] Redirection après validation de formulaire
    Par vivgar dans le forum Symfony
    Réponses: 3
    Dernier message: 21/02/2014, 16h44
  2. Redirection après un formulaire
    Par davidbxl2006 dans le forum Langage
    Réponses: 7
    Dernier message: 15/10/2006, 21h23
  3. Réponses: 1
    Dernier message: 10/04/2006, 20h22
  4. Redirection après formulaire...
    Par kobe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2006, 09h53
  5. [Strategie]Redirection après un formulaire
    Par kyser91 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 19/03/2004, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo