Bonjour à tous,
Je suis débutant en PHP et jusqu'à maintenant, j'ai toujours trouvé les réponses à mes questions en cherchant, mais pas cette fois ci... J'étais habitué à venir sur ce forum en tant que simple invité, mais aujourd'hui, j'ai besoin d'aide, et c'est mon tout premier post
Je suis en train de développer une petite application web qui permet à un utilisateur de rédiger un article, de lui donner un titre et de télécharger une image via un formulaire. L'utilisateur peut prévisualiser le résultat mis en forme, et si ça lui convient, on enregistre le tout dans une table de ma base de données.
Ma version de PHP est 5.6.25 et je travaille avec Wamp en local.
J'ai un problème avec le fonctionnement des Sessions. Je les utilises afin de sauvegarder les valeurs des champs du formulaire après soumission, sinon lorsque l'utilisateur prévisualise l'article, on perd tout au rechargement de la page, et c'est embêtant. J'enregistre donc les $_POST de mes deux champs titre et texte dans deux sessions. Je demande ensuite à PHP d'afficher le contenu de ces sessions dans les attributs value=" " de mes champs, afin d'immédiatement réafficher ce que l'utilisateur à tapé.
Je précise que, par choix et souhaitant me donner un peu de difficulté, tout se passe sur une seule et unique page : redaction.php.
ça ne fonctionne malheureusement pas entièrement : lorsque j'ai rempli les champs, et que je valide le formulaire, le tout se prévisualise bien, mais mes champs sont vide. Par contre si j'actualise ma page juste après, la prévisualisation reste et mes champs se remplissent, ce qui est à la base le comportement que j'attendais... On dirait que PHP à un temps d'écart sur ce que je souhaite qu'il fasse. Je pense que le problème vient de moi, c'est sûrement une histoire de logique et peut être que je n'ai pas bien compris le fonctionnement d'une session. ça fait quelques jours que je bloque là dessus...
Ah oui, autre chose : dans ce script, en l'état actuel, on a quelques erreurs Undefined index quand on arrive sur la page. C'est normal, vu qu'on a rien soumis, les variables ne sont pas encore définies. A la base, je les avait toutes mises dans une condition if isset, mais je l'ai enlevé pensant que mon problème pouvait venir de là...
Le fonctionnement :
On y trouve deux formulaires, dont un pour écrire le texte. Un clic sur le bouton nommé "preview" affichera le texte mis en forme dans un <div> ET enregistrera le $_POST dans des sessions. Un clic sur le bouton nommé "submit" enregistrera l'article et l'adresse de l'image dans la base de données.
Le second formulaire permet simplement de télécharger une image sur le serveur. Elle s'affiche aussitôt dans l'espace de prévisualisation, et est stockée dans une variable de session afin que l'utilisateur puisse prévisualiser à souhait sans devoir re-télécharger l'image. Pour l'image, ça fonctionne très bien, elle s'affiche immédiatement, je peux écrire du texte, prévisualiser à souhait, recharger la page... L'image est toujours là. Le texte aussi cela dit, il ré-apparaît bien dans les champs, mais pas juste après avoir cliqué sur Prévisualiser, il faut d'abord recharger la page manuellement.
Voici le code HTML de la page :
Maintenant, le code PHP, qui est situé en tout début de page :
J'espère vous avoir donné suffisamment d'infos pour vous permettre de m'aider. Si ce n'est pas le cas, je fournirai ce qu'il manque.
Je bloque vraiment et je ne comprend pas pourquoi le contenu de mes $_SESSION ne s'affichent pas immédiatement après soumission du formulaire. Un regard d'expert sur la chose me sera bénéfique, et je suis d'avance reconnaissant à celles et ceux qui voudront bien m'aider.
Merci beaucoup !
Loraga
Modifié par Loraga (23 Nov 2017 - 17:03)
Je suis débutant en PHP et jusqu'à maintenant, j'ai toujours trouvé les réponses à mes questions en cherchant, mais pas cette fois ci... J'étais habitué à venir sur ce forum en tant que simple invité, mais aujourd'hui, j'ai besoin d'aide, et c'est mon tout premier post
Je suis en train de développer une petite application web qui permet à un utilisateur de rédiger un article, de lui donner un titre et de télécharger une image via un formulaire. L'utilisateur peut prévisualiser le résultat mis en forme, et si ça lui convient, on enregistre le tout dans une table de ma base de données.
Ma version de PHP est 5.6.25 et je travaille avec Wamp en local.
J'ai un problème avec le fonctionnement des Sessions. Je les utilises afin de sauvegarder les valeurs des champs du formulaire après soumission, sinon lorsque l'utilisateur prévisualise l'article, on perd tout au rechargement de la page, et c'est embêtant. J'enregistre donc les $_POST de mes deux champs titre et texte dans deux sessions. Je demande ensuite à PHP d'afficher le contenu de ces sessions dans les attributs value=" " de mes champs, afin d'immédiatement réafficher ce que l'utilisateur à tapé.
Je précise que, par choix et souhaitant me donner un peu de difficulté, tout se passe sur une seule et unique page : redaction.php.
ça ne fonctionne malheureusement pas entièrement : lorsque j'ai rempli les champs, et que je valide le formulaire, le tout se prévisualise bien, mais mes champs sont vide. Par contre si j'actualise ma page juste après, la prévisualisation reste et mes champs se remplissent, ce qui est à la base le comportement que j'attendais... On dirait que PHP à un temps d'écart sur ce que je souhaite qu'il fasse. Je pense que le problème vient de moi, c'est sûrement une histoire de logique et peut être que je n'ai pas bien compris le fonctionnement d'une session. ça fait quelques jours que je bloque là dessus...
Ah oui, autre chose : dans ce script, en l'état actuel, on a quelques erreurs Undefined index quand on arrive sur la page. C'est normal, vu qu'on a rien soumis, les variables ne sont pas encore définies. A la base, je les avait toutes mises dans une condition if isset, mais je l'ai enlevé pensant que mon problème pouvait venir de là...
Le fonctionnement :
On y trouve deux formulaires, dont un pour écrire le texte. Un clic sur le bouton nommé "preview" affichera le texte mis en forme dans un <div> ET enregistrera le $_POST dans des sessions. Un clic sur le bouton nommé "submit" enregistrera l'article et l'adresse de l'image dans la base de données.
Le second formulaire permet simplement de télécharger une image sur le serveur. Elle s'affiche aussitôt dans l'espace de prévisualisation, et est stockée dans une variable de session afin que l'utilisateur puisse prévisualiser à souhait sans devoir re-télécharger l'image. Pour l'image, ça fonctionne très bien, elle s'affiche immédiatement, je peux écrire du texte, prévisualiser à souhait, recharger la page... L'image est toujours là. Le texte aussi cela dit, il ré-apparaît bien dans les champs, mais pas juste après avoir cliqué sur Prévisualiser, il faut d'abord recharger la page manuellement.
Voici le code HTML de la page :
<!-- Formulaire pour écrire le titre et le texte de l'article. Ce sont ces champs là qui doivent garder leur valeur après la prévisualisation... -->
<h3>Rédiger un article :</h3>
<form action="redaction.php" method="post" name="form" id="form">
Titre : <input id="news_title" type="text" name="news_title" value="<?php echo $_SESSION['title'] ; ?>"><br><br>
<textarea name="news_text" id="news_text"><?php echo $_SESSION['txt'] ;?></textarea><br>
Auteur : <input id="news_auteur" type="text" name="news_auteur" value="<?php echo htmlentities($_SESSION['username']); ?>"/><br><br>
<div>
<input class="connect_button" type="submit" name="preview" value="Prévisualiser" />
<input class="connect_button" type="submit" name="submit" value="Publier" />
</div>
</form>
<!-- Formulaire pour télécharger une image -->
<form action="redaction.php" method="post" name="image" id="image" enctype="multipart/form-data"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="20000" />
Ajouter une image : <input id="news_image" type="file" name="news_image">
<input type="submit" value="Télécharger">
</form>
<!-- Espace de prévisualisation -->
<h3 style="text-align:center;">Prévisualiser l'article :</h3>
<div class="news_container">
<img alt="Téléchargez une image pour la visionner" src="uploads/<?php print_r(isset($_SESSION['image']) ? $_SESSION['image'] : '' );?>">
<?php
// Stocker les valeurs des champs dans des sessions
$_SESSION['title'] = htmlspecialchars($_POST['news_title']);
$_SESSION['txt'] = $_POST['news_text'];
if (isset($_POST['preview'])) // Si le formulaire est prévisualisé
{
echo('<h3>'); print_r($_SESSION['title']); echo ('</h3>') ; // Titre
print_r ($_SESSION['txt'] ); // Texte HTML
echo ('<i> Publié par ' . htmlspecialchars($_POST['news_auteur']) . ','); // Publié par "nom utilisateur",
echo (' le '); // le
echo date('d-m-Y'); // "Date"
echo (' à '); // à
echo date('H:i'); // "Heure"
echo ('.</i>'); // (Fin).
}
if (isset($_POST['submit'])) // Si le formulaire est soumis
{
// Déclaration des variables
$news_title = htmlspecialchars($_POST['news_title']);
$news_text = $_POST['news_text'];
$news_auteur = htmlspecialchars($_POST['news_auteur']);
$news_image = $_FILES['news_image']['name'];
//Connexion
try
{
$bdd = new PDO('mysql:host=localhost;dbname=imfp_admin;charset=utf8', 'root', '');
}
catch(
Exception $e )
{
die('Erreur : '.$e->getMessage());
}
//Insertion des données dans la base
$req = $bdd->prepare( 'INSERT INTO news(news_title, news_text, news_date, news_auteur, news_image) VALUES(:news_title, :news_text, NOW(), :news_auteur, :news_image)' );
$req->execute(array(
'news_title' => $news_title,
'news_text' => $news_text,
'news_auteur' => $news_auteur,
'news_image' => $news_image));
echo "L'article a bien été ajouté.";
}
?>
</div>
Maintenant, le code PHP, qui est situé en tout début de page :
<?php
session_start();
// Envoyer une image
if(!empty($_FILES)){
$dossier = 'uploads/';
if (move_uploaded_file($_FILES['news_image']['tmp_name'], $dossier.$_FILES['news_image']['name']))
{
echo "<div class=\"sucess\">Le fichier ".$_FILES['news_image']['name'].
" a été téléchargé avec succès.</div>";
}
// Garder l'image en mémoire
$_SESSION['image'] = $_FILES['news_image']['name'];
}
?>
J'espère vous avoir donné suffisamment d'infos pour vous permettre de m'aider. Si ce n'est pas le cas, je fournirai ce qu'il manque.
Je bloque vraiment et je ne comprend pas pourquoi le contenu de mes $_SESSION ne s'affichent pas immédiatement après soumission du formulaire. Un regard d'expert sur la chose me sera bénéfique, et je suis d'avance reconnaissant à celles et ceux qui voudront bien m'aider.
Merci beaucoup !
Loraga
Modifié par Loraga (23 Nov 2017 - 17:03)