vue Aide PHP. Texte administrable. - Page 1
Kommunauty
Connexion
Inscription

Aide PHP. Texte administrable.


Dawlin Messages : 3381

Si tu pouvais l'afficher directement sur ce topic, ça permettrait aux personnes qui passeront ici plus tard avec le même problème d'avoir la solution Merci beaucoup à toi

lundi 5 septembre 2011

Ryu Messages : 1973

Ouai blindé que ça m'interesserait.

Pas encore eus le temps de voir pour les fichiers txt, flemme en rentrant quoi x)

lundi 5 septembre 2011

Daron Messages : 30

Ok, j'ai bientôt fini l'administration, juste une question je met un système avec mot de passe ?

Edit : ajout d'un point d'intérrogation

mardi 6 septembre 2011 (Dernière édition mardi 6 septembre 2011)

Ryu Messages : 1973

Si c'est une question tuas forcément zappé le point d’interrogation !

Mais sinon ouai, ouai je pense que c'mieux. Avec .htpasswrd et .htaccess

mardi 6 septembre 2011

Daron Messages : 30

Ok, et c'était une question.

mardi 6 septembre 2011

SiMax Messages : 7572

Pareil, le mot de passe ici, pas la peine de sortir la grosse artillerie ! En PHP tu fais un simple

if($_POST["password"] == "mon_super_mdp")
  {
  // On affiche la zone d'admin
  }
else
  {
  // On affiche le formulaire de mot de passe
  }
mardi 6 septembre 2011

Daron Messages : 30

Ne croyez pas que j'ai oublié J'ai juste passé 6 heures en voiture, je viens de rentrer et il se fait tard, il me reste quelques petits détails et j'aurai fini, je préfère faire les choses bien et éviter au maximum la présence de bugs donc je lance une batterie de tests.

Voilà, je vais dormir et demain je vous envoie ça ! Bonne nuit !

jeudi 8 septembre 2011 (Dernière édition jeudi 8 septembre 2011)

Ryu Messages : 1973

Thank you l'ami. Ça gayre~~

jeudi 8 septembre 2011

Daron Messages : 30

Bonsoir, je m'excuse encore pour le retard, j'espère que je ne vous ai pas trop fait attendre.

Bref, j'ai fini d'implémenter les fonctions principales : création, suppression, modification. J'avais ajouté une fonction de chiffrement qui permet de crypter les données enregistrées dans les fichiers où sont stockés les textes, mais j'ai eu quelque problèmes avec Firefox, mais sur Opera il n'y a pas de problème. Bref, je vous donne la version sans chiffrement, et j'essaierai de résoudre ce problème dès que possible.

Donc le système est très simple, vous avez une administration à la quelle vous pouvez accéder par un mot de passe, que vous pouvez définir dans une variable dans le fichier admin.php; Une fois connectés, vous pouvez créer, modifier, supprimer des contenus qui sont composés de leur id et du texte. Pour réutiliser des contenus dans vos fichiers .php, il suffit d'écrire cette ligne de code :

<?php 

echo readContent(<l'id du contenu défini lors de la création>);

?>

Voici le fichier à inclure dans vos fichiers *.php : contentHandler.lib.php (si vous avez d'autres noms je suis preneur )



<?php

/* Crée par Daron le 04/09/2011 */

/* This work is licensed under the Creative Commons Paternité
 - Pas d'Utilisation Commerciale - Partage à l'Identique 2.0
 France License. To view a copy of this license,
 visit http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 or send a letter to Creative Commons, 444 Castro Street, Suite 900,
 Mountain View, California, 94041, USA. */

// Création du dossier ./content
if(!opendir("./content")) mkdir("./content", 0777);

// Crypte le contenu
function cryptContent($foo)
{
$key = "zgd4kl09";
$ivSize = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

return base64_encode(mcrypt_encrypt(MCRYPT_XTEA, $key, $foo, MCRYPT_MODE_ECB, $iv));
}
 
// Décrypte le contenu
function uncryptContent($foo) {

$foo = base64_decode($foo);

$key = "zgd4kl09";
$ivSize = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
$uncrypt = mcrypt_decrypt(MCRYPT_XTEA, $key, $foo, MCRYPT_MODE_ECB, $iv);
 
return substr($uncrypt, 0, strlen($uncrypt) - 2);
}

// Crée un contenu
function createContent($id, $content)
{
if(!file_exists("./content/" . $id . ".content"))
{

// Ouverture du fichier en mode écriture
$fp = fopen ("./content/" . $id . ".content", "w");  

// On enregistre le contenu
$content = cryptContent($content);

if(fputs ($fp, $content))
$status = true;
else
$status = false;

fclose ($fp);  

}

else
{
$status = false;
}


return $status;
}

// Modifie le contenu
function updateContent($id, $antId, $newContent)
{
    // Ouverture du fichier en mode écriture
$error = '<p>Une erreur est survenue lors de la modification du contenu.</p>';


    if($id == $antId)
{
if(!$fp = fopen ("./content/" . $id . ".content", "w"))
return $error;
}

else
{
if(!$fp = fopen ("./content/" . $id . ".content", "w"))
return $error;

// Suppression de l'ancien fichier
unlink("./content/" . $antId . ".content");
}

// On enregistre le nouveau contenu
$newContent = cryptContent($newContent);

if(fputs ($fp, $newContent))
return true;
else
return false;

fclose ($fp);  
}

// Supprime le contenu
function deleteContent($id)
{
$fileName = "./content/" . $id . ".content";

if(file_exists($fileName)) {

unlink($fileName);
return true;
}

else
return false;
}

// Lit le contenu
function readContent($id)
{
$error = '<p>Une erreur est survenue lors de la lecture du contenu</p>';
$content = '';

if(!$fp = fopen ("./content/" . $id . ".content", "r"))
return $error;

else
{
while(!feof($fp)) {
$content .= fgets ($fp, 4096);  
}

fclose ($fp);  
return trim(uncryptContent($content));
}

}

?>

Ou une version plus légère : lightCH.lib.php à inclure dans vos fichiers *.php (vous devez tout de même avoir le fichier contentHandler.lib.php pour l'inclure dans le fichier admin.php)



<?php

/* Crée par Daron le 04/09/2011 */

/* This work is licensed under the Creative Commons Paternité
 - Pas d'Utilisation Commerciale - Partage à l'Identique 2.0
 France License. To view a copy of this license,
 visit http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 or send a letter to Creative Commons, 444 Castro Street, Suite 900,
 Mountain View, California, 94041, USA. */

// Création du dossier ./content
if(!opendir("./content")) mkdir("./content", 0777);


// Décrypte le contenu
function uncryptContent($foo) {

$foo = base64_decode($foo);

$key = "zgd4kl09";
$ivSize = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
$uncrypt = mcrypt_decrypt(MCRYPT_XTEA, $key, $foo, MCRYPT_MODE_ECB, $iv);
 
return substr($uncrypt, 0, strlen($uncrypt) - 2);
}

// Lit le contenu
function readContent($id)
{
$error = '<p>Une erreur est survenue lors de la lecture du contenu</p>';
$content = '';

if(!$fp = fopen ("./content/" . $id . ".content", "r"))
return $error;

else
{
while(!feof($fp)) {
$content .= fgets ($fp, 4096);  
}

fclose ($fp);  
return trim(uncryptContent($content));
}

}

?>

Et voici le fichier admin.php :


<?php

session_start();

// Ecrivez ici votre mot de passe
$S_PASSWORD = 'VOTREMOTDEPASSE';  

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Gestion de contenu</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   </head>
   <body>
   
 
<?php

if(!isset($_SESSION['connected']))
{
if(isset($_POST['pass']))
{
$pass = $_POST['pass'];

if($pass == $S_PASSWORD)
{
$_SESSION['connected'] = 1;
}

else
{
echo '<p>Mot de passe erroné.</p>';
}

}

else
{
?>

<form method="post">
<label for="pass" >Mot de passe : </label><input name="pass" id="pass" type="password"/>
<input type="submit" value="Connexion"/>
</form>

<?php
}
}

if(isset($_SESSION['connected']))
{


include('contentHandler.lib.php');

?>

<h1>Administration du contenu</h1>
   
<ul>
<li><a href="admin.php?act=1">Créer un contenu</a></li>
<li><a href="admin.php?act=0">Liste des contenus</a></li>
<li><a href="logout.php">Se déconnecter</a></li>
</ul>
   
<?php   
   
// ADMIN
if(isset($_POST['c_id_create']) AND isset($_POST['c_content_create']))
{
$c_id = htmlentities($_POST['c_id_create']);
$c_content = $_POST['c_content_create'];

if(empty($c_id))
{
$c_id = 'SansTitre-0';
}

if(createContent($c_id, $c_content)) {
echo 'Votre contenu a bien été enregistré <br />';
echo '<span style="font-weight: bold;">' . $c_id . '</span> : ' . $c_content; }

else
echo '<p>Vous ne pouvez pas utiliser deux fois le même id pour deux contenus.</p>';
}

else
{
   
// TAILLE DE L'EXTENSION DES FICHIERS
$extSize = strlen('.content');
   
if(isset($_GET['act']))
$act = (int)($_GET['act']);

else
$act = 0;


// LISTE DES CONTENUS
if($act == 0)
{
echo 'Liste des contenus :';
$dirname = './content/';
$dir = opendir($dirname);


echo '<ul>';
$i = 0;

while($file = readdir($dir)) {

if($file != '.' && $file != '..' && !is_dir($dirname.$file))
{
$c_id = substr($file, 0, -$extSize);
echo '<li><a href="admin.php?act=4&c_id=' . $c_id . '">' . $file . '</a>
| <a href="admin.php?act=2&c_id=' . $c_id . '">MODIFIER</a> | <a href="admin.php?act=3&c_id=' . $c_id . '">SUPPRIMER</a></li>';
$i++;
}

}
echo '</ul>';

if($i == 0)
{
echo '<p>Il n'y a aucun contenu enregistré.</p>';
}

closedir($dir);
}

// CREATION DE CONTENU
else if($act == 1)
{

   ?>
   
<form method="post">
<label for="c_id_create">Identificateur (nombre ou simple titre sans accents)</label><br />
<input type="text" name="c_id_create" id="c_id_create" />

<br />
<br />

<label for="c_content_create">Contenu</label><br />
<textarea name="c_content_create" id="c_content_create"></textarea><br />

<input type="submit" value="Enregistrer" />
</form>

<?php

}

// MODIFICATION D'UN CONTENU
else if($act == 2 AND isset($_GET['c_id']))
{

$cPastId = htmlentities($_GET['c_id']);

if(isset($_POST['c_id_update']) AND isset($_POST['c_content_update']))
{
$c_id = htmlentities($_POST['c_id_update']);
$newContent = htmlentities($_POST['c_content_update']);

if(updateContent($c_id, $cPastId, $newContent))
echo '<p>Le contenu a bien été modifié.</p>';
}

else
{

?>

<form method="post" action="admin.php?act=2&c_id=<?php echo $_GET['c_id']?>">
<label for="c_id_update">Identificateur (nombre ou simple titre sans accents)</label><br />
<input type="text" name="c_id_update" id="c_id_update" value="<?php echo $_GET['c_id']; ?>"/>

<br />
<br />

<label for="c_content_update">Contenu</label><br />
<textarea name="c_content_update" id="c_content_update"><?php echo readContent($_GET['c_id']); ?></textarea><br />

<br />
<br />

<input type="submit" value="Enregistrer" />
</form>

<?php
}
}

// SUPRESSION D'UN CONTENU
else if($act == 3 AND isset($_GET['c_id']))
{

$c_id = htmlentities($_GET['c_id']);
if(deleteContent($c_id))
echo '<p>Le contenu : " ' . $c_id . ' " a bien été supprimé.</p>';

else
echo '<p>Le contenu que vous essayez de supprimer n'existe pas.</p>';

}

else if($act == 4 AND isset($_GET['c_id']))
{
$c_id = htmlentities($_GET['c_id']);
echo '<h2>CONTENU : ' . $c_id . '</h2>';
echo '<p style="border-top: 1px solid black; text-decoration: underline;">' . readContent($c_id) . '</p>';
}

else
{
$act = 0;
}

}



}

?>
   </body>
</html>   

Et enfin le fichier logout.php :


<?php

session_start();

if(isset($_SESSION['connected']))
{
session_destroy();
echo '<p>Vous êtes bien déconnecté, à bientôt.</p>';

echo '<p><a href="admin.php">Revenir à l'administration</a></p>';
}

else
{
header('Location: admin.php');
}

?>

Voilà, j'espère que ce petit script vous sera utile, et faites en bon usage, pour la licence j'ai pris celle qui me convenait mais si vous avez des conseils, ou des exigences je pourrais la changer. Peut être que j'améliorerai ce petit script, il ne tient qu'à vous de me demander des fonctionnalités en plus, et j'essaierai aussi de l'habiller avec un belle CSS.

P.S. : Si vous avez des bugs, n'hésitez pas à m'en faire part, j'essaierai de réagir au plus vite.

Daron.

dimanche 11 septembre 2011

Daron Messages : 30

Il y a un bug dans l'édition de messages, donc désolé pour le double post, je voulais juste vous dire que j'ai corrigé le problème avec le chiffrement.

dimanche 11 septembre 2011

Page suivante »