refresh sur une page apres un post

Eléphanteau du PHP | 13 Messages

09 juin 2007, 12:29

j ai une page qui s'auto appel apres un post, ce qui fonctionne sans probleme.

Toutefois lorsque je fais refresh sur cette page , le formulaire est reexpedié .
j ai tenté de modifier la variable $_Post['nom'] en lui affectant une autre valeur en vain.le formulaire reexpédié me redonne les valeurs d origine.

le detail est dans la fonction ci dessous, il y a creation d un enregistrement vierge lorsque la ligne vierge est modifiée lors de l edition . le fait que le refresh me redonne le Contenu du precedent Post
a chaque refresh une nouvelle ligne est créée , ce qui n'est pas souhaitable.

d'avance Merci de vos idées, et aides .
-------------------------------------------------------


function savemodif() // aprés modification du formulaire et appuie sur "Enregistrer"
// $POST contient les anciennes valeurs dans le nom du champ sous la forme idchar.ancienne valeur,
// et la nouvelle valeur dans le contenu du champ
// cas particulier de l ajout : la valeur du champ nom etait vide au debut,
// apres enregistrement il faut recreer un enregistrement vide pour l ajout suivant dans la BdD
{ global $table, $colonnes; // colonnes contient le nombre de champs dans la table
// pour chaque champ post
$compteur=0; // inutile
$messenr=FALSE; // message d 'enregistrement affiché si true
$nouveauinsert=FALSE; // TRUE si creation nouvel enregistrement pour insertion dans BdD
if(count($_POST))
{ // pour chaque variable dans le post sauf le bouton submit
while( list($key, $val) = each($_POST) )
{
if ($key!="Enregistrer" && $key!="edition")
{
$newvaleur=$val; // recup nouvelle valeur contenue dans le champ en cours
$posslash= strrpos($key,"/") ;
$posunderbar= strrpos ( $key, "_" ) ;
$id= substr($key,0, $posslash) ; // recup id
$nomchamp= substr($key, $posslash+1, $posunderbar-$posslash-1); // recup nom champ
// recup valeur
$long=strlen($key);
$oldvaleur= substr($key, $posunderbar+1,strlen($key)); //recup ancienne valeur du champ
if ($oldvaleur===FALSE) { $oldvaleur='' ; } // recup erreur substr
$changement= ($newvaleur != $oldvaleur ) ;
$longold=strlen($oldvaleur);
if ( ($long==$posunderbar+1) && !$nouveauinsert && $changement && ($longold==0)) // le contenu du champ est vide,
{ // et le nouvel enregistrement n'est pas crée ( $nouveauinsert)
$oldvaleur=""; // par defaut
// ca marche pas :--->>> $_POST[$key]="refresh"; // pour eviter rajout de ligne supplementaire si refresh et donc repost
// lors du refresh le $_POST reprend ca valeur d origine
//creer un nouvel enregistrement vide
$sql="INSERT INTO ".$table." VALUES('','',''";
for ($k=3;$k<$colonnes;$k++)
{
$sql=$sql.",''";
}
$sql=$sql.")";
$req3=MYSQL_QUERY($sql);
if (!$req3) {
$message = 'Requête update ".$table." invalide : ' . mysql_error() . "<br>";
$message .= 'Requête complète 2: ' . $sql;
die($message);
}
$nouveauinsert = TRUE;
}
if ($newvaleur!=$oldvaleur) // si edition, modification
{
if($oldvaleur!=""&& $nomchamp=="Pseudo") // test si nouveau pseudo à ajouter
{ // creer un nouvel enregistrement vide
$test=2; // breakpoint pour test ??? ce if est unitile ?? faire test
}
// enregistrer la modification dans la table
if ($changement && !$messenr) {
print("Modifications enregistrées");
$messenr=TRUE; // pour ne pas affiché le message ci dessus plusieurs fois
}
$sql=("UPDATE ".$table." SET $nomchamp='$newvaleur' where idname='$id'");
$req2=MYSQL_QUERY($sql);
if (!$req2) {
$message = 'Requête update '.$table.'invalide : ' . mysql_error() . "<br>";
$message .= 'Requête complète : ' . $sql;
die($message);
}
}
$compteur++;
}
}
}
} // savemodif()

Mammouth du PHP | 19672 Messages

09 juin 2007, 12:41

Modération :
dorad, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: