[RESOLU] Empêcher renvoi formulaire après rafraîchissement de la page

Eléphanteau du PHP | 25 Messages

18 juin 2019, 11:19

Bonjour

Comment empêcher le renvoi de formulaire avec le refresh.

index.php

// DEFINE DATABASE PDO
try {
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '');
} catch (\Throwable $e) {
    die('Erreur : ' . $e->getMessage());
}

// INSERT TO DATABASE
if (isset($_POST["Titre"])) {
    $Titre = $_POST["Titre"];
    $Contenu = $_POST["Contenu"];
    // PREPARE QUERY - use prepare pour les accents sur les lettres
    $req = $bdd->prepare("INSERT INTO billets(titre, contenu, date_creation) values (?, ?, NOW())");
    $req->execute(array($Titre, $Contenu));
}






Merci

Avatar du membre
Mammouth du PHP | 1609 Messages

18 juin 2019, 11:56

Salut, il faut que tu fasses une redirection après avoir traité le formulaire
header('Location: unscript.php'); 
exit();
ainsi le refresh se fera sur cette adresse.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

18 juin 2019, 14:25

ça marche pas. C'est peut être parce que le code du form insert est dans le propre index. Et comme je mets le code refresh dans l'index... ça fais une boucle.

Avatar du membre
Mammouth du PHP | 1609 Messages

18 juin 2019, 14:35

Normalement t'es pas sensé avoir une boucle. Avec un script index.php :
if (isset($_GET['action']) && $_GET['action'] == 'insert') {
  // do the insert
  /* redirect after the insert */
  header('Location: index.php');
  exit();
}
// page display
La condition du if peut être n'importe quelle condition qui te permet de savoir que tu dois faire l'insert, mais il faut évidemment que cette condition ne soit pas valide lorsqu'il n'y pas d'insert à faire ainsi php ne passe pas sur le header location et il n'y pas de boucle de redirection.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

18 juin 2019, 14:46

Voici mon Code: peux-tu m'indiquer ou je dois ajouter le header?


<?php

// DEFINE DATABASE PDO
try {
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '');
} catch (\Throwable $e) {
    die('Erreur : ' . $e->getMessage());
}

// INSERT TO DATABASE
if (isset($_POST["Titre"])) {
    $Titre = $_POST["Titre"];
    $Contenu = $_POST["Contenu"];
    // PREPARE QUERY - use prepare pour les accents sur les lettres
    $req = $bdd->prepare("INSERT INTO billets(titre, contenu, date_creation) values (?, ?, NOW())");
    $req->execute(array($Titre, $Contenu));
}

// GET INDEX HTML
$view = file_get_contents(("index_vue.html"));

// GET BILLET CONTENT
$billets = file_get_contents("billet_content.html");

// GET BILLETS FROM DATABASE
try {
    $bdd = new PDO('mysql:host=localhost; dbname=blog', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
} catch (Exception $e) {
    die('Erreur : ' . $e->getMessage());
}

// PREPARE QUERY QUERY - use prepare pour les accents sur les lettres
$req = $bdd->prepare("SELECT * FROM billets ORDER BY date_creation DESC");
$req->execute();

// -- REPLACE LIST_BILLETS --
// FETCH QUERY RESULT FROM DATABASE TO $result
$result = $req->fetchall();
$bloc_billet = "";
foreach ($result as $current_result) {
    $current_billet = $billets;
    // REPLACE {DATE_BILLET} - BY $current_result["date_creation"] - INSIDE $current_billet
    $current_billet = str_replace("{DATE_BILLET}", $current_result["date_creation"], $current_billet);
    $current_billet = str_replace("{TITRE_BILLET}", $current_result["titre"], $current_billet);
    $current_billet = str_replace("{CONTENU_BILLET}", $current_result["contenu"], $current_billet);
    $current_billet = str_replace("{ID}", $current_result["id"], $current_billet);
    $bloc_billet .= $current_billet;
}

// REMPLACEMENT FINAL AVEC LE CODE FINALE
$view = str_replace("{LIST_BILLETS}", $bloc_billet, $view);

// MONTRE TOUT LE CODE DE LA PAGE
echo $view;




Avatar du membre
Mammouth du PHP | 1609 Messages

18 juin 2019, 14:55

Si tu essaies de comprendre l'exemple que je t'ai donné, ça devrait pas être très compliqué de déterminer où placer ce fameux header.
T'as pas un if qui encapsule le code d'insertion ? alors où mettre le header à ton avis ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 25 Messages

18 juin 2019, 16:51

J'ai compris, ça marche, merci beaucoup.

Vigile
Invité n'ayant pas de compte PHPfrance

07 juin 2020, 00:23

[PHP]
[/PHP]
Salut, il faut que tu fasses une redirection après avoir traité le formulaire
header('Location: unscript.php'); 
exit();
ainsi le refresh se fera sur cette adresse.
bonsoir j'ai essaye mais ca marche pas