Ajout d'une fonction php pour masquer en variable une news

Résolu/Fermé
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 - 29 janv. 2018 à 00:27
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 - 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 - https://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 !

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
29 janv. 2018 à 08:04
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 ?
3
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
29 janv. 2018 à 08:33
Déjà merci pour ta réponse,
J'aimerais si possible que l'on m'aide à modifier le fichier index.php pour ajouter la fonction archiver et que l'ont m'aide également à créer le fichier "archiver_news.php"
J'ai tenté de le faire mais sans succès ....
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
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
0
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
29 janv. 2018 à 10:12
Merci j'essaie ça dès ce soir
0
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
Modifié le 30 janv. 2018 à 10:02
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
0
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
Modifié le 30 janv. 2018 à 10: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
}
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 janv. 2018 à 10:12
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 : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
2
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
Modifié le 30 janv. 2018 à 11:05
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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
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;
	
	

0
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
Modifié le 30 janv. 2018 à 22:12
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
0
Coukies94 Messages postés 40 Date d'inscription jeudi 3 septembre 2015 Statut Membre Dernière intervention 25 avril 2018 8
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 !
0