Bonjour,

Je suis débutante et j'ai un petit problème avec mon code.
Je fais quelque essait sur un formulaire.

J'ai crée un formulaire qui contient un:

  • input type text
  • textarea
  • upload image

j'envoie le formulaire en $_POST qui vérifie si l'image est bonne (extension etc), si tout est OK j'ajoute dans la base de donnée tout le contenu du form vers la base de donnée, dans le cas contraire je fais une redirection vers le formulaire (du coup il y a un rechargement de la page)

Et voici le JS qui arrive !
Donc en JS j'ai voulu stocké le titre & le contenu en local storage pour re-afficher le contenu dans le cas ou il y a un rechargement de la page du à la vérification de l'image.

Mais je n'arrive pas à faire afficher dans mon Input & textarea

Voici mes codes:
HTML :

<main id="addActualite">
  <form method="POST" action="controleurs/adminAddActualite.class.php" enctype="multipart/form-data">

   <fieldset>
      <legend>Ajouter un article</legend>
      <div>
        <label for="titre">Titre: </label>
        <input type="text" id="titre" name="titre">
      </div>
      <div>
        <label for="contenu">Article: </label>
        <textarea name="contenu" id="contenu" rows="5"></textarea>
      </div>
      <div>
        <label for="photo">Photo: </label>
        <input type="file" id="photo" name="photo">
      </div>
      <input type="submit" id="ajouter">
      <a href="#">Annuler</a>
    </fieldset>
  </form>
</main>

JS - j'ai essayé avec .html() en jquery mais apparemment sur un input ça ne marche pas :/ :

function onSubmitForm(evt)
{
  //EVT annuler
  evt.preventDefault();
  //console.log("ok add ANNULER");

  //Recup les valeurs de chaque case
  var titre = $('#titre').val(); //console.log(titre);
  var contenu = $('#contenu').val(); //console.log(contenu);

  localStorage.setItem("titre", titre); //console.log(localStorage.titre);
  localStorage.setItem("contenu", contenu); //console.log(localStorage.contenu);

  if(typeof localStorage != 'undefined')
  {
    if (('titre' in localStorage) || ('contenu' in localStorage))
    {
      var titreRecup = localStorage.getItem('titre'); console.log(titreRecup);
      var contenuRecup = localStorage.getItem('contenu'); console.log(contenuRecup);
      titre
    }
  }
  else
  {
    alert("Veuillez recommencé la manip");
  }

//Essait sur label : OK
//Essait sur input: NON -> Comment faire ?

}

//////////////////////////////////////////////////////////////////////
// CODE PRINCIPAL
///////////////////////////////////////////////////////////////////////
$(function()
{
  console.clear();
  //Ecouteur sur le form (bouton ajouter)
  $("#ajouter").click("submit", onSubmitForm);

});

et le PHP si besoin:

include '../../BDD/pdo.php'; //Connexion PDO
var_dump($_POST);
var_dump($_FILES);

if( isset($_POST) ) // si formulaire soumis
{

  if( !is_uploaded_file($tmp_file) )
  {
      $errorMessage = "Le fichier est introuvable";
      header('Location: ../adminAddActualite.php');

  }
  if( !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'jpg'))
  {
      $errorMessage = "Le fichier n'est pas une image";
      header('Location: ../adminAddActualite.php');
  }

}

//AJOUT A LA BDD
$queryNewArticle = $pdo -> prepare ('
INSERT INTO
  actualite (titre, contenu, photo)
VALUES
  (?,?,?)');

$queryNewArticle -> execute([$_POST["titre"],$_POST["contenu"],$_FILES["photo"]["name"]]);

Je tiens à re précisé que je suis novice, du coup s'il est possible de m'expliqué avec des termes pas trop "compliqué" & je remercie d'avance tout personne qui prendront le temps ! :)

3 réponses


Salut,

Pas besoin de JS dans ce cas là, utilises plutôt les variables de session pour passer des données après rechargement.

NathCode
Auteur

Merci pour vos réponses.
Du coup j'ai optée pour SESSION, je tente, étant novice je ne trouve ça pas plus évident que JS :/
Du coup comment puis je faire pour faire afficher se que j'ai stocké en session (titre & contenu) dans le input & textarea lors du rechargement de la page ?

session_start();
$_SESSION['titre'] = $_POST['titre']; var_dump($_SESSION['titre']);
$_SESSION['contenu'] = $_POST['contenu']; var_dump($_SESSION['contenu']);

J'ai tentée de mettre dans mon input, mais ça n'a pas marcher. Je pense que ça vient de mon include, je l'utilise peut etre pas comme il faut ? ça m'affiche que m'a variable est undefined

value="<?= $_SESSION['titre']; ?>"

if( isset($_POST) ) // si formulaire soumis
{

  if( !is_uploaded_file($tmp_file) )
  {
      $errorMessage = "Le fichier est introuvable";
      include '../adminAddActualite.php';
      header('Location: ../adminAddActualite.php');

  }
  if( !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'jpg'))
  {
      $errorMessage = "Le fichier n'est pas une image";
      include '../adminAddActualite.php';
      header('Location: ../adminAddActualite.php');
  }

}

Le session_start() doit être appelé dans tous les fichiers qui utilisent les sessions.

La façon que tu utilises me paraît valide et cohérente. A toi de debugger ;)