Ajout d'une fonction php pour masquer en variable une news [Résolu]

Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 29 janv. 2018 à 00:27 - Dernière réponse : Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention
- 10 févr. 2018 à 22:25
Bonjour,

Alors voila le titre montre bien que je suis débutant dans le domaine du développement mais je vais essayer de vous expliquer mon besoin et je vous remercie d'avance de lire ce message.

J'ai mis en ligne ce site (que vous pouvez tester pour comprendre mon besoin) :
http://coukies.zapto.org:8000
================
C'est un outil que je met en place pour gérer des "news"
================
il est composé de 4 fichiers php pour ajouter / éditer / supprimer les news et un pour l'index et pour finir un fichier news.txt pour stocker les news.
================
Avec le développement actuel j'arrive donc à ajouter, éditer et supprimer les news mais je voudrais avoir une autre fonction sur ma page index.php qui me permet de conserver la news en la déplaçant par exemple dans un autre fichier archive (news_archive.txt par exemple) un bouton "archiver" a coté de "Supprimer / Editer" sur l'index.php serait idéal
================
Puis sur la page index ajouter un liens News archivés qui me permettrait d'afficher le contenu de "news_archive.txt"
================

==================
voici mon fichier index complet:
</html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Incidents et Demandes</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<div align='center' ; class='fichier'><u><b>

<h2><u>Pour transmettre un fichier au support informatique :</u></h2>
</font></b></u>
<form method="POST" action="FichiersUploader\upload.php" enctype="multipart/form-data">
<!-- On limite le fichier à 10000Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
Fichier : <input type="file" name="avatar">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>
</div>
<h2><u>Liste des demandes et incidents actifs au support informatique :</u></h2>
<div align='center' ; class='detail2'><b>
<?php
$liste_news = unserialize(file_get_contents('news.txt'));
if(!empty($liste_news)) {
foreach($liste_news as $id => $news) {
$news = array_map('htmlspecialchars', $news);
?>
<h2><?php echo $news['titre'] ?></h2>
<i>Ajoutée par <?php echo $news['auteur'] ?></i> <br />
<p><?php echo $news['contenu'] ?></p>
<i><a href="supprimer_news.php?id=<?php echo $id ?>" onclick="return confirm('Etes-vous sûr de vouloir supprimer cette news ?');">Supprimer</a> /
 
<a href="editer_news.php?id=<?php echo $id ?>">Editer</a></i> <br>_______________________________________________________________________<br>
<?php
}
}
else {
echo 'Il n\'y a aucun incidents ou demandes pour le moment<br />';
}
echo '<h2><a href="ajouter_news.php">Ajouter un incident ou une demande pour le service informatique</a></h2>';
?>
</div>
<div align='center' ; class='detail'><u><b><h1>Tchat</h1></font></b></u>
<!-- Debut shoutbox - http://www.i-tchat.com -->
<center>
<a target="_blank"; return false;" class="info"><FONT COLOR="Orange"><b>"Comment utiliser"</b></FONT COLOR="Orange"><span style="top: 5px; left: -10px;">
Pour pouvoir utiliser le tchat<br>
cliquer sur "connexion"
<br>
puis créer votre compte
<br>
</span></a>
====================================
===================================
voila par exemple mon fichier "supprimer_news.php" je peux vous montrer les autres si besoin

<?php
//Si l'id passé en paramètre dans l'url n'existe pas, c'est que le visiteur a été amenené ici par hasard
if(!isset($_GET['id'])) {
//Donc on redirige vers index.php
header('Location: index.php');
//Puis on stoppe l'exécution du script
exit();
}
//On récupère l'array des news
$news = unserialize(file_get_contents('news.txt'));
//Puis l'id passé en paramètre
$id = (int) $_GET['id'];

//Si la news existe
if(isset($news[$id])) {
//On efface l'index correspondant à l'id de la news
unset($news[$id]);
//Puis on sauvegarde le tout
file_put_contents('news.txt', serialize($news));
echo 'La news a bien été supprimée !';
}
else {
echo 'La news n\'existe pas.';
}
echo '<br />';
echo '<a href="index.php">Retour</a>';
====================================
===================================
Voici l'exemple d'une entré du fichier news.txt
a:1:{i:0;a:3:{s:5:"titre";s:21:"ici_le_texte_du_titre";s:6:"auteur";s:22:"ici_le_texte_du_pseudo";s:7:"contenu";s:34:"ici_le_texte_du_contenu_de_la_news";}}
====================================
===================================
Voila comment cela s'affiche sur la page index.php



====================================
===================================
Je suis conscient que les thermes que j'emploi ne sont certainement pas les bon et que le code laisse peut être à désirer alors si vous pouviez etre indulgent ;D
Je ne laisserais aucunes remarque de coté je suis la pour m'ameliorer et donc améliorer mon code
Merci l’équipe !
Afficher la suite 

12 réponses

Répondre au sujet
jordane45 19956 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 février 2018 Dernière intervention - 29 janv. 2018 à 08:04
+3
Utile
6
Bonjour

Il te suffit d'utiliser les mêmes codes pour sauvegarder dans un autre fichier texte celles que tu veux archiver.
Quel est ton souci exactement ?
jordane45 19956 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 février 2018 Dernière intervention - 29 janv. 2018 à 10:08
Côté index.php

<h2><?php echo $news['titre'] ?></h2>
<i>Ajoutée par <?php echo $news['auteur'] ?></i> <br />
<p><?php echo $news['contenu'] ?></p>
<i><a href="supprimer_news.php?id=<?php echo $id ?>" onclick="return confirm('Etes-vous sûr de vouloir supprimer cette news ?');">Supprimer</a> /
 
<a href="editer_news.php?id=<?php echo $id ?>">Editer</a></i> 
<a href="archiver_news.php?id=<?php echo $id ?>">Editer</a></i> 


Il te faut donc créer un fichier archiver_news.php
Dans lequel tu placeras le code
-> Ajout de la news dans un autre fichier text
-> Suppression de la news dans l'ancien fichier
Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 29 janv. 2018 à 10:12
Merci j'essaie ça dès ce soir
Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 29 janv. 2018 à 19:00
C'est parfait Jordane45 pour le fichier "index.php" merci beaucoup,

J'ai donc pu avancer et créé le fichier "archiver_news.php" et le fichier "news_archive.txt"

===========================
Il va bien ajouter la news dans un autre fichier "news_archive.txt" et il supprime bien la news du fichier "news.txt" mais deux problèmes (surement du au fait que j'ai tenté d'adapter le code du fichier "editer_news.php" pour faire l'archivage de la news) :

1) au moment d'archiver une news via mon index.php la suppression se fait bien en automatique mais nous sommes obligé de cliquer sur le bouton "appliquer les modification" pour que le fichier "news_archive.txt" reçoive la news => possible de le faire directement sans confirmation ?

2) dès que j'archive 2 news, la deuxième écrase ma première .... => possible d'incrémenter au lieu d'editer ?
=====================================
Voici le fichier "archiver_news.php"
=====================================
<?php
if(!isset($_GET['id'])) {
 header('Location: index.php');
 exit();
}

$news = unserialize(file_get_contents('news.txt'));
$newsAmodifier = (int) $_GET['id'];
if(isset($_POST['titre']) && isset($_POST['contenu'])) {
 $news[$newsAmodifier]['titre'] = $_POST['titre'];
 $news[$newsAmodifier]['contenu'] = $_POST['contenu'];
 file_put_contents('archive/news_archive.txt', serialize($news));
 echo 'La news a bien été archivé';
 echo '<br />';
 echo '<a href="index.php">Retour</a>';
} else {
 ?>
 <form action="" method="POST">
 Auteur : <strong><?php echo $news[$newsAmodifier]['auteur'] ?></strong><br />
 <label for="titre">Titre de la news :</label> <input type="text" name="titre" id="titre" value="<?php echo $news[$newsAmodifier]['titre'] ?>" /><br />
 <label for="contenu">Contenu de l'incident ou demande : </label><br />
 <textarea name="contenu" id="contenu" rows="20" cols="60"><?php echo $news[$newsAmodifier]['contenu'] ?></textarea><br />
  <input type="submit" value="Appliquer les modifications" />
  
  <br>
   <a href="index.php">Retour</a>
  
  
 </form>
 <?php
}
//Si l'id passé en paramètre dans l'url n'existe pas, c'est que le visiteur a été amenené ici par hasard
if(!isset($_GET['id'])) {
 //Donc on redirige vers index.php
 header('Location: index.php');
 //Puis on stoppe l'exécution du script
 exit();
}
//On récupère l'array des news
$news = unserialize(file_get_contents('news.txt'));
//Puis l'id passé en paramètre
$id = (int) $_GET['id'];

//Si la news existe
if(isset($news[$id])) {
 //On efface l'index correspondant à l'id de la news
 unset($news[$id]);
 
 //Puis on sauvegarde le tout
 file_put_contents('news.txt', serialize($news));

 echo 'La news a bien été supprimé du fichier news.txt !';
}
else {
 echo '';
}
echo '<br />';

======================================
A toute fin utile :
Voici le fichier "ajouter_news.php" qui me sert pour ajouter des news à mon fichier news.txt il peut surement servir pour corriger mon code ci-dessus mais je n'y suis pas parvenu
======================================
<?php
if(isset($_POST['titre']) && isset($_POST['contenu']) && isset($_POST['pseudo'])) {
     //On définit les variables
 $titre = $_POST['titre'];
     $contenu = $_POST['contenu'];
     $pseudo = $_POST['pseudo'];
 //On récupère les données déjà existantes
 $news = unserialize(file_get_contents('news.txt'));
 $news[] = array('titre' => $titre, 'auteur' => $pseudo, 'contenu' => $contenu);
 file_put_contents('news.txt', serialize($news));
 
 echo 'La news a bien été ajoutée !';
 echo '<br />';
 echo '<a href="index.php">Retour</a>';
}
else {
 ?>
 <form action="" method="post">
  <label for="pseudo">Votre pseudo :</label> <input type="text" name="pseudo" id="pseudo" /><br />
  <label for="titre">Titre de la news :</label> <input type="text" name="titre" id="titre" /><br />
  <label for="contenu">Contenu de la news :</label> <br />
  <textarea name="contenu" id="contenu" rows="20" cols="60"></textarea><br />
  <input type="submit" value="Ajouter la news" />
  
  <br>
  
  <a href="index.php">Retour</a>
 </form>
 <?php
}


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45
Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 29 janv. 2018 à 19:03
A toute fin utile encore voici le fichier "editer_news.php" que j'ai essayé d'adapter pour l'ajout dans mon fichier text "news_archive.txt" :
<?php
if(!isset($_GET['id'])) {
 header('Location: index.php');
 exit();
}

$news = unserialize(file_get_contents('news.txt'));
$newsAmodifier = (int) $_GET['id'];
if(isset($_POST['titre']) && isset($_POST['contenu'])) {
 $news[$newsAmodifier]['titre'] = $_POST['titre'];
 $news[$newsAmodifier]['contenu'] = $_POST['contenu'];
 file_put_contents('news.txt', serialize($news));
 echo 'La news a bien été editée.';
 echo '<br />';
 echo '<a href="index.php">Retour</a>';
} else {
 ?>
 <form action="" method="POST">
 Auteur : <strong><?php echo $news[$newsAmodifier]['auteur'] ?></strong><br />
 <label for="titre">Titre de la news :</label> <input type="text" name="titre" id="titre" value="<?php echo $news[$newsAmodifier]['titre'] ?>" /><br />
 <label for="contenu">Contenu de l'incident ou demande : </label><br />
 <textarea name="contenu" id="contenu" rows="20" cols="60"><?php echo $news[$newsAmodifier]['contenu'] ?></textarea><br />
  <input type="submit" value="Appliquer les modifications" />
  
  <br>
   <a href="index.php">Retour</a>
  
  
 </form>
 <?php
}
Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 30 janv. 2018 à 09:50
https://www.transfernow.net/580md8f13m45
Voici le projet entier pour faciliter la compréhension du besoin
Commenter la réponse de jordane45
jordane45 19956 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 février 2018 Dernière intervention - 30 janv. 2018 à 10:12
+2
Utile
Ca deverait faire l'affaire :
<?php

//Activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//récupération propre des variables AVANT de les utiliser
$id = !empty($_GET['id']) ? (int)$_GET['id'] : NULL;
$titre = !empty($_POST['titre']) ? $_POST['titre'] : NULL;
$contenu = !empty($_POST['contenu']) ? $_POST['contenu'] : NULL;
$newsAmodifier = $id;

if(!$id) {
 header('Location: index.php');
 exit();
}


if($titre && $contenu) {
	$news[$newsAmodifier]['titre'] = $titre;
	$news[$newsAmodifier]['contenu'] = $contenu;
	
	
	//On récupère l'array des news archivées
	 $newsarchive = unserialize(file_get_contents('news.txt'));
	//On récupère l'array des news
	 $news = unserialize(file_get_contents('news.txt'));
	
	file_put_contents('archive/news_archive.txt', serialize($news));
	echo 'La news a bien été archivée';
		
	if(isset($news[$id])) {
		 //On efface l'index correspondant à l'id de la news
		 unset($news[$id]);
		 
		 //Puis on sauvegarde le tout
		 file_put_contents('news.txt', serialize($news));

		 echo 'La news a bien été supprimé du fichier news.txt !';
	}
	echo '<br />';
	echo '<a href="index.php">Retour</a>';
	
} else {
 ?>
 <form action="" method="POST">
	Auteur : <strong><?php echo $news[$newsAmodifier]['auteur'] ?></strong><br />
	<label for="titre">Titre de la news :</label> <input type="text" name="titre" id="titre" value="<?php echo $news[$newsAmodifier]['titre'] ?>" /><br />
	<label for="contenu">Contenu de l'incident ou demande : </label><br />
	<textarea name="contenu" id="contenu" rows="20" cols="60"><?php echo $news[$newsAmodifier]['contenu'] ?></textarea><br />
	<input type="submit" value="Appliquer les modifications" />
	<br>
    <a href="index.php">Retour</a> 
 </form>
 <?php
}
?>


NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Commenter la réponse de jordane45
Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - Modifié par Coukies94 le 30/01/2018 à 11:05
0
Utile
3
Bonjour Jordane, bien compris pour le code, désolé, je le ferais à l'avenir, c'est vrais que c'est beaucoup plus compréhensible.
Merci de prendre du temps pour moi et mon problème
======
Je viens d'essayer le code que tu m'a fournis, la copie dans news_archive.txt et la suppression de news.txt se fait bien en même temps mais, je n'arrive plus à archiver ma première news et j'ai encore mes deux erreurs quand j'archive la deuxième news:

1) Au moment d'archiver une news via index.php nous sommes obligé de cliquer sur le bouton "appliquer les modification" pour que le fichier "news_archive.txt" reçoive la news (j'ai en plus des erreurs que je ne comprend pas, voir le screenshot)


2) Dans mon index.php (et donc news.txt) si je créé la news 1 et la news 2 et que j'archive la news 2, je me retrouve dans le fichier news_archive.txt avec les 2 news .... et si j'archive une autre ligne ça écrase la news de news_archive.txt

==========
Si tu peux (et a le temps je te laisse voir en direct, le site est en ligne)
URL de mon index : http://coukies.zapto.org:8000/
URL de mon index_archive : http://coukies.zapto.org:8000/archive/index_archive.php
jordane45 19956 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 février 2018 Dernière intervention - 30 janv. 2018 à 12:14
Oupsss...
déjà commence par inverser quelques lignes dans le code :
$news[$newsAmodifier]['titre'] = $titre;
	$news[$newsAmodifier]['contenu'] = $contenu;
	
	
	//On récupère l'array des news archivées
	 $newsarchive = unserialize(file_get_contents('news.txt'));
	//On récupère l'array des news
	 $news = unserialize(file_get_contents('news.txt'));

A remplacer par :
	//On récupère l'array des news archivées
	 $newsarchive = unserialize(file_get_contents('news.txt'));
	//On récupère l'array des news
	 $news = unserialize(file_get_contents('news.txt'));

        $news[$newsAmodifier]['titre'] = $titre;
	$news[$newsAmodifier]['contenu'] = $contenu;
	
	

Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 30 janv. 2018 à 22:11
Je viens de faire les modifications dans le fichier archiver_news.php
Mais cela n'a pas réglé mes problèmes précédents (en fait j'ai l’impression que ça n'a pas changé le fonctionnement)

Voici mon code complet actuellement suite à ton conseil :


<?php

//Activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//récupération propre des variables AVANT de les utiliser
$id = !empty($_GET['id']) ? (int)$_GET['id'] : NULL;
$titre = !empty($_POST['titre']) ? $_POST['titre'] : NULL;
$contenu = !empty($_POST['contenu']) ? $_POST['contenu'] : NULL;
$newsAmodifier = $id;

if(!$id) {
 header('Location: index.php');
 exit();
}


if($titre && $contenu) {
 //On récupère l'array des news archivées
  $newsarchive = unserialize(file_get_contents('news.txt'));
 //On récupère l'array des news
  $news = unserialize(file_get_contents('news.txt'));

        $news[$newsAmodifier]['titre'] = $titre;
 $news[$newsAmodifier]['contenu'] = $contenu;
 
 

 //On récupère l'array des news
  $news = unserialize(file_get_contents('news.txt'));
 
 file_put_contents('archive/news_archive.txt', serialize($news));
 echo 'La news a bien été archivée';
  
 if(isset($news[$id])) {
   //On efface l'index correspondant à l'id de la news
   unset($news[$id]);
   
   //Puis on sauvegarde le tout
   file_put_contents('news.txt', serialize($news));

   echo 'La news a bien été supprimé du fichier news.txt !';
 }
 echo '<br />';
 echo '<a href="index.php">Retour</a>';
 
} else {
 ?>
 <form action="" method="POST">
 Auteur : <strong><?php echo $news[$newsAmodifier]['auteur'] ?></strong><br />
 <label for="titre">Titre de la news :</label> <input type="text" name="titre" id="titre" value="<?php echo $news[$newsAmodifier]['titre'] ?>" /><br />
 <label for="contenu">Contenu de l'incident ou demande : </label><br />
 <textarea name="contenu" id="contenu" rows="20" cols="60"><?php echo $news[$newsAmodifier]['contenu'] ?></textarea><br />
 <input type="submit" value="Appliquer les modifications" />
 <br>
    <a href="index.php">Retour</a> 
 </form>
 <?php
}
?>


C'est peut être juste pas possible ce que je voudrais faire .... ça me déprime de pas y parvenir lol
Coukies94 24 Messages postés jeudi 3 septembre 2015Date d'inscription 11 février 2018 Dernière intervention - 10 févr. 2018 à 22:25
Je me suis rabattu sur un système un peut plus complet et aboutis (pour lequel je vais encore vous soliciter dans un autre post ^^) :
https://openclassrooms.com/courses/un-systeme-de-news-sans-base-de-donnees-grace-a-serialize-et-unserialize
Merci pour votre aide tout de même !
Commenter la réponse de Coukies94